public static TerrainData CreateBallMap(IntSize3 size, int innerSide = 0) { var map = new TerrainData(size); int side = MyMath.Min(size.Width, size.Height, size.Depth); int r = side / 2 - 1; int ir = innerSide / 2 - 1; Parallel.For(0, size.Depth, z => { for (int y = 0; y < size.Height; ++y) { for (int x = 0; x < size.Width; ++x) { var pr = Math.Sqrt((x - r) * (x - r) + (y - r) * (y - r) + (z - r) * (z - r)); var p = new IntVector3(x, y, z); if (pr < r && pr >= ir) { map.SetTileDataNoHeight(p, TileData.GetNaturalWall(MaterialID.Granite)); } else { map.SetTileDataNoHeight(p, TileData.EmptyTileData); } } } }); map.RescanLevelMap(); return(map); }
public static TerrainData CreateCubeMap(IntSize3 size, int margin) { var map = new TerrainData(size); Parallel.For(0, size.Depth, z => { for (int y = 0; y < size.Height; ++y) { for (int x = 0; x < size.Width; ++x) { var p = new IntVector3(x, y, z); if (x < margin || y < margin || z < margin || x >= size.Width - margin || y >= size.Height - margin || z >= size.Depth - margin) { map.SetTileDataNoHeight(p, TileData.EmptyTileData); } else { map.SetTileDataNoHeight(p, TileData.GetNaturalWall(MaterialID.Granite)); } } } }); map.RescanLevelMap(); return(map); }
public static TerrainData CreateNoiseTerrain(IntSize3 size, Random random) { var terrain = new TerrainData(size); var noise = CreateTerrainNoise(); var noisemap = CreateTerrainNoiseMap(noise, new IntSize2(size.Width, size.Height)); FillFromNoiseMap(terrain, noisemap); terrain.RescanLevelMap(); double xk = (random.NextDouble() * 2 - 1) * 0.01; double yk = (random.NextDouble() * 2 - 1) * 0.01; TerrainHelpers.CreateBaseMinerals(terrain, random, xk, yk); TerrainHelpers.CreateOreVeins(terrain, random, xk, yk); TerrainHelpers.CreateOreClusters(terrain, random); RiverGen.Generate(terrain, random); int soilLimit = size.Depth * 4 / 5; TerrainHelpers.CreateSoil(terrain, soilLimit); int grassLimit = terrain.Depth * 4 / 5; TerrainHelpers.CreateVegetation(terrain, random, grassLimit); return(terrain); }
public static TerrainData CreateBallMap(IntSize3 size, int innerSide = 0) { var map = new TerrainData(size); int side = MyMath.Min(size.Width, size.Height, size.Depth); int r = side / 2 - 1; int ir = innerSide / 2 - 1; Parallel.For(0, size.Depth, z => { for (int y = 0; y < size.Height; ++y) for (int x = 0; x < size.Width; ++x) { var pr = Math.Sqrt((x - r) * (x - r) + (y - r) * (y - r) + (z - r) * (z - r)); var p = new IntVector3(x, y, z); if (pr < r && pr >= ir) map.SetTileDataNoHeight(p, TileData.GetNaturalWall(MaterialID.Granite)); else map.SetTileDataNoHeight(p, TileData.EmptyTileData); } }); map.RescanLevelMap(); return map; }
public static TerrainData CreateNoiseTerrain(IntSize3 size, Random random) { var terrain = new TerrainData(size); var noise = CreateTerrainNoise(); var noisemap = CreateTerrainNoiseMap(noise, new IntSize2(size.Width, size.Height)); FillFromNoiseMap(terrain, noisemap); terrain.RescanLevelMap(); double xk = (random.NextDouble() * 2 - 1) * 0.01; double yk = (random.NextDouble() * 2 - 1) * 0.01; TerrainHelpers.CreateBaseMinerals(terrain, random, xk, yk); TerrainHelpers.CreateOreVeins(terrain, random, xk, yk); TerrainHelpers.CreateOreClusters(terrain, random); RiverGen.Generate(terrain, random); int soilLimit = size.Depth * 4 / 5; TerrainHelpers.CreateSoil(terrain, soilLimit); int grassLimit = terrain.Depth * 4 / 5; TerrainHelpers.CreateVegetation(terrain, random, grassLimit); return terrain; }
public static TerrainData CreateCubeMap(IntSize3 size, int margin) { var map = new TerrainData(size); Parallel.For(0, size.Depth, z => { for (int y = 0; y < size.Height; ++y) for (int x = 0; x < size.Width; ++x) { var p = new IntVector3(x, y, z); if (x < margin || y < margin || z < margin || x >= size.Width - margin || y >= size.Height - margin || z >= size.Depth - margin) map.SetTileDataNoHeight(p, TileData.EmptyTileData); else map.SetTileDataNoHeight(p, TileData.GetNaturalWall(MaterialID.Granite)); } }); map.RescanLevelMap(); return map; }