private bool TryRecoverFromUnwalkablePosition(int originalDest, CaravanArrivalAction originalArrivalAction)
        {
            int num;

            if (GenWorldClosest.TryFindClosestTile(this.caravan.Tile, (int t) => this.IsPassable(t), out num, 2147483647, true))
            {
                Log.Warning(string.Concat(new object[]
                {
                    this.caravan,
                    " on unwalkable tile ",
                    this.caravan.Tile,
                    ". Teleporting to ",
                    num
                }));
                this.caravan.Tile = num;
                this.moving       = false;
                this.nextTile     = this.caravan.Tile;
                this.StartPath(originalDest, originalArrivalAction, false);
                return(true);
            }
            Find.WorldObjects.Remove(this.caravan);
            Log.Error(string.Concat(new object[]
            {
                this.caravan,
                " on unwalkable tile ",
                this.caravan.Tile,
                ". Could not find walkable position nearby. Removed."
            }));
            return(false);
        }
        private bool TryRecoverFromUnwalkablePosition()
        {
            int  num;
            bool result;

            if (GenWorldClosest.TryFindClosestTile(this.caravan.Tile, (int t) => this.IsPassable(t), out num, 2147483647, true))
            {
                Log.Warning(string.Concat(new object[]
                {
                    this.caravan,
                    " on unwalkable tile ",
                    this.caravan.Tile,
                    ". Teleporting to ",
                    num
                }), false);
                this.caravan.Tile = num;
                this.caravan.Notify_Teleported();
                result = true;
            }
            else
            {
                Find.WorldObjects.Remove(this.caravan);
                Log.Error(string.Concat(new object[]
                {
                    this.caravan,
                    " on unwalkable tile ",
                    this.caravan.Tile,
                    ". Could not find walkable position nearby. Removed."
                }), false);
                result = false;
            }
            return(result);
        }
Beispiel #3
0
 private bool TryRecoverFromUnwalkablePosition()
 {
     if (GenWorldClosest.TryFindClosestTile(caravan.Tile, (int t) => IsPassable(t), out var foundTile))
     {
         Log.Warning(string.Concat(caravan, " on unwalkable tile ", caravan.Tile, ". Teleporting to ", foundTile));
         caravan.Tile = foundTile;
         caravan.Notify_Teleported();
         return(true);
     }
     Log.Error(string.Concat(caravan, " on unwalkable tile ", caravan.Tile, ". Could not find walkable position nearby. Removed."));
     caravan.Destroy();
     return(false);
 }
        public static int BestGotoDestNear(int tile, Caravan c)
        {
            Predicate <int> predicate = (int t) => !Find.World.Impassable(t) && c.CanReach(t);

            if (predicate(tile))
            {
                return(tile);
            }
            int result;

            GenWorldClosest.TryFindClosestTile(tile, predicate, out result, 50, true);
            return(result);
        }
Beispiel #5
0
 private bool TryRecoverFromUnwalkablePosition()
 {
     if (GenWorldClosest.TryFindClosestTile(caravan.Tile, (int t) => IsPassable(t), out int foundTile))
     {
         Log.Warning(caravan + " on unwalkable tile " + caravan.Tile + ". Teleporting to " + foundTile);
         caravan.Tile = foundTile;
         caravan.Notify_Teleported();
         return(true);
     }
     Find.WorldObjects.Remove(caravan);
     Log.Error(caravan + " on unwalkable tile " + caravan.Tile + ". Could not find walkable position nearby. Removed.");
     return(false);
 }
        private bool TryRecoverFromUnwalkablePosition(int originalDest, CaravanArrivalAction originalArrivalAction)
        {
            int num = default(int);

            if (GenWorldClosest.TryFindClosestTile(this.caravan.Tile, (Predicate <int>)((int t) => this.IsPassable(t)), out num, 2147483647, true))
            {
                Log.Warning(this.caravan + " on unwalkable tile " + this.caravan.Tile + ". Teleporting to " + num);
                this.caravan.Tile = num;
                this.moving       = false;
                this.nextTile     = this.caravan.Tile;
                this.StartPath(originalDest, originalArrivalAction, false);
                return(true);
            }
            Find.WorldObjects.Remove(this.caravan);
            Log.Error(this.caravan + " on unwalkable tile " + this.caravan.Tile + ". Could not find walkable position nearby. Removed.");
            return(false);
        }
        public static int BestGotoDestNear(int tile, Caravan c)
        {
            Predicate <int> predicate = delegate(int t)
            {
                if (Find.World.Impassable(t))
                {
                    return(false);
                }
                return(c.CanReach(t) ? true : false);
            };

            if (predicate(tile))
            {
                return(tile);
            }
            GenWorldClosest.TryFindClosestTile(tile, predicate, out var foundTile, 50);
            return(foundTile);
        }
        public static int BestGotoDestNear(int tile, Caravan c)
        {
            Predicate <int> predicate = delegate(int t)
            {
                if (Find.World.Impassable(t))
                {
                    return(false);
                }
                if (!c.CanReach(t))
                {
                    return(false);
                }
                return(true);
            };

            if (predicate(tile))
            {
                return(tile);
            }
            int result = default(int);

            GenWorldClosest.TryFindClosestTile(tile, predicate, out result, 50, true);
            return(result);
        }
 public static bool TryFindClosestPassableTile(int rootTile, out int foundTile)
 {
     return(GenWorldClosest.TryFindClosestTile(rootTile, (int x) => !Find.World.Impassable(x), out foundTile, 2147483647, true));
 }