コード例 #1
0
        static void Postfix(Map map, GenStepParams parms)
        {
            if (!map.Biome.HasModExtension <BiomesMap>())
            {
                return;
            }
            BiomesMap mapParms = map.Biome.GetModExtension <BiomesMap>();

            // generate map shapes
            if (mapParms.isIsland)
            {
                new GenStep_Island().Generate(map, parms);
            }
            else if (mapParms.isOasis)
            {
                new GenStep_Oasis().Generate(map, parms);
            }
            // generate elevation grid if necessary
            if (mapParms.addIslandHills)
            {
                new GenStep_IslandElevation().Generate(map, parms);
            }

            // generate elevation shapes
            if (mapParms.isValley)
            {
                new GenStep_Valley().Generate(map, parms);
            }
            else if (mapParms.isCavern)
            {
                new GenStep_Cavern().Generate(map, parms);
            }
        }
コード例 #2
0
        static void Postfix(Map map, GenStepParams parms)
        {
            if (!map.Biome.HasModExtension <BiomesMap>())
            {
                return;
            }
            BiomesMap biomesMap = map.Biome.GetModExtension <BiomesMap>();

            if (!biomesMap.isValley)
            {
                return;
            }
            MapGenFloatGrid elevation = MapGenerator.Elevation;
            BiomesMap       valleyMap = map.Biome.GetModExtension <BiomesMap>();
            IntVec3         center    = map.Center;
            float           size      = (map.Size.x * map.Size.y) / 2f;
            Random          random    = new Random();
            int             valleyDirectionDecider = random.Next(1, 2);
            float           distance  = 0;
            float           distance2 = 0;
            float           distance3 = 0;

            int valleyType = Rand.Range(0, 2);

            foreach (IntVec3 current in map.AllCells)
            {
                //distance = (float)Math.Sqrt(Math.Pow(current.x - center.x, 2) + Math.Pow(current.z - center.z, 2))
                distance = (float)Math.Sqrt(Math.Pow(current.x - center.x, 2) + Math.Pow(current.z - center.z, 2));

                switch (valleyType)
                {
                case 0:
                    distance2 = (float)Math.Sqrt(Math.Pow(current.z - center.z, 2));
                    break;

                case 1:
                    distance2 = (float)Math.Sqrt(Math.Pow(current.x - center.x, 2));
                    break;

                case 2:
                    distance2 = (float)Math.Sqrt(Math.Pow(current.x - center.x, 2));
                    break;
                }
                distance3 = distance + (distance2 * 1.3f);
                //distance3 = Rand.Range(distance, distance2);
                elevation[current] *= (Math.Min(Rand.Range(valleyMap.minHillEdgeMultiplier, valleyMap.maxHillEdgeMultiplier), Rand.Range(valleyMap.minHillEncroachment, valleyMap.maxHillEncroachment) * 2) * distance3 / size);
            }
        }
コード例 #3
0
ファイル: PlantSpawning.cs プロジェクト: MSeal/BiomesCore
        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);
            }
        }