Example #1
0
        public static IEnumerable <(StatDef moveStat, StatDef costStat)> AnyTerrainMovementStatDefs(this TerrainDef terrain, bool defaultMovementAllowed = true, LocomotionUrgency urgency = LocomotionUrgency.None)
        {
            HashSet <StatDef> disallowedPathCostsStats = terrain.TerrainMovementDisallowedPathCostStat();

            // Check for if default movement is allowed or not
            if (defaultMovementAllowed && !disallowedPathCostsStats.Contains(StatDefOf.MoveSpeed))
            {
                yield return(StatDefOf.MoveSpeed, StatDefOf.MoveSpeed);
            }

            // Memoize statdef terrain modifications
            if (AllTerrainMovementStats == null)
            {
                AllTerrainMovementStats = new List <TerrainMovementStatDef>();
                foreach (StatDef stat in DefDatabase <StatDef> .AllDefs)
                {
                    TerrainMovementStatDef statExt = stat.GetModExtension <TerrainMovementStatDef>();
                    if (statExt != null)
                    {
                        AllTerrainMovementStats.Add(statExt);
                    }
                }
            }

            foreach (TerrainMovementStatDef moveStatDef in AllTerrainMovementStats)
            {
                yield return(terrain.TerrainMovementStatDefPair(moveStatDef, defaultMovementAllowed, urgency));
            }
        }
Example #2
0
 public static IEnumerable <(StatDef moveStat, StatDef costStat)> TerrainMovementStatDefs(this TerrainDef terrain, bool defaultMovementAllowed = true, LocomotionUrgency urgency = LocomotionUrgency.None)
 {
     foreach (var pair in terrain.AnyTerrainMovementStatDefs(defaultMovementAllowed, urgency))
     {
         yield return(pair);
     }
     if (terrain.modExtensions != null)
     {
         foreach (DefModExtension ext in terrain.modExtensions)
         {
             TerrainMovementStatDef moveStatDef = terrain.LoadTerrainMovementStatDefExtension(ext);
             var pair = terrain.TerrainMovementStatDefPair(moveStatDef, defaultMovementAllowed, urgency);
             if (!(pair.moveStat == null && pair.costStat == null))
             {
                 yield return(pair);
             }
         }
     }
 }