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);
 }
コード例 #2
0
ファイル: GenStep_Terrain.cs プロジェクト: rocksttar/Z-Levels
        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, true);
                return(terrainDef2);
            }
            if (!debug_WarnedMissingTerrain)
            {
                debug_WarnedMissingTerrain = true;
            }
            return(TerrainDefOf.Sand);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }