コード例 #1
0
        public static int GetBuildingCost(Building b, TraverseParms traverseParms, Pawn pawn)
        {
            Building_Door building_Door = b as Building_Door;

            if (building_Door != null)
            {
                switch (traverseParms.mode)
                {
                case TraverseMode.NoPassClosedDoors:
                case TraverseMode.NoPassClosedDoorsOrWater:
                    if (!building_Door.FreePassage)
                    {
                        return(2147483647);
                    }
                    goto IL_0113;

                case TraverseMode.ByPawn:
                    break;

                default:
                    goto IL_0113;
                }
                if (!traverseParms.canBash && building_Door.IsForbiddenToPass(pawn))
                {
                    if (DebugViewSettings.drawPaths)
                    {
                        PathFinder.DebugFlash(b.Position, b.Map, 0.77f, "forbid");
                    }
                    return(2147483647);
                }
                if (!building_Door.FreePassage)
                {
                    if (building_Door.PawnCanOpen(pawn))
                    {
                        return(building_Door.TicksToOpenNow);
                    }
                    if (traverseParms.canBash)
                    {
                        return(300);
                    }
                    if (DebugViewSettings.drawPaths)
                    {
                        PathFinder.DebugFlash(b.Position, b.Map, 0.34f, "cant pass");
                    }
                    return(2147483647);
                }
            }
            else if (pawn != null)
            {
                return(b.PathFindCostFor(pawn));
            }
            goto IL_0113;
IL_0113:
            return(0);
        }
コード例 #2
0
 private void DebugFlash(IntVec3 c, float colorPct, string str)
 {
     PathFinder.DebugFlash(c, this.map, colorPct, str);
 }
コード例 #3
0
ファイル: PathFinder.cs プロジェクト: wensincai/RW-Decompile
        public static int GetBuildingCost(Building b, TraverseParms traverseParms, Pawn pawn)
        {
            Building_Door building_Door = b as Building_Door;

            if (building_Door != null)
            {
                switch (traverseParms.mode)
                {
                case TraverseMode.ByPawn:
                    if (!traverseParms.canBash && building_Door.IsForbiddenToPass(pawn))
                    {
                        if (DebugViewSettings.drawPaths)
                        {
                            PathFinder.DebugFlash(b.Position, b.Map, 0.77f, "forbid");
                        }
                        return(2147483647);
                    }
                    if (building_Door.PawnCanOpen(pawn) && !building_Door.FreePassage)
                    {
                        return(building_Door.TicksToOpenNow);
                    }
                    if (building_Door.CanPhysicallyPass(pawn))
                    {
                        return(0);
                    }
                    if (traverseParms.canBash)
                    {
                        return(300);
                    }
                    if (DebugViewSettings.drawPaths)
                    {
                        PathFinder.DebugFlash(b.Position, b.Map, 0.34f, "cant pass");
                    }
                    return(2147483647);

                case TraverseMode.PassDoors:
                    if (pawn != null && building_Door.PawnCanOpen(pawn) && !building_Door.IsForbiddenToPass(pawn) && !building_Door.FreePassage)
                    {
                        return(building_Door.TicksToOpenNow);
                    }
                    if ((pawn != null && building_Door.CanPhysicallyPass(pawn)) || building_Door.FreePassage)
                    {
                        return(0);
                    }
                    return(150);

                case TraverseMode.NoPassClosedDoors:
                case TraverseMode.NoPassClosedDoorsOrWater:
                    if (building_Door.FreePassage)
                    {
                        return(0);
                    }
                    return(2147483647);

                case TraverseMode.PassAllDestroyableThings:
                case TraverseMode.PassAllDestroyableThingsNotWater:
                    if (pawn != null && building_Door.PawnCanOpen(pawn) && !building_Door.IsForbiddenToPass(pawn) && !building_Door.FreePassage)
                    {
                        return(building_Door.TicksToOpenNow);
                    }
                    if ((pawn != null && building_Door.CanPhysicallyPass(pawn)) || building_Door.FreePassage)
                    {
                        return(0);
                    }
                    return(50 + (int)((float)building_Door.HitPoints * 0.2f));
                }
            }
            else if (pawn != null)
            {
                return((int)b.PathFindCostFor(pawn));
            }
            return(0);
        }