internal static void GenerateFlatgrass(Map map, bool hollow) { for (int i = 0; i < map.widthX; i++) { for (int j = 0; j < map.widthY; j++) { if (!hollow) { for (int k = 1; k < map.height / 2 - 1; k++) { if (k < map.height / 2 - 5) { map.SetBlock(i, j, k, Block.Stone); } else { map.SetBlock(i, j, k, Block.Dirt); } } } map.SetBlock(i, j, map.height / 2 - 1, Block.Grass); } } map.MakeFloodBarrier(); }
public void Generate() { double[,] heightmap = GenerateHeightmap(map.widthX, map.widthY); Feedback("Filling..."); for (int x = 0; x < map.widthX; x++) { for (int y = 0; y < map.widthY; y++) { double level = heightmap[x, y]; if (level > water) { level = (level - water) * smoothingOver + water; map.SetBlock(x, y, (int)(level * map.height), Block.Grass); if (!hollow) { for (int i = (int)(level * map.height) - 1; i > 0; i--) { if ((int)(level * map.height) - i < 5) { map.SetBlock(x, y, i, Block.Dirt); } else { map.SetBlock(x, y, i, Block.Stone); } } } } else { level = (level - water) * smoothingUnder + water; map.SetBlock(x, y, (int)(water * map.height), Block.Water); if (!hollow) { for (int i = (int)(water * map.height) - 1; i >= (int)(level * map.height); i--) { map.SetBlock(x, y, i, Block.Water); } } map.SetBlock(x, y, (int)(level * map.height), Block.Sand); if (!hollow) { for (int i = (int)(level * map.height) - 1; i > 0; i--) { map.SetBlock(x, y, i, Block.Stone); } } } } } map.MakeFloodBarrier(); map.Save(filename); Feedback("Done."); }
internal static void DoGenerate( Map map, Player player, string mode, string filename, Random rand, bool hollow ) { switch( mode ) { case "flatgrass": player.Message( "Generating flatgrass map..." ); GenerateFlatgrass( map, hollow ); if( map.Save( filename ) ) { player.Message( "Map generation: Done." ); } else { player.Message( Color.Red, "An error occured while generating the map." ); } break; case "lag": player.Message( "Generating laggy map..." ); for( int x = 0; x < map.widthX; x+=2 ) { for( int y = 0; y < map.widthY; y+=2 ) { for( int h = 0; h < map.widthY; h+=2 ) { map.SetBlock( x, y, h, Block.Lava ); } } } if( map.Save( filename ) ) { player.Message( "Map generation: Done." ); } else { player.Message( Color.Red, "An error occured while generating the map." ); } break; case "empty": player.Message( "Generating empty map..." ); map.MakeFloodBarrier(); if( map.Save( filename ) ) { player.Message( "Map generation: Done." ); } else { player.Message( Color.Red, "An error occured while generating the map." ); } break; case "hills": player.Message( "Generating terrain..." ); Tasks.Add( MapGenerator.GenerationTask, new MapGenerator( rand, map, player, filename, 1, 1, 0.5, 0.5, 0, 0.5, hollow ), false ); break; case "mountains": player.Message( "Generating terrain..." ); Tasks.Add( MapGenerator.GenerationTask, new MapGenerator( rand, map, player, filename, 4, 1, 0.5, 0.5, 0.1, 0.5, hollow ), false ); break; case "lake": player.Message( "Generating terrain..." ); Tasks.Add( MapGenerator.GenerationTask, new MapGenerator( rand, map, player, filename, 1, 0.6, 0.9, 0.5, -0.35, 0.55, hollow ), false ); break; case "island": player.Message( "Generating terrain..." ); Tasks.Add( MapGenerator.GenerationTask, new MapGenerator( rand, map, player, filename, 1, 0.6, 1, 0.5, 0.3, 0.35, hollow ), false ); break; default: player.Message( "Unknown map generation mode: " + mode ); break; } }
internal static void GenerateFlatgrass( Map map, bool hollow ) { for ( int i = 0; i < map.widthX; i++ ) { for ( int j = 0; j < map.widthY; j++ ) { if ( !hollow ) { for ( int k = 1; k < map.height / 2 - 1; k++ ) { if ( k < map.height / 2 - 5 ) { map.SetBlock( i, j, k, Block.Stone ); } else { map.SetBlock( i, j, k, Block.Dirt ); } } } map.SetBlock( i, j, map.height / 2 - 1, Block.Grass ); } } map.MakeFloodBarrier(); }
void DoGenerate(Map map, Player player, string mode, string filename, Random rand, bool hollow) { switch (mode) { case "flatgrass": player.Message("Generating flatgrass map..."); GenerateFlatgrass(map, hollow); if (map.Save(filename)) { player.Message("Map generation: Done."); } else { player.Message(Color.Red, "An error occured while generating the map."); } break; case "lag": player.Message("Generating laggy map..."); for (int x = 0; x < map.widthX; x += 2) { for (int y = 0; y < map.widthY; y += 2) { for (int h = 0; h < map.widthY; h += 2) { map.SetBlock(x, y, h, Block.Lava); } } } if (map.Save(filename)) { player.Message("Map generation: Done."); } else { player.Message(Color.Red, "An error occured while generating the map."); } break; case "empty": player.Message("Generating empty map..."); map.MakeFloodBarrier(); if (map.Save(filename)) { player.Message("Map generation: Done."); } else { player.Message(Color.Red, "An error occured while generating the map."); } break; case "hills": player.Message("Generating terrain..."); world.tasks.Add(MapGenerator.GenerationTask, new MapGenerator(rand, map, player, filename, 1, 1, 0.5, 0.45, 0, 0.5, hollow), false); break; case "mountains": player.Message("Generating terrain..."); world.tasks.Add(MapGenerator.GenerationTask, new MapGenerator(rand, map, player, filename, 4, 1, 0.5, 0.45, 0.1, 0.5, hollow), false); break; case "lake": player.Message("Generating terrain..."); world.tasks.Add(MapGenerator.GenerationTask, new MapGenerator(rand, map, player, filename, 1, 0.6, 0.9, 0.45, -0.35, 0.55, hollow), false); break; case "island": player.Message("Generating terrain..."); world.tasks.Add(MapGenerator.GenerationTask, new MapGenerator(rand, map, player, filename, 1, 0.6, 1, 0.45, 0.3, 0.35, hollow), false); break; default: player.Message("Unknown map generation mode: " + mode); break; } }