private List <Link> GenerateProspectiveLinks(List <int> indexToTile) { Dictionary <int, int> tileToIndexLookup = new Dictionary <int, int>(); for (int i = 0; i < indexToTile.Count; i++) { tileToIndexLookup[indexToTile[i]] = i; } List <Link> linkProspective = new List <Link>(); List <int> list = new List <int>(); for (int srcIndex = 0; srcIndex < indexToTile.Count; srcIndex++) { int srcTile = indexToTile[srcIndex]; list.Clear(); list.Add(srcTile); int found = 0; Find.WorldPathFinder.FloodPathsWithCost(list, (int src, int dst) => Caravan_PathFollower.CostToMove(3300, src, dst, null, perceivedStatic : true), null, delegate(int tile, float distance) { if (tile != srcTile && tileToIndexLookup.ContainsKey(tile)) { found++; linkProspective.Add(new Link { distance = distance, indexA = srcIndex, indexB = tileToIndexLookup[tile] }); } return(found >= 8); }); } linkProspective.Sort((Link lhs, Link rhs) => lhs.distance.CompareTo(rhs.distance)); return(linkProspective); }
private static float GetCostToMove(float initialNextTileCostLeft, bool firstInPath, int initialTicksAbs, int curResult, int caravanTicksPerMove, int curTile, int nextTile) { if (firstInPath) { return(initialNextTileCostLeft); } int value = initialTicksAbs + curResult; return((float)Caravan_PathFollower.CostToMove(caravanTicksPerMove, curTile, nextTile, value)); }
public static float ApproxTilesPerDay(int caravanTicksPerMove, int tile, int nextTile, StringBuilder explanation = null, string caravanTicksPerMoveExplanation = null) { if (nextTile == -1) { nextTile = Find.WorldGrid.FindMostReasonableAdjacentTileForDisplayedPathCost(tile); } int num = Mathf.CeilToInt((float)Caravan_PathFollower.CostToMove(caravanTicksPerMove, tile, nextTile, null, perceivedStatic: false, explanation, caravanTicksPerMoveExplanation) / 1f); if (num == 0) { return(0f); } return(60000f / (float)num); }
private static float GetCostToMove(float initialNextTileCostLeft, bool firstInPath, int initialTicksAbs, int curResult, int caravanTicksPerMove, int curTile, int nextTile) { float result; if (firstInPath) { result = initialNextTileCostLeft; } else { int value = initialTicksAbs + curResult; result = (float)Caravan_PathFollower.CostToMove(caravanTicksPerMove, curTile, nextTile, new int?(value), false, null, null); } return(result); }
public static int CostToDisplay(Caravan caravan, int start, int end, float yearPercent = -1f) { if (start != end && end != -1) { return(Caravan_PathFollower.CostToMove(caravan.TicksPerMove, start, end, yearPercent)); } int num = caravan.TicksPerMove; num += WorldPathGrid.CalculatedCostAt(start, false, yearPercent); Tile tile = Find.WorldGrid[start]; float num2 = 1f; if (tile.roads != null) { for (int i = 0; i < tile.roads.Count; i++) { num2 = Mathf.Min(num2, tile.roads[i].road.movementCostMultiplier); } } return(Mathf.RoundToInt((float)num * num2)); }
public static float ApproxTilesPerDay(int caravanTicksPerMove, int tile, int nextTile, StringBuilder explanation = null, string caravanTicksPerMoveExplanation = null) { if (nextTile == -1) { nextTile = Find.WorldGrid.FindMostReasonableAdjacentTileForDisplayedPathCost(tile); } int end = nextTile; float num = (float)Caravan_PathFollower.CostToMove(caravanTicksPerMove, tile, end, null, false, explanation, caravanTicksPerMoveExplanation); int num2 = Mathf.CeilToInt(num / 1f); float result; if (num2 == 0) { result = 0f; } else { result = 60000f / (float)num2; } return(result); }
public static int CostToMove(Caravan caravan, int start, int end, int?ticksAbs = null) { return(Caravan_PathFollower.CostToMove(caravan.TicksPerMove, start, end, ticksAbs, false, null, null)); }
private int CostToMove(int start, int end) { return(Caravan_PathFollower.CostToMove(this.caravan, start, end, null)); }
public static int EstimatedTicksToArrive(int from, int to, WorldPath path, float nextTileCostLeft, int caravanTicksPerMove, int curTicksAbs) { int num = 0; int num2 = from; int num3 = 0; int num4 = Mathf.CeilToInt(20000f) - 1; int num5 = 60000 - num4; int num6 = 0; int num7 = 0; int num8; if (CaravanRestUtility.WouldBeRestingAt(from, (long)curTicksAbs)) { num += CaravanRestUtility.LeftRestTicksAt(from, (long)curTicksAbs); num8 = num5; } else { num8 = CaravanRestUtility.LeftNonRestTicksAt(from, (long)curTicksAbs); } while (true) { num7++; if (num7 >= 10000) { break; } if (num6 <= 0) { if (num2 == to) { return(num); } bool flag = num3 == 0; int start = num2; num2 = path.Peek(num3); num3++; float num9; if (flag) { num9 = nextTileCostLeft; } else { int num10 = curTicksAbs + num; float yearPercent = (float)GenDate.DayOfYear((long)num10, 0f) / 60f; num9 = (float)Caravan_PathFollower.CostToMove(caravanTicksPerMove, start, num2, yearPercent); } num6 = Mathf.CeilToInt(num9 / 1f); } if (num8 < num6) { num += num8; num6 -= num8; num += num4; num8 = num5; } else { num += num6; num8 -= num6; num6 = 0; } } Log.ErrorOnce("Could not calculate estimated ticks to arrive. Too many iterations.", 1837451324); return(num); }
public static int CostToMove(Caravan caravan, int start, int end, float yearPercent = -1f) { return(Caravan_PathFollower.CostToMove(caravan.TicksPerMove, start, end, yearPercent)); }
private static int <GenerateProspectiveLinks> m__2(int src, int dst) { return(Caravan_PathFollower.CostToMove(3500, src, dst, null, true, null, null)); }