private void SetBioms() { float borderMin = 0.54f, borderMax = 0.55f; for (int x = 0; x < world.WorldAttributes.WorldSizeInBlocks; ++x) { for (int z = 0; z < world.WorldAttributes.WorldSizeInBlocks; ++z) { Vector2Int ColumnPos = new Vector2Int(x, z); float noise = PerlinNoise.Get2DPerlin(world, ColumnPos, 0.0f, world.WorldAttributes.WorldScale); if (noise < 0.5) { world.Bioms[x, z] = 0; } else { float borderNoise = PerlinNoise.Get2DPerlin(world, ColumnPos, 1f, world.WorldAttributes.WorldScale); if (borderMin < borderNoise && borderMax > borderNoise) { world.Bioms[x, z] = -1; } else { world.Bioms[x, z] = -2; } } } } PutBioms(); }
private void AddWater() { float borderMin = 0.54f, borderMax = 0.55f; for (int x = 0; x < world.WorldAttributes.WorldSizeInBlocks; ++x) { for (int z = 0; z < world.WorldAttributes.WorldSizeInBlocks; ++z) { if (world.Bioms[x, z] == 0) { AddWaterColumn(new Vector2Int(x, z), world.WorldAttributes.OceanHeight); } else { Vector2Int pos = new Vector2Int(x, z); float riverNoise = PerlinNoise.Get2DPerlin(world, pos, 1f, world.WorldAttributes.WorldScale); if (borderMin < riverNoise && borderMax > riverNoise) { SetRiverPoint(Vector2Int.FloorToInt(pos)); } else if (world.Bioms[x, z] == -1) { world.Bioms[x, z] = 0; SetRiverPoint(Vector2Int.FloorToInt(pos)); } } } } }
private void AddWater(List <VoronoiDiagram.GraphEdge> Edges) { foreach (var edge in Edges) { int biomeA, biomeB; GetBorderingBioms(edge, out biomeA, out biomeB); if (biomeA != biomeB && biomeA != 0 && biomeB != 0) { Vector2 begin = new Vector2((float)edge.x1, (float)edge.y1); Vector2 end = new Vector2((float)edge.x2, (float)edge.y2); do { SetRiverPoint(Vector2Int.FloorToInt(begin)); begin = Vector2.MoveTowards(begin, end, 1f); } while (begin != end); } } for (int x = 0; x < world.WorldAttributes.WorldSizeInBlocks; ++x) { for (int z = 0; z < world.WorldAttributes.WorldSizeInBlocks; ++z) { if (world.Bioms[x, z] == 0) { AddWaterColumn(new Vector2Int(x, z), world.WorldAttributes.OceanHeight); } else { Vector2Int pos = new Vector2Int(x, z); float riverNoise = PerlinNoise.Get2DPerlin(world, pos, 1f, world.WorldAttributes.WorldScale); if (0.54f < riverNoise && 0.55f > riverNoise) { SetRiverPoint(Vector2Int.FloorToInt(pos)); } } } } }
private void AddTrees() { for (int x = 0; x < world.WorldAttributes.WorldSizeInBlocks; ++x) { for (int z = 0; z < world.WorldAttributes.WorldSizeInBlocks; ++z) { Vector2Int pos = new Vector2Int(x, z); if (PerlinNoise.Get2DPerlin(world, pos, 0, world.WorldAttributes.BiomeAttributes[world.Bioms[x, z]].TreeZoneScale) > world.WorldAttributes.BiomeAttributes[world.Bioms[x, z]].TreeZoneThrashold) { if (waterMap[x, z] == 0) { if (PerlinNoise.Get2DPerlin(world, pos, 0, world.WorldAttributes.BiomeAttributes[world.Bioms[x, z]].TreePlacementScale) > world.WorldAttributes.BiomeAttributes[world.Bioms[x, z]].TreePlacementThrashold) { AddTree(pos); } } } } } }
private int GetTerrainHeight(Vector2Int pos) { BiomeAttributes biome = world.WorldAttributes.BiomeAttributes[world.Bioms[pos.x, pos.y]]; int terrainHeight = biome.SolidGroundHeight; for (int i = 0; i < biome.OctavesNumber; ++i) { terrainHeight += Mathf.FloorToInt((1 / Mathf.Pow(2, i)) * biome.BiomeHeight * PerlinNoise.Get2DPerlin(world, pos, i, biome.BiomeScale * Mathf.Pow(2, i))); } return(terrainHeight); }