Exemple #1
0
        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;
            }
        }