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