public static float ApproxTilesPerDay(List <ThingCount> thingCounts, float massUsage, float massCapacity, int tile, int nextTile, StringBuilder explanation = null) { TilesPerDayCalculator.tmpPawns.Clear(); for (int i = 0; i < thingCounts.Count; i++) { if (thingCounts[i].Count > 0) { Pawn pawn = thingCounts[i].Thing as Pawn; if (pawn != null) { TilesPerDayCalculator.tmpPawns.Add(pawn); } } } if (!TilesPerDayCalculator.tmpPawns.Any <Pawn>()) { return(0f); } StringBuilder stringBuilder = (explanation == null) ? null : new StringBuilder(); int ticksPerMove = CaravanTicksPerMoveUtility.GetTicksPerMove(TilesPerDayCalculator.tmpPawns, massUsage, massCapacity, stringBuilder); float result = TilesPerDayCalculator.ApproxTilesPerDay(ticksPerMove, tile, nextTile, explanation, (stringBuilder == null) ? null : stringBuilder.ToString()); TilesPerDayCalculator.tmpPawns.Clear(); return(result); }
public static float ApproxTilesPerDayLeftAfterTransfer(List <TransferableOneWay> transferables, float massUsageLeftAfterTransfer, float massCapacityLeftAfterTransfer, int tile, int nextTile, StringBuilder explanation = null) { TilesPerDayCalculator.tmpPawns.Clear(); for (int i = 0; i < transferables.Count; i++) { TransferableOneWay transferableOneWay = transferables[i]; if (transferableOneWay.HasAnyThing && transferableOneWay.AnyThing is Pawn) { for (int j = transferableOneWay.things.Count - 1; j >= transferableOneWay.CountToTransfer; j--) { TilesPerDayCalculator.tmpPawns.Add((Pawn)transferableOneWay.things[j]); } } } if (!TilesPerDayCalculator.tmpPawns.Any <Pawn>()) { return(0f); } StringBuilder stringBuilder = (explanation == null) ? null : new StringBuilder(); int ticksPerMove = CaravanTicksPerMoveUtility.GetTicksPerMove(TilesPerDayCalculator.tmpPawns, massUsageLeftAfterTransfer, massCapacityLeftAfterTransfer, stringBuilder); float result = TilesPerDayCalculator.ApproxTilesPerDay(ticksPerMove, tile, nextTile, explanation, (stringBuilder == null) ? null : stringBuilder.ToString()); TilesPerDayCalculator.tmpPawns.Clear(); return(result); }
public static float ApproxTilesPerDay(List <TransferableOneWay> transferables, float massUsage, float massCapacity, int tile, int nextTile, StringBuilder explanation = null) { tmpPawns.Clear(); for (int i = 0; i < transferables.Count; i++) { TransferableOneWay transferableOneWay = transferables[i]; if (transferableOneWay.HasAnyThing && transferableOneWay.AnyThing is Pawn) { for (int j = 0; j < transferableOneWay.CountToTransfer; j++) { tmpPawns.Add((Pawn)transferableOneWay.things[j]); } } } if (!tmpPawns.Any()) { return(0f); } StringBuilder stringBuilder = (explanation == null) ? null : new StringBuilder(); int ticksPerMove = CaravanTicksPerMoveUtility.GetTicksPerMove(tmpPawns, massUsage, massCapacity, stringBuilder); float result = ApproxTilesPerDay(ticksPerMove, tile, nextTile, explanation, stringBuilder?.ToString()); tmpPawns.Clear(); return(result); }
public static int GetTicksPerMove(Caravan caravan) { if (caravan == null) { return(2500); } return(CaravanTicksPerMoveUtility.GetTicksPerMove(caravan.PawnsListForReading)); }
public static int GetTicksPerMove(Caravan caravan, StringBuilder explanation = null) { if (caravan == null) { if (explanation != null) { CaravanTicksPerMoveUtility.AppendUsingDefaultTicksPerMoveInfo(explanation); } return(3300); } return(CaravanTicksPerMoveUtility.GetTicksPerMove(new CaravanTicksPerMoveUtility.CaravanInfo(caravan), explanation)); }
public static int GetTicksPerMove(Caravan caravan, StringBuilder explanation = null) { int result; if (caravan == null) { if (explanation != null) { CaravanTicksPerMoveUtility.AppendUsingDefaultTicksPerMoveInfo(explanation); } result = 3500; } else { result = CaravanTicksPerMoveUtility.GetTicksPerMove(new CaravanTicksPerMoveUtility.CaravanInfo(caravan), explanation); } return(result); }
public static float ApproxTilesPerDay(List <ThingCount> thingCounts, float massUsage, float massCapacity, int tile, int nextTile, StringBuilder explanation = null) { tmpPawns.Clear(); for (int i = 0; i < thingCounts.Count; i++) { if (thingCounts[i].Count > 0) { Pawn pawn = thingCounts[i].Thing as Pawn; if (pawn != null) { tmpPawns.Add(pawn); } } } if (!tmpPawns.Any()) { return(0f); } StringBuilder stringBuilder = ((explanation != null) ? new StringBuilder() : null); float result = ApproxTilesPerDay(CaravanTicksPerMoveUtility.GetTicksPerMove(tmpPawns, massUsage, massCapacity, stringBuilder), tile, nextTile, explanation, stringBuilder?.ToString()); tmpPawns.Clear(); return(result); }
public static float ApproxTilesPerDayLeftAfterTransfer(List <TransferableOneWay> transferables, float massUsageLeftAfterTransfer, float massCapacityLeftAfterTransfer, int tile, int nextTile, StringBuilder explanation = null) { tmpPawns.Clear(); for (int i = 0; i < transferables.Count; i++) { TransferableOneWay transferableOneWay = transferables[i]; if (transferableOneWay.HasAnyThing && transferableOneWay.AnyThing is Pawn) { for (int num = transferableOneWay.things.Count - 1; num >= transferableOneWay.CountToTransfer; num--) { tmpPawns.Add((Pawn)transferableOneWay.things[num]); } } } if (!tmpPawns.Any()) { return(0f); } StringBuilder stringBuilder = ((explanation != null) ? new StringBuilder() : null); float result = ApproxTilesPerDay(CaravanTicksPerMoveUtility.GetTicksPerMove(tmpPawns, massUsageLeftAfterTransfer, massCapacityLeftAfterTransfer, stringBuilder), tile, nextTile, explanation, stringBuilder?.ToString()); tmpPawns.Clear(); return(result); }
public static int GetTicksPerMove(List <Pawn> pawns, float massUsage, float massCapacity, StringBuilder explanation = null) { if (pawns.Any <Pawn>()) { if (explanation != null) { explanation.Append("CaravanMovementSpeedFull".Translate() + ":"); } float num = 0f; for (int i = 0; i < pawns.Count; i++) { float num2 = (float)((!pawns[i].Downed && !pawns[i].CarriedByCaravan()) ? pawns[i].TicksPerMoveCardinal : 450); num2 = Mathf.Min(num2, 150f) * 340f; float num3 = 60000f / num2; if (explanation != null) { explanation.AppendLine(); explanation.Append(string.Concat(new string[] { " - ", pawns[i].LabelShortCap, ": ", num3.ToString("0.#"), " ", "TilesPerDay".Translate() })); if (pawns[i].Downed) { explanation.Append(" (" + "DownedLower".Translate() + ")"); } else if (pawns[i].CarriedByCaravan()) { explanation.Append(" (" + "Carried".Translate() + ")"); } } num += num2 / (float)pawns.Count; } float moveSpeedFactorFromMass = CaravanTicksPerMoveUtility.GetMoveSpeedFactorFromMass(massUsage, massCapacity); if (explanation != null) { float num4 = 60000f / num; explanation.AppendLine(); explanation.Append(string.Concat(new string[] { " ", "Average".Translate(), ": ", num4.ToString("0.#"), " ", "TilesPerDay".Translate() })); explanation.AppendLine(); explanation.Append(" " + "MultiplierForCarriedMass".Translate(new object[] { moveSpeedFactorFromMass.ToStringPercent() })); } int num5 = Mathf.Max(Mathf.RoundToInt(num / moveSpeedFactorFromMass), 1); if (explanation != null) { float num6 = 60000f / (float)num5; explanation.AppendLine(); explanation.Append(string.Concat(new string[] { " ", "FinalCaravanPawnsMovementSpeed".Translate(), ": ", num6.ToString("0.#"), " ", "TilesPerDay".Translate() })); } return(num5); } if (explanation != null) { CaravanTicksPerMoveUtility.AppendUsingDefaultTicksPerMoveInfo(explanation); } return(3300); }
public static int GetTicksPerMove(CaravanTicksPerMoveUtility.CaravanInfo caravanInfo, StringBuilder explanation = null) { return(CaravanTicksPerMoveUtility.GetTicksPerMove(caravanInfo.pawns, caravanInfo.massUsage, caravanInfo.massCapacity, explanation)); }
public static int EstimatedTicksToArrive(int from, int to, Caravan caravan) { int result; using (WorldPath worldPath = Find.WorldPathFinder.FindPath(from, to, caravan, null)) { if (worldPath == WorldPath.NotFound) { result = 0; } else { result = CaravanArrivalTimeEstimator.EstimatedTicksToArrive(from, to, worldPath, 0f, CaravanTicksPerMoveUtility.GetTicksPerMove(caravan), Find.TickManager.TicksAbs); } } return(result); }