void Raise() { FilteredNoise raiseNoise1 = new FilteredNoise(new PerlinNoise(random, TerrainDetailOctaves), new PerlinNoise(random, TerrainDetailOctaves)); FilteredNoise raiseNoise2 = new FilteredNoise(new PerlinNoise(random, TerrainDetailOctaves), new PerlinNoise(random, TerrainDetailOctaves)); PerlinNoise raiseNoise3 = new PerlinNoise(random, TerrainFeatureOctaves); // raising const double scale = 1.3; for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapLength; y++) { double d2 = raiseNoise1.GetNoise(x * scale, y * scale) / 6.0 - 4; double d3 = raiseNoise2.GetNoise(x * scale, y * scale) / 5.0 + 10.0 - 4; double d4 = raiseNoise3.GetNoise(x, y) / 8.0; if (d4 > 0) { d3 = d2; } double elevation = Math.Max(d2, d3) / 2.0; if (elevation < 0) { elevation *= 0.8; } heightmap[(x + y * mapWidth)] = (int)elevation; } } }
void Soil() { PerlinNoise soilNoise1 = new PerlinNoise(random, 8); for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapLength; y++) { int i7 = (int)(soilNoise1.GetNoise(x, y) / 24.0) - 4; int i19 = heightmap[(x + y * mapWidth)] + waterLevel; int i21 = i19 + i7; heightmap[(x + y * mapWidth)] = Math.Max(i19, i21); if (heightmap[(x + y * mapWidth)] > mapHeight - 2) { heightmap[(x + y * mapWidth)] = (mapHeight - 2); } if (heightmap[(x + y * mapWidth)] < 1) { heightmap[(x + y * mapWidth)] = 1; } for (int z = 0; z < mapHeight; z++) { Block block = Block.Air; if (z <= i19) { block = Block.Dirt; } if (z <= i21) { block = Block.Stone; } if (z == 0) { block = Block.Lava; } int index = (z * mapLength + y) * mapWidth + x; blocks[index] = (byte)block; } } } }
void Grow() { PerlinNoise growNoise1 = new PerlinNoise(random, 8); PerlinNoise growNoise2 = new PerlinNoise(random, 8); for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapLength; y++) { int elevation = heightmap[(x + y * mapWidth)]; Block blockAbove = (Block)blocks[(((elevation + 1) * mapLength + y) * mapWidth + x)]; int index = (elevation * mapLength + y) * mapWidth + x; if (blockAbove == Block.Air) { bool placeSand = growNoise1.GetNoise(x, y) > 8.0; if ((elevation <= mapHeight / 2 - 1) && placeSand) { blocks[index] = (byte)Block.Sand; } else { blocks[index] = (byte)Block.Grass; } } else if (((blockAbove == Block.Water) || (blockAbove == Block.StillWater)) && (elevation <= mapHeight / 2 - 1)) { bool placeGravel = growNoise2.GetNoise(x, y) > 12.0; if (placeGravel) { blocks[index] = (byte)Block.Gravel; } } } } }
void Soil() { PerlinNoise soilNoise1 = new PerlinNoise( random, 8 ); for( int x = 0; x < mapWidth; x++ ) { for( int y = 0; y < mapLength; y++ ) { int i7 = (int)( soilNoise1.GetNoise( x, y ) / 24.0 ) - 4; int i19 = heightmap[( x + y * mapWidth )] + waterLevel; int i21 = i19 + i7; heightmap[( x + y * mapWidth )] = Math.Max( i19, i21 ); if( heightmap[( x + y * mapWidth )] > mapHeight - 2 ) heightmap[( x + y * mapWidth )] = ( mapHeight - 2 ); if( heightmap[( x + y * mapWidth )] < 1 ) heightmap[( x + y * mapWidth )] = 1; for( int z = 0; z < mapHeight; z++ ) { Block block = Block.Air; if( z <= i19 ) block = Block.Dirt; if( z <= i21 ) block = Block.Stone; if( z == 0 ) block = Block.Lava; int index = ( z * mapLength + y ) * mapWidth + x; blocks[index] = (byte)block; } } } }
void Raise() { FilteredNoise raiseNoise1 = new FilteredNoise( new PerlinNoise( random, TerrainDetailOctaves ), new PerlinNoise( random, TerrainDetailOctaves ) ); FilteredNoise raiseNoise2 = new FilteredNoise( new PerlinNoise( random, TerrainDetailOctaves ), new PerlinNoise( random, TerrainDetailOctaves ) ); PerlinNoise raiseNoise3 = new PerlinNoise( random, TerrainFeatureOctaves ); // raising const double scale = 1.3; for( int x = 0; x < mapWidth; x++ ) { for( int y = 0; y < mapLength; y++ ) { double d2 = raiseNoise1.GetNoise( x * scale, y * scale ) / 6.0 - 4; double d3 = raiseNoise2.GetNoise( x * scale, y * scale ) / 5.0 + 10.0 - 4; double d4 = raiseNoise3.GetNoise( x, y ) / 8.0; if( d4 > 0 ) d3 = d2; double elevation = Math.Max( d2, d3 ) / 2.0; if( elevation < 0 ) elevation *= 0.8; heightmap[( x + y * mapWidth )] = (int)elevation; } } }
void Grow() { PerlinNoise growNoise1 = new PerlinNoise( random, 8 ); PerlinNoise growNoise2 = new PerlinNoise( random, 8 ); for( int x = 0; x < mapWidth; x++ ) { for( int y = 0; y < mapLength; y++ ) { int elevation = heightmap[( x + y * mapWidth )]; Block blockAbove = (Block)blocks[( ( ( elevation + 1 ) * mapLength + y ) * mapWidth + x )]; int index = ( elevation * mapLength + y ) * mapWidth + x; if( blockAbove == Block.Air ) { bool placeSand = growNoise1.GetNoise( x, y ) > 8.0; if( ( elevation <= mapHeight / 2 - 1 ) && placeSand ) { blocks[index] = (byte)Block.Sand; } else { blocks[index] = (byte)Block.Grass; } } else if( ( ( blockAbove == Block.Water ) || ( blockAbove == Block.StillWater ) ) && ( elevation <= mapHeight / 2 - 1 ) ) { bool placeGravel = growNoise2.GetNoise( x, y ) > 12.0; if( placeGravel ) { blocks[index] = (byte)Block.Gravel; } } } } }
public double GetNoise(double x, double y) { return(noise1.GetNoise(x + noise2.GetNoise(x, y), y)); }