public Color GetMapColor() { Color biomeCol = Biome.GetColor(); if (ChunkFeature != null) { if (ChunkFeature is ChunkRiverNode) { ChunkRiverNode rn = ChunkFeature as ChunkRiverNode; if (rn.HasBridge) { return(Color.grey); } return(new Color(0, 0, 0.4f)); } else if (ChunkFeature is ChunkRoad) { ChunkRoad r = ChunkFeature as ChunkRoad; if (r.Type == ChunkRoad.RoadType.Dirt) { return(new Color(165f / 255f, 42f / 255f, 42f / 255f)); } //Debug.Log("road at " + Pos); return(Color.grey); } else if (ChunkFeature is ChunkLake) { return(Color.blue); } } return(biomeCol); }
public override void Init(LocationCreator lc) { if (MainBiomeUp == null) { MainBiomeUp = MainBiome; } Generate(lc); for (int i = 0; i < SmoothCount; i++) { Smooth(lc); } if (minp == null || maxp == null) { int minv = int.MaxValue; int maxv = int.MinValue; for (int x = 0; x < lc.sizeX; x++) { for (int y = 0; y < lc.sizeZ; y++) { minv = Math.Min(minv, lc.Land[x, y]); maxv = Math.Max(maxv, lc.Land[x, y]); } } for (int x = 0; x < lc.sizeX; x++) { for (int y = 0; y < lc.sizeZ; y++) { lc.Land[x, y] = (lc.Land[x, y] - minv) * (maxH - minH) / (maxv - minv) + minH; } } } else { for (int x = 0; x < lc.sizeX; x++) { for (int y = 0; y < lc.sizeZ; y++) { try { var minv = GetMin(lc, x, y); var maxv = GetMax(lc, x, y); lc.Land[x, y] = (int)((lc.Land[x, y] + sizeBlock) / (2f * sizeBlock) * (maxv - minv) + minv); } catch (Exception) { lc.Land[x, y] = -10; } } } } if (delH > 1) { for (int x = 0; x < lc.sizeX; x++) { for (int y = 0; y < lc.sizeZ; y++) { lc.Land[x, y] = lc.Land[x / delH * delH, y / delH * delH] / delH * delH; } } } for (int x = 0; x < lc.sizeX; x++) { for (int z = 0; z < lc.sizeZ; z++) { var y = lc.Land[x, z]; lc.Colors[x, z] = MainBiome.GetColor(y); lc.UpColors[x, z] = MainBiomeUp.GetColor(y); } } }
public void Execute(int index) { int localX = index % width; int localZ = index / width % height; // X and Z offsets are just the chunk's world position int worldX = localX + xOffset; int worldZ = localZ + zOffset; int solidGroundHeight = 42; // Range 0-1 for all of these float precipitation = GetPrecipitation(worldX, worldZ); float temperature = GetTemperature(worldX, worldZ); float master = GetMaster(worldX, worldZ); Biome biome = DetermineBiome(precipitation, temperature, master, seaLevel); float terrainHeight = biome.GetHeight(worldX, worldZ) + solidGroundHeight; float heightSum = 0; if (!(biome is OceanBiome)) { // Perform blending for (int offsetX = -blending; offsetX <= blending; offsetX++) { for (int offsetY = -blending; offsetY <= blending; offsetY++) { float offsetPrecipitation = GetPrecipitation(worldX + offsetX, worldZ + offsetY); float offsetTemperature = GetTemperature(worldX + offsetX, worldZ + offsetY); float offsetMaster = GetMaster(worldX + offsetX, worldZ + offsetY); Biome offsetBiome = DetermineBiome(offsetPrecipitation, offsetTemperature, offsetMaster, seaLevel); float offsetTerrainHeight = offsetBiome.GetHeight(worldX + offsetX, worldZ + offsetY) + solidGroundHeight; heightSum += offsetTerrainHeight; } } int sampleCount = (blending * 2 + 1) * (blending * 2 + 1); terrainHeight = heightSum / sampleCount; } vertices[index] = new Vector3(localX, terrainHeight, localZ); Color color; switch (terrainDisplayMode) { case TerrainDisplayMode.Normal: color = biome.GetColor(); break; case TerrainDisplayMode.Precipitation: color = GetMapColor(precipitation); break; case TerrainDisplayMode.Temperature: color = GetMapColor(temperature); break; case TerrainDisplayMode.MasterNoise: color = Color.white * master; break; default: color = Color.magenta; break; } ; colors[index] = color; }