Fixed Level generators

This commit is contained in:
Shoghi Cervantes 2014-03-23 00:19:11 +01:00
parent 63f1f7581f
commit cb2b08b248
4 changed files with 22 additions and 17 deletions

View File

@ -67,10 +67,10 @@ class Normal extends Generator{
$this->level = $level; $this->level = $level;
$this->random = $random; $this->random = $random;
$this->random->setSeed($this->level->getSeed()); $this->random->setSeed($this->level->getSeed());
$this->noiseHills = new Simplex($this->random, 3); $this->noiseHills = new Simplex($this->random, 3, 0.11, 12);
$this->noisePatches = new Simplex($this->random, 2); $this->noisePatches = new Simplex($this->random, 2, 0.03, 16);
$this->noisePatchesSmall = new Simplex($this->random, 2); $this->noisePatchesSmall = new Simplex($this->random, 2, 0.5, 4);
$this->noiseBase = new Simplex($this->random, 16); $this->noiseBase = new Simplex($this->random, 16, 0.7, 16);
$ores = new Ore(); $ores = new Ore();
@ -106,10 +106,10 @@ class Normal extends Generator{
for($z = 0; $z < 16; ++$z){ for($z = 0; $z < 16; ++$z){
for($x = 0; $x < 16; ++$x){ for($x = 0; $x < 16; ++$x){
$i = ($z << 4) + $x; $i = ($z << 4) + $x;
$hills[$i] = $this->noiseHills->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), 0.11, 12, true); $hills[$i] = $this->noiseHills->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), true);
$patches[$i] = $this->noisePatches->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), 0.03, 16, true); $patches[$i] = $this->noisePatches->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), true);
$patchesSmall[$i] = $this->noisePatchesSmall->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), 0.5, 4, true); $patchesSmall[$i] = $this->noisePatchesSmall->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), true);
$base[$i] = $this->noiseBase->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), 0.7, 16, true); $base[$i] = $this->noiseBase->noise2D($x + ($chunkX << 4), $z + ($chunkZ << 4), true);
if($base[$i] < 0){ if($base[$i] < 0){
$base[$i] *= 0.5; $base[$i] *= 0.5;

View File

@ -33,6 +33,8 @@ abstract class Generator{
protected $offsetY = 0; protected $offsetY = 0;
protected $offsetZ = 0; protected $offsetZ = 0;
protected $octaves = 8; protected $octaves = 8;
protected $frequency;
protected $amplitude;
public static function floor($x){ public static function floor($x){
return $x >= 0 ? (int) $x : (int) ($x - 1); return $x >= 0 ? (int) $x : (int) ($x - 1);
@ -58,7 +60,7 @@ abstract class Generator{
abstract public function getNoise3D($x, $y, $z); abstract public function getNoise3D($x, $y, $z);
public function noise2D($x, $z, $frequency, $amplitude, $normalized = false){ public function noise2D($x, $z, $normalized = false){
$result = 0; $result = 0;
$amp = 1; $amp = 1;
$freq = 1; $freq = 1;
@ -67,8 +69,8 @@ abstract class Generator{
for($i = 0; $i < $this->octaves; ++$i){ for($i = 0; $i < $this->octaves; ++$i){
$result += $this->getNoise2D($x * $freq, $z * $freq) * $amp; $result += $this->getNoise2D($x * $freq, $z * $freq) * $amp;
$max += $amp; $max += $amp;
$freq *= $frequency; $freq *= $this->frequency;
$amp *= $amplitude; $amp *= $this->amplitude;
} }
if($normalized === true){ if($normalized === true){
$result /= $max; $result /= $max;
@ -77,7 +79,7 @@ abstract class Generator{
return $result; return $result;
} }
public function noise3D($x, $y, $z, $frequency, $amplitude, $normalized = false){ public function noise3D($x, $y, $z, $normalized = false){
$result = 0; $result = 0;
$amp = 1; $amp = 1;
$freq = 1; $freq = 1;
@ -86,8 +88,8 @@ abstract class Generator{
for($i = 0; $i < $this->octaves; ++$i){ for($i = 0; $i < $this->octaves; ++$i){
$result += $this->getNoise3D($x * $freq, $y * $freq, $z * $freq) * $amp; $result += $this->getNoise3D($x * $freq, $y * $freq, $z * $freq) * $amp;
$max += $amp; $max += $amp;
$freq *= $frequency; $freq *= $this->frequency;
$amp *= $amplitude; $amp *= $this->amplitude;
} }
if($normalized === true){ if($normalized === true){
$result /= $max; $result /= $max;

View File

@ -32,8 +32,10 @@ class Perlin extends Generator{
]; ];
public function __construct(Random $random, $octaves){ public function __construct(Random $random, $octaves, $frequency, $amplitude){
$this->octaves = $octaves; $this->octaves = $octaves;
$this->frequency = $frequency;
$this->amplitude = $amplitude;
$this->offsetX = $random->nextFloat() * 256; $this->offsetX = $random->nextFloat() * 256;
$this->offsetY = $random->nextFloat() * 256; $this->offsetY = $random->nextFloat() * 256;
$this->offsetZ = $random->nextFloat() * 256; $this->offsetZ = $random->nextFloat() * 256;

View File

@ -64,8 +64,9 @@ class Simplex extends Perlin{
[2, 1, 0, 3], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [3, 1, 0, 2], [0, 0, 0, 0], [3, 2, 0, 1], [3, 2, 1, 0]]; [2, 1, 0, 3], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [3, 1, 0, 2], [0, 0, 0, 0], [3, 2, 0, 1], [3, 2, 1, 0]];
protected $offsetW; protected $offsetW;
public function __construct(Random $random, $octaves){
parent::__construct($random, $octaves); public function __construct(Random $random, $octaves, $frequency, $amplitude){
parent::__construct($random, $octaves, $frequency, $amplitude);
$this->offsetW = $random->nextFloat() * 256; $this->offsetW = $random->nextFloat() * 256;
self::$SQRT_3 = sqrt(3); self::$SQRT_3 = sqrt(3);
self::$SQRT_5 = sqrt(5); self::$SQRT_5 = sqrt(5);