Ejemplo n.º 1
0
        public static (StatDef moveStat, StatDef costStat) BestTerrainMovementStatDefs(this Pawn pawn, TerrainDef terrain)
        {
            (StatDef moveStat, StatDef costStat)bestStats = (null, null);
            float curSpeed = -1;

            foreach (var terrainStats in terrain.TerrainMovementStatDefs())
            {
                // Lazily calculate curSpeed for performance reasons
                if (bestStats.moveStat == null)
                {
                    bestStats = terrainStats;
                }
                else
                {
                    if (curSpeed < 0)
                    {
                        curSpeed = pawn.GetStatValue(bestStats.moveStat) / terrain.MovementCost(bestStats.costStat);
                    }
                    float newSpeed = pawn.GetStatValue(terrainStats.moveStat ?? StatDefOf.MoveSpeed) / terrain.MovementCost(terrainStats.costStat);
                    // Find highest movement statistic for this pawn
                    if (newSpeed >= curSpeed)
                    {
                        curSpeed  = newSpeed;
                        bestStats = terrainStats;
                    }
                }
            }

            return(bestStats);
        }
Ejemplo n.º 2
0
 public static int TerrainMoveCost(this Pawn pawn, TerrainDef terrain)
 {
     return(terrain.MovementCost(pawn.BestTerrainMovementStatDefs(terrain).costStat));
 }