public static float CapacityLeft(LordJob_FormAndSendCaravan lordJob) { float num = CollectionsMassCalculator.MassUsageTransferables(lordJob.transferables, IgnorePawnsInventoryMode.IgnoreIfAssignedToUnload, false, false); CaravanFormingUtility.tmpCaravanPawns.Clear(); for (int i = 0; i < lordJob.lord.ownedPawns.Count; i++) { Pawn pawn = lordJob.lord.ownedPawns[i]; CaravanFormingUtility.tmpCaravanPawns.Add(new ThingCount(pawn, pawn.stackCount)); } num += CollectionsMassCalculator.MassUsage(CaravanFormingUtility.tmpCaravanPawns, IgnorePawnsInventoryMode.IgnoreIfAssignedToUnload, false, false); float num2 = CollectionsMassCalculator.Capacity(CaravanFormingUtility.tmpCaravanPawns, null); CaravanFormingUtility.tmpCaravanPawns.Clear(); return(num2 - num); }
public void SetupPods() { // exit if status is not planned if (this.Status != ShipmentStatus.Planned) { Log.Error("Can't setup pods for not planned shipment: " + this.Status.ToString()); return; } List <TransferableOneWay> transferables = this.Transferables.ToList(); // find transporters List <CompLogisticTransporter> logTransporters = this.sender .TransportersForMassAndDistance(CollectionsMassCalculator.MassUsageTransferables(transferables, IgnorePawnsInventoryMode.Ignore), this.destination.map.Tile); Log.Message("Transporters found: " + logTransporters.Count); if (logTransporters.NullOrEmpty()) { Log.Message("No transporters found"); return; } // choose which ones to use logTransporters = logTransporters.GetRange(0, 1); // initialize them foreach (var transporter in logTransporters) { transporter.shipmentInProgress = this; } List <CompTransporter> transporters = logTransporters.Select(t => t.Transporter).ToList(); TransporterUtility.InitiateLoading(transporters); LogTransporterUtility.DistributeItems(transferables, transporters); this.Status = ShipmentStatus.InLoading; }