Ejemplo n.º 1
0
        public static IEnumerable <(StatDef moveStat, StatDef costStat)> TerrainMovementStatDefs(this TerrainDef terrain)
        {
            HashSet <StatDef> disallowedPathCostsStats = terrain.TerrainMovementDisallowedPathCostStat();

            // Check for if default movement is allowed or not
            if (!disallowedPathCostsStats.Contains(null))
            {
                yield return(StatDefOf.MoveSpeed, null);
            }
            if (terrain.modExtensions != null)
            {
                foreach (DefModExtension ext in terrain.modExtensions)
                {
                    TerrainMovementStatDef moveStatDef = terrain.LoadTerrainMovementStatDefExtension(ext);
                    if (moveStatDef != null)
                    {
                        StatDef newCostStat;
                        // There's no actual StatDef for pathCost, so map it to null
                        if (moveStatDef.pawnSpeedStat == null || moveStatDef.pawnSpeedStat == "pathCost")
                        {
                            newCostStat = null;
                        }
                        else
                        {
                            newCostStat = StatDef.Named(moveStatDef.terrainPathCostStat);
                        }
                        // Opt out if the terrain disallows this costStat
                        if (!disallowedPathCostsStats.Contains(newCostStat))
                        {
                            StatDef newMoveStat;
                            if (moveStatDef.pawnSpeedStat == null)
                            {
                                newMoveStat = StatDefOf.MoveSpeed;
                            }
                            else
                            {
                                newMoveStat = StatDef.Named(moveStatDef.pawnSpeedStat);
                            }
                            yield return(newMoveStat, newCostStat);
                        }
                    }
                }
            }
        }
Ejemplo n.º 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);
             }
         }
     }
 }