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)); } }
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); } } } }