internal static bool Prefix(ref bool __result, ThingDef plantDef, IntVec3 c, Map map) { TerrainDef terrain = map.terrainGrid.TerrainAt(c); List <Thing> list = map.thingGrid.ThingsListAt(c); foreach (Thing thing in list) { if (thing != null && thing.def.building != null) { if (plantDef.plant.sowTags.Contains(thing.def.building.sowTag)) { __result = plantDef.plant.sowTags.Contains(thing.def.building.sowTag); return(plantDef.plant.sowTags.Contains(thing.def.building.sowTag)); } } } if (!plantDef.HasModExtension <Biomes_PlantControl>()) //this section governs plants that should not use the BMT plant spawning system. { if (terrain.HasTag("Water")) { __result = false; return(false); } if (map.Biome.HasModExtension <BiomesMap>()) { BiomesMap biome = map.Biome.GetModExtension <BiomesMap>(); if (biome.isCavern) { __result = false; return(false); } } return(true); } if (plantDef.HasModExtension <Biomes_PlantControl>()) //this section governs plants that should. { if (map.Biome.HasModExtension <BiomesMap>()) { BiomesMap biome = map.Biome.GetModExtension <BiomesMap>(); if (biome.isCavern) { if (!map.Biome.AllWildPlants.Contains(plantDef)) { __result = false; return(false); } } } Biomes_PlantControl ext = plantDef.GetModExtension <Biomes_PlantControl>(); if (map.roofGrid.RoofAt(c) != null) //checks for cave cells. { if (!map.roofGrid.RoofAt(c).isNatural&& !ext.allowInBuilding) { __result = false; return(false); } if (map.roofGrid.RoofAt(c).isNatural&& !ext.allowInCave) { __result = false; return(false); } } else if (!ext.allowOutside) //and non cave cells { __result = false; return(false); } //And now some checks for terrain tags if (terrain.HasTag("Water") && !ext.allowInWater) { __result = false; return(false); } if (terrain.HasTag("Deep") && !ext.allowInDeep) { __result = false; return(false); } if (terrain.HasTag("ChestDeep") && !ext.allowInChestDeep) { __result = false; return(false); } if (terrain.HasTag("Shallow") && !ext.allowInShallow) { __result = false; return(false); } if (terrain.HasTag("Fresh") && !ext.allowInFresh) { __result = false; return(false); } if (terrain.HasTag("Salty") && !ext.allowInSalty) { __result = false; return(false); } if (terrain.HasTag("Sandy") && !ext.allowInSandy) { __result = false; return(false); } if (terrain.HasTag("Boggy") && !ext.allowInBoggy) { __result = false; return(false); } if (!ext.allowOnDry && !terrain.HasTag("Boggy") && !terrain.HasTag("Water")) { __result = false; return(false); } if (!ext.allowOnLand && terrain.HasTag("Soil")) { __result = false; return(false); } __result = true; return(true); } else { return(true); } }
internal static void Postfix(ref float __result, IntVec3 c, Map ___map) { var biome = ___map.Biome; var terrain = c.GetTerrain(___map); if (!commonalitySum.ContainsKey("WaterCommonality") || !commonalitySum.ContainsKey("SandCommonality") || !commonalitySum.ContainsKey("LandCommonality")) { float landCommonality = 0; float waterCommonality = 0; float sandCommonality = 0; float wetlandCommonality = 0; float caveCommonality = 0; foreach (ThingDef plant in biome.AllWildPlants) { if (plant.HasModExtension <Biomes_PlantControl>()) { Biomes_PlantControl ext = plant.GetModExtension <Biomes_PlantControl>(); if (ext.allowInWater) { waterCommonality += biome.CommonalityOfPlant(plant); } if (!ext.allowInSandy) { sandCommonality += biome.CommonalityOfPlant(plant); } if (ext.allowInBoggy) { wetlandCommonality += biome.CommonalityOfPlant(plant); } if (ext.allowInCave) { caveCommonality += biome.CommonalityOfPlant(plant); } if (ext.allowOnLand) { landCommonality += biome.CommonalityOfPlant(plant); } continue; } else { landCommonality += biome.CommonalityOfPlant(plant); continue; } } // divides each commonality sum by the land commonality sum. The land commonality sum must eb divided last, no matter what. sandCommonality /= landCommonality; if (!commonalitySum.ContainsKey("SandCommonality")) { commonalitySum.Add("SandCommonality", sandCommonality); } waterCommonality /= landCommonality; if (!commonalitySum.ContainsKey("WaterCommonality")) { commonalitySum.Add("WaterCommonality", waterCommonality); } wetlandCommonality /= landCommonality; if (!commonalitySum.ContainsKey("CaveCommonality")) { commonalitySum.Add("WetlandCommonality", wetlandCommonality); } caveCommonality /= landCommonality; if (!commonalitySum.ContainsKey("CaveCommonality")) { commonalitySum.Add("CaveCommonality", caveCommonality); } landCommonality /= landCommonality; if (!commonalitySum.ContainsKey("LandCommonality")) { commonalitySum.Add("LandCommonality", landCommonality); } float fertility = terrain.fertility; RoofDef roof = ___map.roofGrid.RoofAt(c); if (terrain.HasTag("Water")) { __result = fertility * commonalitySum["WaterCommonality"]; } if (terrain.HasTag("Sandy")) { __result = fertility * commonalitySum["SandCommonality"]; } if (terrain.HasTag("Boggy")) { __result = fertility * commonalitySum["WetlandCommonality"]; } if (roof != null) { if (roof.isNatural) { __result = fertility * commonalitySum["CaveCommonality"]; } } if (terrain.HasTag("Soil")) { __result = fertility * commonalitySum["LandCommonality"]; } return; } else { float fertility = terrain.fertility; RoofDef roof = ___map.roofGrid.RoofAt(c); if (terrain.HasTag("Water")) { __result = fertility * commonalitySum["WaterCommonality"]; } if (terrain.HasTag("Sandy")) { __result = fertility * commonalitySum["SandCommonality"]; } if (terrain.HasTag("Boggy")) { __result = fertility * commonalitySum["WetlandCommonality"]; } if (roof != null) { if (roof.isNatural) { __result = fertility * commonalitySum["CaveCommonality"]; } } if (terrain.HasTag("Soil")) { __result = fertility * commonalitySum["LandCommonality"]; } return; } }