internal static void Prefix(Pawn pawn, Thing refuelable) { if (WorldComp.HasInfiniteStorages(refuelable.Map)) { droppedAndStorage = new Dictionary <Thing, Building_InfiniteStorage>(); ThingFilter filter = refuelable.TryGetComp <CompRefuelable>().Props.fuelFilter; foreach (Building_InfiniteStorage storage in WorldComp.GetInfiniteStorages(refuelable.Map)) { if (storage.Spawned && storage.Map == pawn.Map && storage.IsOperational) { List <Thing> removed; if (storage.TryRemove(filter, out removed)) { List <Thing> removedThings = new List <Thing>(); foreach (Thing t in removed) { BuildingUtil.DropThing(t, t.def.stackLimit, storage, storage.Map, removedThings); } if (removedThings.Count > 0) { droppedAndStorage.Add(removedThings[0], storage); } } } } } }
static void Postfix(ref int __result, RecipeWorkerCounter __instance, Bill_Production bill) { List <ThingDefCountClass> products = __instance.recipe.products; if (WorldComp.HasInfiniteStorages(bill.Map) && products != null) { foreach (ThingDefCountClass product in products) { ThingDef def = product.thingDef; foreach (Building_InfiniteStorage s in WorldComp.GetInfiniteStorages(bill.Map)) { __result += s.StoredThingCount(def, bill.ingredientFilter); } } } }
static bool Prefix(Designator_Build __instance, Event ev) { if (entDefFI == null) { entDefFI = typeof(Designator_Build).GetField("entDef", BindingFlags.NonPublic | BindingFlags.Instance); stuffDefFI = typeof(Designator_Build).GetField("stuffDef", BindingFlags.NonPublic | BindingFlags.Instance); writeStuffFI = typeof(Designator_Build).GetField("writeStuff", BindingFlags.NonPublic | BindingFlags.Instance); } Map map = Find.CurrentMap; ThingDef thingDef = entDefFI.GetValue(__instance) as ThingDef; if (thingDef == null || !thingDef.MadeFromStuff || !WorldComp.HasInfiniteStorages(map)) { return(true); } List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (ThingDef current in map.resourceCounter.AllCountedAmounts.Keys) { if (current.IsStuff && current.stuffProps.CanMake(thingDef) && (DebugSettings.godMode || map.listerThings.ThingsOfDef(current).Count > 0)) { ThingDef localStuffDef = current; string labelCap = localStuffDef.LabelCap; list.Add(new FloatMenuOption(labelCap, delegate { __instance.ProcessInput(ev); Find.DesignatorManager.Select(__instance); stuffDefFI.SetValue(__instance, current); writeStuffFI.SetValue(__instance, true); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } } foreach (Building_InfiniteStorage storage in WorldComp.GetInfiniteStorages(map)) { if (storage.Spawned) { foreach (Thing t in storage.StoredThings) { ThingDef current = t.def; if (current.IsStuff && current.stuffProps.CanMake(thingDef) && (DebugSettings.godMode || t.stackCount > 0)) { string labelCap = current.LabelCap; list.Add(new FloatMenuOption(labelCap, delegate { __instance.ProcessInput(ev); Find.DesignatorManager.Select(__instance); stuffDefFI.SetValue(__instance, current); writeStuffFI.SetValue(__instance, true); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } } } } if (list.Count == 0) { Messages.Message("NoStuffsToBuildWith".Translate(), MessageTypeDefOf.RejectInput); } else { FloatMenu floatMenu = new FloatMenu(list); floatMenu.vanishIfMouseDistant = true; Find.WindowStack.Add(floatMenu); Find.DesignatorManager.Select(__instance); } return(false); }