/// <summary> /// Identifies the terrain def that would have been used at the given map location. /// Swiped from GenStep_Terrain. Extracted for performance reasons. /// </summary> private static TerrainDef TerrainFrom(IntVec3 c, Map map, float elevation, float fertility, RiverMakerTerrainAt riverTerrainAt, BeachMakerBeachTerrainAt beachTerrainAt, bool preferSolid) { TerrainDef terrainDef = null; if (riverTerrainAt != null) { terrainDef = riverTerrainAt(c, true); } TerrainDef result; if (terrainDef == null && preferSolid) { result = GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain; } else { var terrain = beachTerrainAt(c, map.Biome); if (terrain == TerrainDefOf.WaterOceanDeep) { result = terrain; } else if (terrainDef != null && terrainDef.IsRiver) { result = terrainDef; } else if (terrain != null) { result = terrain; } else if (terrainDef != null) { result = terrainDef; } else { for (int i = 0; i < map.Biome.terrainPatchMakers.Count; i++) { terrain = map.Biome.terrainPatchMakers[i].TerrainAt(c, map, fertility); if (terrain != null) { return(terrain); } } if (elevation > 0.55f && elevation < 0.61f) { result = TerrainDefOf.Gravel; } else if (elevation >= 0.61f) { result = GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain; } else { terrain = TerrainThreshold.TerrainAtValue(map.Biome.terrainsByFertility, fertility); result = terrain ?? TerrainDefOf.Sand; } } } return(result); }
/// <summary> /// Finds the actual terrain types. /// Copied from Vanilla, probably needs heavy cleanup /// </summary> private TerrainDef TerrainFrom(IntVec3 c, Map map, float elevation, float fertility, bool preferSolid) { TerrainDef terrainDef = null; if (terrainDef == null && preferSolid) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } TerrainDef terrainDef2 = BeachMaker.BeachTerrainAt(c, map.Biome); if (terrainDef2 == TerrainDefOf.WaterOceanDeep) { return(terrainDef2); } if (terrainDef != null && terrainDef.IsRiver) { return(terrainDef); } if (terrainDef2 != null) { return(terrainDef2); } if (terrainDef != null) { return(terrainDef); } for (int i = 0; i < map.Biome.terrainPatchMakers.Count; i++) { terrainDef2 = map.Biome.terrainPatchMakers[i].TerrainAt(c, map, fertility); if (terrainDef2 != null) { return(terrainDef2); } } if (elevation > 0.55f && elevation < 0.61f) { return(TerrainDefOf.Gravel); } if (elevation >= 0.61f) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } terrainDef2 = TerrainThreshold.TerrainAtValue(map.Biome.terrainsByFertility, fertility); if (terrainDef2 != null) { return(terrainDef2); } return(TerrainDefOf.Sand); }
private TerrainDef TerrainFrom(IntVec3 c, Map map, float elevation, float fertility, bool preferSolid) { TerrainDef terrainDef = null; if (terrainDef == null && preferSolid) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } TerrainDef terrainDef2 = BeachMaker.BeachTerrainAt(c, map.Biome); if (terrainDef2 == TerrainDefOf.WaterOceanDeep) { return(terrainDef2); } if (terrainDef != null && terrainDef.IsRiver) { return(terrainDef); } if (terrainDef2 != null) { return(terrainDef2); } if (terrainDef != null) { return(terrainDef); } for (int i = 0; i < map.Biome.terrainPatchMakers.Count; i++) { terrainDef2 = map.Biome.terrainPatchMakers[i].TerrainAt(c, map, fertility); if (terrainDef2 != null) { return(terrainDef2); } } if (elevation > 0.55f && elevation < 0.61f) { return(TerrainDefOf.Gravel); } if (elevation >= 0.61f) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } terrainDef2 = TerrainThreshold.TerrainAtValue(map.Biome.terrainsByFertility, fertility); if (terrainDef2 != null) { return(terrainDef2); } if (!GenStep_TerrainUpper.debug_WarnedMissingTerrain) { Log.Error(string.Concat(new object[] { "No terrain found in biome ", map.Biome.defName, " for elevation=", elevation, ", fertility=", fertility })); GenStep_TerrainUpper.debug_WarnedMissingTerrain = true; } return(TerrainDefOf.Sand); }
private TerrainDef TerrainFrom(IntVec3 c, Map map, float elevation, float fertility, RiverMaker river, bool preferSolid) { TerrainDef terrainDef = null; if (c.Walkable(map) && SurroundedWithWalls(c, map) && Rand.Chance(0.2f)) { return(TerrainDefOf.Gravel); } if (river != null) { terrainDef = river.TerrainAt(c, recordForValidation: true); } if (terrainDef == null && preferSolid) { return(GenStep_RocksFromGridUnderground.RockDefAt(c).building.naturalTerrain); } TerrainDef terrainDef2 = BeachMaker.BeachTerrainAt(c, map.Biome); if (terrainDef2 == TerrainDefOf.WaterOceanDeep) { return(terrainDef2); } if (terrainDef != null && terrainDef.IsRiver) { return(terrainDef); } if (terrainDef2 != null) { return(terrainDef2); } if (terrainDef != null) { return(terrainDef); } for (int i = 0; i < map.Biome.terrainPatchMakers.Count; i++) { terrainDef2 = map.Biome.terrainPatchMakers[i].TerrainAt(c, map, fertility); if (terrainDef2 != null) { return(terrainDef2); } } if (elevation > 0.55f && elevation < 0.61f) { return(TerrainDefOf.Gravel); } if (elevation >= 0.61f) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } terrainDef2 = TerrainThreshold.TerrainAtValue(map.Biome.terrainsByFertility, fertility); if (terrainDef2 != null) { ZLogger.Message("8 Terrain: " + terrainDef2 + " - Loc: " + c); return(terrainDef2); } if (!debug_WarnedMissingTerrain) { debug_WarnedMissingTerrain = true; } return(TerrainDefOf.Sand); }
private static bool Prefix(IntVec3 c, Map map, float elevation, float fertility, ref TerrainDef __result) { if (map.Biome.defName.Contains("Archipelago")) { float adjustment = 0.0f; if (Controller.Settings.waterLevel < 1) { adjustment = -0.1f; } else if (Controller.Settings.waterLevel < 2) { adjustment = -0.05f; } else if (Controller.Settings.waterLevel < 3) { } else if (Controller.Settings.waterLevel < 4) { adjustment = 0.05f; } else { adjustment = 0.1f; } bool lakeIsles = false; if (map.Biome.defName.Contains("_Fresh")) { lakeIsles = true; } if (elevation < 0.75f) { Building edifice = c.GetEdifice(map); if (edifice != null) { edifice.Destroy(DestroyMode.Vanish); } map.roofGrid.SetRoof(c, null); for (int i = -1; i < 2; i++) { for (int j = -1; j < 2; j++) { int x = c.x + i; int z = c.z + j; if (x >= 0 && z >= 0 && x < map.Size.x && z < map.Size.z) { IntVec3 newSpot = new IntVec3(x, 0, z); if (map.roofGrid.RoofAt(newSpot) != null) { if (map.roofGrid.RoofAt(newSpot).isThickRoof) { map.roofGrid.SetRoof(newSpot, RoofDefOf.RoofRockThin); } else { if ((i == 0 && j != 0) || (i != 0 && j == 0)) { if (Rand.Value < 0.33) { map.roofGrid.SetRoof(newSpot, null); } } } } } } } } if (elevation > 0.65f && elevation <= 0.69f) { __result = TerrainDefOf.Gravel; return(false); } if (elevation > 0.69f & elevation < 0.71f) { __result = TerrainDefOf.Gravel; return(false); } if (elevation >= 0.71f) { __result = GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain; return(false); } TerrainDef deepWater = TerrainDefOf.WaterOceanDeep; TerrainDef shallowWater = TerrainDefOf.WaterOceanShallow; if (lakeIsles.Equals(true)) { deepWater = TerrainDefOf.WaterDeep; shallowWater = TerrainDefOf.WaterShallow; } if (elevation < 0.35f + adjustment) { __result = deepWater; return(false); } if (elevation < 0.45f + adjustment) { __result = shallowWater; return(false); } TerrainDef borderTerrainL = TerrainDefOf.Sand; TerrainDef borderTerrainH = TerrainDefOf.Sand; if (lakeIsles.Equals(true)) { if (map.Biome.defName.Contains("Boreal") || map.Biome.defName.Contains("Tundra")) { borderTerrainL = TerrainDef.Named("Mud"); borderTerrainH = TerrainDef.Named("MossyTerrain"); } else if (map.Biome.defName.Contains("ColdBog") || map.Biome.defName.Contains("Swamp")) { borderTerrainL = TerrainDef.Named("Marsh"); borderTerrainH = TerrainDef.Named("MarshyTerrain"); } else if (map.Biome.defName.Contains("Temperate") || map.Biome.defName.Contains("Tropical")) { borderTerrainL = TerrainDef.Named("Mud"); borderTerrainH = TerrainDef.Named("SoilRich"); } } if (elevation < 0.47f + adjustment) { __result = borderTerrainL; return(false); } if (elevation < 0.50f + adjustment) { __result = borderTerrainH; return(false); } TerrainDef terrainDef = TerrainThreshold.TerrainAtValue(map.Biome.terrainsByFertility, fertility); if (terrainDef != null) { __result = terrainDef; return(false); } __result = borderTerrainH; return(false); } return(true); }
public TerrainDef TerrainFrom(IntVec3 c, Map map, float elevation, float fertility, bool preferSolid) { TerrainDef terrainDef = null; TerrainDef terrainDef2 = null; if (terrainDef == null && preferSolid) { return(GenStep_RocksFromGrid.RockDefAt(c).building.naturalTerrain); } //TerrainDef terrainDef2 = BeachMaker.BeachTerrainAt(c, map.Biome); if (terrainDef2 == TerrainDefOf.WaterOceanDeep) { return(terrainDef2); } if (terrainDef == TerrainDefOf.WaterMovingShallow || terrainDef == TerrainDefOf.WaterOceanDeep) { return(terrainDef); } if (terrainDef2 != null) { return(terrainDef2); } if (terrainDef != null) { return(terrainDef); } for (int i = 0; i < biome1.terrainPatchMakers.Count; i++) { terrainDef2 = biome1.terrainPatchMakers[i].TerrainAt(c, map, fertility); if (terrainDef2 != null) { return(terrainDef2); } } /* if (elevation > 0.55f && elevation < 0.61f) * { * return TerrainDefOf.Gravel; * }*/ if (elevation >= 0.61f) { return(theBaseRocks); // return GenStep_RocksFromGrid.RockDefAt(c).naturalTerrain; } terrainDef2 = TerrainThreshold.TerrainAtValue(biome1.terrainsByFertility, fertility); if (terrainDef2 != null) { return(terrainDef2); } if (!GenStep_TerrainFarcasterDeltaServitus.debug_WarnedMissingTerrain) { Log.Error(string.Concat(new object[] { "No terrain found in biome ", biome1.defName, " for elevation=", elevation, ", fertility=", fertility })); GenStep_TerrainFarcasterDeltaServitus.debug_WarnedMissingTerrain = true; } return(TerrainDefOf.Sand); }