public static List <Thing> genericContentsHeader(Building_Storage storage, out string header, out string tooltip) { headerStringB.Length = 0; listOfStoredItems.Clear(); tooltip = null; bool flagUseStackInsteadOfItem = false; // "3/4 Items" vs "3/4 Stacks" float itemsTotalMass = 0; // not Bulk here int numCells = 0; foreach (IntVec3 storageCell in storage.AllSlotCells()) { foreach (Thing t in storage.Map.thingGrid.ThingsListAt(storageCell)) { if (t.Spawned && t.def.EverStorable(false)) { listOfStoredItems.Add(t); itemsTotalMass += t.GetStatValue(StatDefOf.Mass, true) * (float)t.stackCount; if (t.def.stackLimit > 1) { flagUseStackInsteadOfItem = true; } } } numCells++; } // 4/8 stacks with total mass of 12kg (as above) headerStringB.Append("LWM.ContentsHeaderMax" .Translate(listOfStoredItems.Count, // 3 stacks or 3 items: (flagUseStackInsteadOfItem?"LWM.XStacks":"LWM.XItems").Translate(numCells), StatDefOf.Mass, itemsTotalMass.ToString("0.##"))); AddPawnReservationsHeader(storage); header = headerStringB.ToString(); return(listOfStoredItems); }
static void AddPawnReservationsHeader(Building_Storage storage) { List <Pawn> pwns = storage.Map.mapPawns.SpawnedPawnsInFaction(Faction.OfPlayer); if (pwns.Count > 0) { listOfReservingPawns.Clear(); foreach (IntVec3 c in storage.AllSlotCells()) { Pawn p = storage.Map.reservationManager.FirstRespectedReserver(c, pwns[0]); if (p != null) { // (p can possibly be animals) listOfReservingPawns.Add(p.LabelShort); } } if (listOfReservingPawns.Count > 0) { headerStringB.Append('\n'); if (listOfReservingPawns.Count == 1) { headerStringB.Append("LWM.ContentsHeaderPawnUsing".Translate(listOfReservingPawns[0])); } else { headerStringB.Append("LWM.ContentsHeaderPawnsUsing".Translate( String.Join(", ", listOfReservingPawns.ToArray()))); } } } } // end checking pawn reservations
public static void Postfix(Building_Storage __instance, Map map) { CompDeepStorage cds; if ((cds = __instance.GetComp <CompDeepStorage>()) == null) { return; } foreach (var cell in __instance.AllSlotCells()) { var list = map.thingGrid.ThingsListAt(cell); var alreadyFoundItemOnTop = false; for (var i = list.Count - 1; i >= 0; i--) { var thing = list[i]; if (!thing.Spawned || !thing.def.EverStorable(false)) { continue; // don't make people walking past be invisible... } if (cds.cdsProps.overlayType != GuiOverlayType.Normal || !cds.showContents) // Remove gui overlay - this includes number of stackabe item, quality, etc { map.listerThings.ThingsInGroup(ThingRequestGroup.HasGUIOverlay).Remove(thing); } if (thing.def.drawerType != DrawerType.MapMeshOnly) { if (!alreadyFoundItemOnTop) { Utils.TopThingInDeepStorage.Add(thing); } if (!cds.showContents) { map.dynamicDrawManager.DeRegisterDrawable(thing); } } alreadyFoundItemOnTop = true; // it's true now, one way or another! if (!cds.showContents) { map.tooltipGiverList.Notify_ThingDespawned(thing); // should this go with guioverlays? } // Don't need to thing.DirtyMapMesh(map); because of course it's dirty on spawn setup ;p } // end cell // Now put the DSU at the top of the ThingsList here: list.Remove(__instance); list.Add(__instance); } }