/// <summary> /// This is a heavily simplified version of the vanilla GenStep_Terrain /// Most of the original isn't needed, and there are several changes to the parts that are left /// </summary> /// <param name="map"></param> /// <param name="parms"></param> public override void Generate(Map map, GenStepParams parms) { //check if it's our biome. If not, skip if (map.Biome.defName != "RockMoonBiome") { return; } mapRadiusSize = map.Size.x / 2; List <IntVec3> list = new List <IntVec3>(); MapGenFloatGrid elevation = MapGenerator.Elevation; MapGenFloatGrid fertility = MapGenerator.Fertility; MapGenFloatGrid caves = MapGenerator.Caves; TerrainGrid terrainGrid = map.terrainGrid; foreach (IntVec3 current in map.AllCells) { Building edifice = current.GetEdifice(map); TerrainDef terrainDef; terrainDef = this.TerrainFrom(current, fertility[current]); terrainGrid.SetTerrain(current, terrainDef); } RoofCollapseCellsFinder.RemoveBulkCollapsingRoofs(list, map); BeachMaker.Cleanup(); foreach (TerrainPatchMaker current2 in map.Biome.terrainPatchMakers) { current2.Cleanup(); } }
/// <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); }
static void Postfix(IntVec3 c, Map map, RiverMaker river, ref TerrainDef __result) { if (!MapDesignerMod.mod.settings.flagRiverBeach) { return; } if (Find.World.CoastDirectionAt(map.Tile) == Rot4.Invalid) { return; } if (river == null) { return; } if (river.TerrainAt(c, true) != null && BeachMaker.BeachTerrainAt(c, map.Biome)?.IsWater != true) { __result = river.TerrainAt(c, true); } }
public override void Generate(Map map, GenStepParams parms) { BeachMaker.Init(map); //RiverMaker riverMaker = this.GenerateRiver(map); List <IntVec3> list = new List <IntVec3>(); MapGenFloatGrid elevation = MapGenerator.Elevation; MapGenFloatGrid fertility = MapGenerator.Fertility; MapGenFloatGrid caves = MapGenerator.Caves; TerrainGrid terrainGrid = map.terrainGrid; foreach (IntVec3 c in map.AllCells) { terrainGrid.SetTerrain(c, ZLevelsDefOf.ZL_OutsideTerrain); } RoofCollapseCellsFinder.RemoveBulkCollapsingRoofs(list, map); BeachMaker.Cleanup(); foreach (TerrainPatchMaker terrainPatchMaker in map.Biome.terrainPatchMakers) { terrainPatchMaker.Cleanup(); } }
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); }