public static void AddThings(Dialog_FormCaravan dialog, Map map) { //Add manifest if (Mod.settings.caravanSaveManifest && SaveManifest.caravan && map == SaveManifest.savedMap && SaveManifest.savedMap != null) { foreach (ThingCountUNLIMITED thingCount in SaveManifest.savedManifest) { Log.Message($"Loading {thingCount.thing}:{thingCount.count}"); TransferableOneWay transferableOneWay = TransferableUtility.TransferableMatching <TransferableOneWay>(thingCount.thing, dialog.transferables, TransferAsOneMode.PodsOrCaravanPacking); transferableOneWay?.AdjustTo(transferableOneWay.ClampAmount(transferableOneWay.CountToTransfer + thingCount.count)); } } //Add selection else if (Mod.settings.caravanLoadSelection) { foreach (object obj in Find.Selector.SelectedObjectsListForReading.Where(o => o is Thing)) { if (obj is Thing thing) { Log.Message($"Adding Selected {thing}:{thing.stackCount}"); TransferableOneWay transferableOneWay = TransferableUtility.TransferableMatching <TransferableOneWay>(thing, dialog.transferables, TransferAsOneMode.PodsOrCaravanPacking); transferableOneWay?.AdjustTo(transferableOneWay.ClampAmount(transferableOneWay.CountToTransfer + thing.stackCount)); } } } }
private void RemoveCarriedItemFromTransferablesOrDrop(Thing carried, Pawn carrier, List <TransferableOneWay> transferables) { TransferableOneWay transferableOneWay = TransferableUtility.TransferableMatchingDesperate(carried, transferables, TransferAsOneMode.PodsOrCaravanPacking); int num; if (transferableOneWay == null) { num = carried.stackCount; } else if (transferableOneWay.CountToTransfer >= carried.stackCount) { transferableOneWay.AdjustBy(-carried.stackCount); transferableOneWay.things.Remove(carried); num = 0; } else { num = carried.stackCount - transferableOneWay.CountToTransfer; transferableOneWay.AdjustTo(0); } if (num > 0) { Thing thing = carried.SplitOff(num); if (carrier.SpawnedOrAnyParentSpawned) { GenPlace.TryPlaceThing(thing, carrier.PositionHeld, carrier.MapHeld, ThingPlaceMode.Near, null, null); } else { thing.Destroy(DestroyMode.Vanish); } } }
public void AddToTheToLoadList(TransferableOneWay t, int count) { if (!t.HasAnyThing || t.CountToTransfer <= 0) { return; } if (leftToLoad == null) { leftToLoad = new List <TransferableOneWay>(); } if (TransferableUtility.TransferableMatching(t.AnyThing, leftToLoad, TransferAsOneMode.PodsOrCaravanPacking) != null) { Log.Error("Transferable already exists."); return; } var transferableOneWay = new TransferableOneWay(); leftToLoad.Add(transferableOneWay); transferableOneWay.things.AddRange(t.things); transferableOneWay.AdjustTo(count); }
public static float ApproxDaysWorthOfFood_Ship(ShipBase ship, List <TransferableOneWay> transferables, bool canEatPlants) { tmpTransferables.Clear(); for (int i = 0; i < transferables.Count; i++) { TransferableOneWay oneWay = new TransferableOneWay(); oneWay.things.AddRange(transferables[i].things); oneWay.AdjustTo(transferables[i].CountToTransfer); Pawn pawn = oneWay.AnyThing as Pawn; tmpTransferables.Add(oneWay); } foreach (Pawn current in ship.GetDirectlyHeldThings().Where(x => x is Pawn)) { DropShipUtility.AddThingsToTransferables(tmpTransferables, current); } for (int i = 0; i < ship.GetDirectlyHeldThings().Count; i++) { if (!(ship.GetDirectlyHeldThings()[i] is Pawn)) { DropShipUtility.AddThingsToTransferables(tmpTransferables, ship.GetDirectlyHeldThings()[i]); } } return(DaysWorthOfFoodCalculator.ApproxDaysWorthOfFood(tmpTransferables, canEatPlants, IgnorePawnsInventoryMode.DontIgnore)); }
public static float ApproxDaysWorthOfFood_Ship(ShipBase ship, List <TransferableOneWay> transferables, bool canEatPlants) { tmpTransferables.Clear(); for (int i = 0; i < transferables.Count; i++) { TransferableOneWay oneWay = new TransferableOneWay(); oneWay.things.AddRange(transferables[i].things); oneWay.AdjustTo(transferables[i].CountToTransfer); Pawn pawn = oneWay.AnyThing as Pawn; tmpTransferables.Add(oneWay); } foreach (Pawn current in ship.GetDirectlyHeldThings().Where(x => x is Pawn)) { DropShipUtility.AddThingsToTransferables(tmpTransferables, current); } for (int i = 0; i < ship.GetDirectlyHeldThings().Count; i++) { if (!(ship.GetDirectlyHeldThings()[i] is Pawn)) { DropShipUtility.AddThingsToTransferables(tmpTransferables, ship.GetDirectlyHeldThings()[i]); } } var potentialFood = tmpTransferables.Where(t => (t.AnyThing is Pawn) == false).SelectMany(x => x.things).ToList(); var pawns = tmpTransferables.Where(t => t.AnyThing is Pawn).SelectMany(x => x.things).Cast <Pawn>().ToList(); return(DaysWorthOfFoodCalculator.ApproxDaysWorthOfFood(pawns, potentialFood, 0, IgnorePawnsInventoryMode.DontIgnore, ship.Faction)); }
public static void Load(List <TransferableOneWay> transferables) { foreach (ThingCountUNLIMITED thingCount in SaveManifest.savedManifest) { Log.Message($"Loading {thingCount.thing}:{thingCount.count}"); TransferableOneWay transferableOneWay = TransferableUtility.TransferableMatching <TransferableOneWay>(thingCount.thing, transferables, TransferAsOneMode.PodsOrCaravanPacking); transferableOneWay?.AdjustTo(transferableOneWay.ClampAmount(transferableOneWay.CountToTransfer + thingCount.count)); } }
public bool TryInsertThing(Thing thing) { if (requester.CanAcceptThing(thing)) { transferableThings.things.Add(thing); transferableThings.AdjustTo(this.reqAmount); return(true); } else { return(false); } }
public static void Postfix(Dialog_LoadTransporters __instance, Map ___map) { //Add manifest if (Mod.settings.caravanSaveManifest && !SaveManifest.caravan && ___map == SaveManifest.savedMap && SaveManifest.savedMap != null) { foreach (ThingCountUNLIMITED thingCount in SaveManifest.savedManifest) { Log.Message($"Loading {thingCount.thing}:{thingCount.count}"); TransferableOneWay transferableOneWay = TransferableUtility.TransferableMatching <TransferableOneWay>(thingCount.thing, __instance.Transferables(), TransferAsOneMode.PodsOrCaravanPacking); transferableOneWay?.AdjustTo(transferableOneWay.ClampAmount(transferableOneWay.CountToTransfer + thingCount.count)); } } //No selection like caravans - you're already selecting pods! }
public void AddToTheToLoadList(TransferableOneWay t, int count) { if (!t.HasAnyThing || t.CountToTransfer <= 0) { //Log.Message("NoThingsToTransfer"); return; } if (this.leftToLoad == null) { this.leftToLoad = new List <TransferableOneWay>(); } if (TransferableUtility.TransferableMatching <TransferableOneWay>(t.AnyThing, this.leftToLoad) != null) { Log.Error("Transferable already exists."); return; } TransferableOneWay transferableOneWay = new TransferableOneWay(); this.leftToLoad.Add(transferableOneWay); transferableOneWay.things.AddRange(t.things); transferableOneWay.AdjustTo(count); }