Esempio n. 1
0
 public override void DrawGUIOverlay()
 {
     if (!Medical && Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest && PlayerCanSeeOwners)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (!owners.Any())
         {
             GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
         }
         else if (owners.Count == 1)
         {
             if (!owners[0].InBed() || owners[0].CurrentBed() != this)
             {
                 GenMapUI.DrawThingLabel(this, owners[0].LabelShort, defaultThingLabelColor);
             }
         }
         else
         {
             for (int i = 0; i < owners.Count; i++)
             {
                 if (!owners[i].InBed() || owners[i].CurrentBed() != this || !(owners[i].Position == GetSleepingSlotPos(i)))
                 {
                     Vector3 multiOwnersLabelScreenPosFor = GetMultiOwnersLabelScreenPosFor(i);
                     GenMapUI.DrawThingLabel(multiOwnersLabelScreenPosFor, owners[i].LabelShort, defaultThingLabelColor);
                 }
             }
         }
     }
 }
Esempio n. 2
0
 public override void DrawGUIOverlay()
 {
     base.DrawGUIOverlay();
     if (this.DrawStatus && Find.CameraDriver.CurrentZoom < CameraZoomRange.Middle)
     {
         string label = "";
         // only show overlay status text if has power:
         if (this.Active)
         {
             if (currentBillReport != null) // the assembler is actively working
             {                              // set the status text to the bill's label:
                 label = currentBillReport.bill.LabelCap;
             }
             else // the assembler is NOT working
             {
                 // show why it is not working:
                 if (this.BillStack.AnyShouldDoNow)   // it DOES have bills
                 {
                     label = "SearchingForIngredients".Translate();
                 }
                 else     // it DOESN'T have bills:
                 {
                     label = "AssemblerNoBills".Translate();
                 }
             }
             // draw the label on the screen:
         }
         else if (compFlick?.SwitchIsOn == false)
         {
             label = "SwitchedOff".Translate();
         }
         GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(this, 0f), label, Color.white);
     }
 }
Esempio n. 3
0
 public override void DrawGUIOverlay()
 {
     if (this.Medical)
     {
         return;
     }
     if (Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest && this.PlayerCanSeeOwners)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (!this.owners.Any <Pawn>())
         {
             GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
         }
         else if (this.owners.Count == 1)
         {
             if (this.owners[0].InBed() && this.owners[0].CurrentBed() == this)
             {
                 return;
             }
             GenMapUI.DrawThingLabel(this, this.owners[0].NameStringShort, defaultThingLabelColor);
         }
         else
         {
             for (int i = 0; i < this.owners.Count; i++)
             {
                 if (!this.owners[i].InBed() || this.owners[i].CurrentBed() != this || !(this.owners[i].Position == this.GetSleepingSlotPos(i)))
                 {
                     Vector3 multiOwnersLabelScreenPosFor = this.GetMultiOwnersLabelScreenPosFor(i);
                     GenMapUI.DrawThingLabel(multiOwnersLabelScreenPosFor, this.owners[i].NameStringShort, defaultThingLabelColor);
                 }
             }
         }
     }
 }
Esempio n. 4
0
        public override void DrawMouseAttachments()
        {
            var   intVec         = UI.MouseCell();
            float totalFertility = 0;

            foreach (var cell in GenRadial.RadialCellsAround(intVec, 5.8f, false))
            {
                if (!cell.InBounds(Map))
                {
                    continue;
                }
                if (Map.fogGrid.IsFogged(cell))
                {
                    continue;
                }

                var fertility = CalculateFertilityAt(cell);
                if (fertility >= 0.4)
                {
                    Vector3 v = GenMapUI.LabelDrawPosFor(cell);
                    GenMapUI.DrawThingLabel(v, fertility.ToString(), FertilityColor(fertility));
                }
                totalFertility += fertility;
            }
            var avgFertility = totalFertility / (GenRadial.NumCellsInRadius(5.8f) - 1);

            Text.Font = GameFont.Medium;
            Rect rect = new Rect(Event.current.mousePosition.x + 19f, Event.current.mousePosition.y + 19f, 100f, 100f);

            GUI.color = FertilityColor(avgFertility);
            Widgets.Label(rect, avgFertility.ToString("F3"));
            GUI.color = Color.white;
            GenUI.DrawMouseAttachment(null, string.Empty);
        }
        public override void DrawGUIOverlay()
        {
            if (Medical || Find.CameraDriver.CurrentZoom != 0 || !PlayerCanSeeOwners)
            {
                return;
            }
            Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;

            if (!OwnersForReading.Any())
            {
                GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
                return;
            }
            if (OwnersForReading.Count == 1)
            {
                if (!OwnersForReading[0].InBed() || OwnersForReading[0].CurrentBed() != this)
                {
                    GenMapUI.DrawThingLabel(this, OwnersForReading[0].LabelShort, defaultThingLabelColor);
                }
                return;
            }
            for (int i = 0; i < OwnersForReading.Count; i++)
            {
                if (!OwnersForReading[i].InBed() || OwnersForReading[i].CurrentBed() != this || !(OwnersForReading[i].Position == GetSleepingSlotPos(i)))
                {
                    GenMapUI.DrawThingLabel(GetMultiOwnersLabelScreenPosFor(i), OwnersForReading[i].LabelShort, defaultThingLabelColor);
                }
            }
        }
Esempio n. 6
0
        //Draw infusion label on map
        public override void MapComponentOnGUI()
        {
            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return;
            }
            if (InfusionLabelManager.Drawee.Count == 0)
            {
                return;
            }

            foreach (var current in InfusionLabelManager.Drawee)
            {
                if (current.parent.Map != map)
                {
                    continue;
                }

                // skip fogged
                if (map.fogGrid.IsFogged(current.parent.Position))
                {
                    continue;
                }

                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(current.parent, -0.66f), current.InfusedLabel, current.InfusedLabelColor);
            }
        }
Esempio n. 7
0
        public override void DrawGUIOverlay()
        {
            if (Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest)
            {
                Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;

                var owners = this.Owners();
                if (!owners.Any())
                {
                    GenMapUI.DrawThingLabel(this, rentalFee + silverLabel, defaultThingLabelColor);
                }
                else if (owners.Count == 1)
                {
                    if (owners[0].InBed() && owners[0].CurrentBed() == this)
                    {
                        return;
                    }
                    GenMapUI.DrawThingLabel(this, owners[0].LabelShort, defaultThingLabelColor);
                }
                else
                {
                    for (int index = 0; index < owners.Count; ++index)
                    {
                        if (!owners[index].InBed() || owners[index].CurrentBed() != this || !(owners[index].Position == GetSleepingSlotPos(index)))
                        {
                            var pos = Traverse.Create(this).Method("GetMultiOwnersLabelScreenPosFor", index).GetValue <Vector3>();
                            GenMapUI.DrawThingLabel(pos, owners[index].LabelShort, defaultThingLabelColor);
                        }
                    }
                }
            }
        }
Esempio n. 8
0
        public override void DrawGUIOverlay()
        {
            if (DisplayEnabled)
            {
                var text = GenText.ToStringTemperature(lastDetectedTemperature);
                Text.Font = GameFont.Tiny;
                float halfHeight = Text.CalcSize(text).y * 0.25f;

                var ranges   = Modes[TemperatureMode];
                var normal   = RangeLerp(lastDetectedTemperature, ranges.Item1, ranges.Item2);
                var position = DrawPos.MapToUIPosition();
                position.y -= halfHeight;

                if (!isBlocked)
                {
                    var labelColor = Color.Lerp(ColdColour, HotColour, normal);
                    labelColor.r += 0.5f; // Brighten
                    labelColor.g += 0.5f; // Brighten
                    labelColor.b += 0.5f; // Brighten
                    GenMapUI.DrawThingLabel(position, text, labelColor);
                }
                else
                {
                    GenMapUI.DrawThingLabel(position, "Blocked!", Color.white);
                }
            }
        }
 public override void DrawGUIOverlay()
 {
     base.DrawGUIOverlay();
     if (Find.CameraDriver.CurrentZoom < CameraZoomRange.Middle)
     {
         GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(this, 0f), batteryComp.StoredEnergy.ToString("F0"), Color.white);
     }
 }
 public override void DrawGUIOverlay()
 {
     base.DrawGUIOverlay();
     if (Find.CameraDriver.CurrentZoom < CameraZoomRange.Middle)
     {
         GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(this, 0f), thingToGenerate?.LabelCap ?? "AssemblerIdle".Translate(), Color.white);
     }
 }
Esempio n. 11
0
 /// <summary>
 /// label绘制
 /// </summary>
 public override void DrawGUIOverlay()
 {
     if (occupant != null)
     {
         Color defaultThingLabelColor = Color.yellow;
         GenMapUI.DrawThingLabel(this, "SR_Bound".Translate(), defaultThingLabelColor);
     }
 }
Esempio n. 12
0
 public override void DrawGUIOverlay()
 {
     base.DrawGUIOverlay();
     if (Find.CameraDriver.CurrentZoom < CameraZoomRange.Middle)
     {
         GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(this, 0f), currentBillReport == null ? "AssemblerIdle".Translate() : currentBillReport.bill.LabelCap, Color.white);
     }
 }
Esempio n. 13
0
 public override void DrawGUIOverlay()
 {
     base.DrawGUIOverlay();
     if (Current.CameraDriver.CurrentZoom <= CameraZoomRange.Close)
     {
         GenMapUI.DrawThingLabel(this, LabelCap + "\n\r" + GetUIThingLabel());
     }
 }
Esempio n. 14
0
        public override void DrawGUIOverlay()
        {
            base.DrawGUIOverlay();
            if (this.DrawStatus && Find.CameraDriver.CurrentZoom < CameraZoomRange.Middle)
            {
                string label  = "";
                string label2 = "";
                // only show overlay status text if has power:
                if (this.Active)
                {
                    if (currentBillReport != null) // the assembler is actively working
                    {                              // set the status text to the bill's label:
                        label = currentBillReport.bill.LabelCap;
                    }
                    else // the assembler is NOT working
                    {
                        // show why it is not working:
                        if (this.BillStack.AnyShouldDoNow)   // it DOES have bills
                        {
                            label = "SearchingForIngredients".Translate();
                        }
                        else     // it DOESN'T have bills:
                        {
                            label = "AssemblerNoBills".Translate();
                        }
                    }
                    // draw the label on the screen:
                }
                else if (compFlick?.SwitchIsOn == false)
                {
                    label = "SwitchedOff".Translate();
                }

                if (!AllowProduction_thingQueue)
                {
                    label2 = "PRF_OutputBufferWarning".Translate();
                }
                else if (thingQueue.Count > 1)
                {
                    label2 = "SAL3_Products".Translate(thingQueue.Count, max_thingQueue_Count);
                }
                Vector2 vectorpos = GenMapUI.LabelDrawPosFor(this, 0f);

                //Don't show an Empty Line
                if (label != "")
                {
                    GenMapUI.DrawThingLabel(vectorpos, label, Color.white);
                }

                vectorpos.y += Verse.Text.CalcSize(label).y;

                //Don't show an Empty Line
                if (label2 != "")
                {
                    GenMapUI.DrawThingLabel(vectorpos, label2, Color.yellow);
                }
            }
        }
Esempio n. 15
0
 public override void DrawGUIOverlay()
 {
     if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
     {
         return;
     }
     if (!markerName.Trim().Equals(""))
     {
         GenMapUI.DrawThingLabel(this, markerName, new Color(1f, 1f, 1f, 0.75f));
     }
 }
Esempio n. 16
0
        public override void DrawGUIOverlay()
        {
            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return;
            }

            if (!IsActive)
            {
                return;
            }

            GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(parent, -0.66f), InfusedLabelAbbr, InfusedLabelColor);
        }
Esempio n. 17
0
        public void OnGUI()
        {
            if (toDrawLabels != null)
            {
                var list = toDrawLabels;

                foreach (Thing t in list)
                {
                    int pri = MainMod.Data.GetPriority(t);

                    GenMapUI.DrawThingLabel(t, pri.ToString(), pri.GetPriorityColor());
                }
            }
        }
 public override void DrawGUIOverlay()
 {
     if (Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest && this.PlayerCanSeeOwners)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (!this.owners.Any <Pawn>())
         {
             GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
         }
         else if (this.owners.Count == 1)
         {
             GenMapUI.DrawThingLabel(this, this.owners[0].NameStringShort, defaultThingLabelColor);
         }
     }
 }
Esempio n. 19
0
        public override void DrawGUIOverlay()
        {
            base.DrawGUIOverlay();

            if (this.State != WorkingState.Ready && Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest)
            {
                var p = CarryPosition();
                if (!this.ToUnderground || this.WorkLeft > 0.7f)
                {
                    Vector2 result = Find.Camera.WorldToScreenPoint(p + new Vector3(0, 0, -0.4f)) / Prefs.UIScale;
                    result.y = (float)UI.screenHeight - result.y;
                    GenMapUI.DrawThingLabel(result, this.CarryingThing().stackCount.ToStringCached(), GenMapUI.DefaultThingLabelColor);
                }
            }
        }
Esempio n. 20
0
 public override void DrawGUIOverlay()
 {
     if (Props.drawAssignmentOverlay && (Props.drawUnownedAssignmentOverlay || assignedPawns.Any()) && Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest && PlayerCanSeeAssignments)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (!assignedPawns.Any())
         {
             GenMapUI.DrawThingLabel(parent, "Unowned".Translate(), defaultThingLabelColor);
         }
         if (assignedPawns.Count == 1 && CanDrawOverlayForPawn(assignedPawns[0]))
         {
             GenMapUI.DrawThingLabel(parent, assignedPawns[0].LabelShort, defaultThingLabelColor);
         }
     }
 }
 public override void DrawGUIOverlay()
 {
     if (Props.drawAssignmentOverlay && (Props.drawUnownedAssignmentOverlay || assignedStation != null) && Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest && PlayerCanSeeAssignments)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (assignedStation == null)
         {
             GenMapUI.DrawThingLabel(parent, "Unowned".Translate(), defaultThingLabelColor);
         }
         if (assignedStation != null && CanDrawOverlayForStation(assignedStation))
         {
             GenMapUI.DrawThingLabel(parent, assignedStation.LabelShort, defaultThingLabelColor);
         }
     }
 }
        static void Postfix(Thing __instance)
        {
            if (!OutfittedMod.showApparelScores)
            {
                return;
            }

            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return;
            }

            var pawn = Find.Selector.SingleSelectedThing as Pawn;

            if (pawn == null || !pawn.IsColonistPlayerControlled)
            {
                return;
            }

            var apparel = __instance as Apparel;

            if (apparel == null)
            {
                return;
            }

            var outfit = pawn.outfits.CurrentOutfit as ExtendedOutfit;

            if (outfit == null)
            {
                return;
            }

            if (!outfit.filter.Allows(apparel))
            {
                return;
            }

            var scores = CachedScoresForPawn(pawn);

            float score = JobGiver_OptimizeApparel.ApparelScoreGain_NewTmp(pawn, apparel, scores);

            if (Math.Abs(score) > 0.01f)
            {
                var pos = GenMapUI.LabelDrawPosFor(apparel, 0f);
                GenMapUI.DrawThingLabel(pos, score.ToString("F1"), BeautyDrawer.BeautyColor(score, 3f));
            }
        }
        public static void DebugDrawAttackTargetScores_OnGUI()
        {
            IAttackTargetSearcher attackTargetSearcher = Find.Selector.SingleSelectedThing as IAttackTargetSearcher;

            if (attackTargetSearcher == null)
            {
                return;
            }
            if (attackTargetSearcher.Thing.Map != Find.CurrentMap)
            {
                return;
            }
            Verb currentEffectiveVerb = attackTargetSearcher.CurrentEffectiveVerb;

            if (currentEffectiveVerb == null)
            {
                return;
            }
            List <Thing> list = attackTargetSearcher.Thing.Map.listerThings.ThingsInGroup(ThingRequestGroup.AttackTarget);

            Text.Anchor = TextAnchor.MiddleCenter;
            Text.Font   = GameFont.Tiny;
            for (int i = 0; i < list.Count; i++)
            {
                Thing thing = list[i];
                if (thing != attackTargetSearcher)
                {
                    string text;
                    Color  red;
                    if (!AttackTargetFinder.CanShootAtFromCurrentPosition((IAttackTarget)thing, attackTargetSearcher, currentEffectiveVerb))
                    {
                        text = "out of range";
                        red  = Color.red;
                    }
                    else
                    {
                        text = AttackTargetFinder.GetShootingTargetScore((IAttackTarget)thing, attackTargetSearcher, currentEffectiveVerb).ToString("F0");
                        red  = new Color(0.25f, 1f, 0.25f);
                    }
                    Vector2 screenPos = thing.DrawPos.MapToUIPosition();
                    GenMapUI.DrawThingLabel(screenPos, text, red);
                }
            }
            Text.Anchor = TextAnchor.UpperLeft;
            Text.Font   = GameFont.Small;
        }
 private static void DrawFertilityAroundMouse()
 {
     if (!PlaySettingsPatch.showFertilityOverlay)
     {
         return;
     }
     FertilityUtility.FillFertilityRelevantCells(UI.MouseCell(), Find.CurrentMap);
     for (int i = 0; i < FertilityUtility.fertilityRelevantCells.Count; i++)
     {
         IntVec3 intVec = FertilityUtility.fertilityRelevantCells[i];
         float   num    = FertilityUtility.CellFertility(intVec, Find.CurrentMap, FertilityDrawer.fertilityCountedThings);
         if (num != 0f)
         {
             Vector3 v = GenMapUI.LabelDrawPosFor(intVec);
             GenMapUI.DrawThingLabel(v, num.ToString("n1"), FertilityDrawer.FertilityColor(num, 1.4f));
         }
     }
     FertilityDrawer.fertilityCountedThings.Clear();
 }
        private static void Postfix(Thing __instance)
        {
            if (!OutfitManagerMod.ShowApparelScores)
            {
                return;
            }
            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return;
            }
            if (!(Find.Selector.SingleSelectedThing is Pawn pawn) || !pawn.IsColonistPlayerControlled)
            {
                return;
            }
            if (!(__instance is Apparel apparel))
            {
                return;
            }
            if (!(pawn.outfits.CurrentOutfit is ExtendedOutfit outfit))
            {
                return;
            }
            if (!outfit.filter.Allows(apparel))
            {
                return;
            }
            var wornApparelScores = pawn.apparel.WornApparel
                                    .Select(wornApparel => OutfitManagerMod.ApparelScoreRaw(pawn, wornApparel)).ToList();
            var score = JobGiver_OptimizeApparel.ApparelScoreGain_NewTmp(pawn, apparel, wornApparelScores);

            if (!(Math.Abs(score) > 0.01f))
            {
                return;
            }
            var pos = GenMapUI.LabelDrawPosFor(apparel, 0f);

            GenMapUI.DrawThingLabel(pos, score.ToString("F1", CultureInfo.InvariantCulture),
                                    BeautyDrawer.BeautyColor(score, 3f));
        }
Esempio n. 26
0
 private static void DrawFertilityAroundMouse()
 {
     if (!Find.PlaySettings.showFertilityOverlay)
     {
         return;
     }
     // Prevent overlap with beauty display
     if (Find.PlaySettings.showBeauty)
     {
         return;
     }
     FertilityUtility.FillFertilityRelevantCells(UI.MouseCell(), Find.CurrentMap);
     foreach (var cell in FertilityUtility.fertilityRelevantCells)
     {
         float num = FertilityUtility.CellFertility(cell, Find.CurrentMap, FertilityDrawer.fertilityCountedThings);
         if (num != 0f)
         {
             Vector3 v = GenMapUI.LabelDrawPosFor(cell);
             GenMapUI.DrawThingLabel(v, num.ToString("n1"), FertilityDrawer.FertilityColor(num, 1.4f));
         }
     }
     FertilityDrawer.fertilityCountedThings.Clear();
 }
Esempio n. 27
0
 public override void DrawGUIOverlay()
 {
     if (this.CheatMod)
     {
         GenMapUI.DrawThingLabel(this, "Cheat Mode", Color.red);
     }
     else if (Find.CameraDriver.CurrentZoom == CameraZoomRange.Closest)
     {
         Color defaultThingLabelColor = GenMapUI.DefaultThingLabelColor;
         if (this.PodOwner == null)
         {
             GenMapUI.DrawThingLabel(this, "Unowned".Translate(), defaultThingLabelColor);
         }
         else if (this.JobState != PS_Conditioning_JobState.Waiting)
         {
             // Draw nothing because the progress bar will be there
         }
         else
         {
             GenMapUI.DrawThingLabel(this, this.PodOwner.LabelShort, defaultThingLabelColor);
         }
     }
 }
Esempio n. 28
0
        static bool Prefix(Thing __instance)
        {
            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return(false);
            }
            Building_Storage DSU = __instance as Building_Storage;

            if (DSU == null)
            {
                return(true);
            }
            CompDeepStorage cds = DSU.GetComp <CompDeepStorage>();

            if (cds == null)
            {
                return(true);
            }
            if (cds.cdsProps.overlayType == LWM.DeepStorage.GuiOverlayType.Normal)
            {
                return(true);
            }
            if (cds.cdsProps.overlayType == GuiOverlayType.None)
            {
                return(false);
            }

            List <Thing> things;
            String       s;

            if (cds.cdsProps.overlayType == GuiOverlayType.CountOfAllStacks)
            {
                // probably Armor Racks, Clothing Racks, Weapon Lockers etc...
                things = new List <Thing>();
                foreach (IntVec3 c in DSU.AllSlotCellsList())
                {
                    things.AddRange(__instance.Map.thingGrid.ThingsListAtFast(c).FindAll(t => t.def.EverStorable(false)));
                }

                if (things.Count == 0)
                {
                    if (cds.cdsProps.showContents)
                    {
                        return(false);                            // If it's empty, player will see!
                    }
                    s = "LWM_DS_Empty".Translate();
                }
                else if (things.Count == 1)
                {
                    s = 1.ToStringCached(); // Why not s="1";?  You never know, someone may be playing in...
                }
                else if (AllSameType(things))
                {
                    s = "x" + things.Count.ToStringCached();
                }
                else
                {
                    s = "[ " + things.Count.ToStringCached() + " ]";
                }
                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(__instance, 0f), s, GenMapUI.DefaultThingLabelColor);
                return(false);
            }

            if (cds.cdsProps.overlayType == GuiOverlayType.CountOfStacksPerCell)
            {
                // maybe Armor Racks, Clothing Racks?
                foreach (IntVec3 c in DSU.AllSlotCellsList())
                {
                    things = __instance.Map.thingGrid.ThingsListAtFast(c).FindAll(t => t.def.EverStorable(false));
                    if (things.Count == 0)
                    {
                        if (cds.cdsProps.showContents)
                        {
                            continue;                            // if it's empty, player will see!
                        }
                        s = "LWM_DS_Empty".Translate();
                    }
                    else if (things.Count == 1)
                    {
                        s = 1.ToStringCached(); // ..a language that doesn't use arabic numerals?
                    }
                    else if (AllSameType(things))
                    {
                        s = "x" + things.Count.ToStringCached();
                    }
                    else
                    {
                        s = "[ " + things.Count.ToStringCached() + " ]";
                    }
                    GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(c), s, GenMapUI.DefaultThingLabelColor);
                }
                return(false);
            }
            if (cds.cdsProps.overlayType == GuiOverlayType.SumOfAllItems)
            {
                // probably food baskets, skips, etc...
                things = new List <Thing>();
                foreach (IntVec3 c in DSU.slotGroup.CellsList)
                {
                    things.AddRange(__instance.Map.thingGrid.ThingsListAtFast(c)
                                    .FindAll(t => t.def.EverStorable(false)));
                }

                if (things.Count == 0)
                {
                    if (cds.cdsProps.showContents)
                    {
                        return(false);                            // if it's empty, player will see
                    }
                    s = "LWM_DS_Empty".Translate();
                }
                else
                {
                    int  count      = things[0].stackCount;
                    bool allTheSame = true;
                    for (int i = 1; i < things.Count; i++)
                    {
                        if (things[i].def != things[0].def)
                        {
                            allTheSame = false;
                        }
                        count += things[i].stackCount;
                    }
                    if (allTheSame)
                    {
                        s = count.ToStringCached();
                    }
                    else
                    {
                        s = "[ " + count.ToStringCached() + " ]";
                    }
                }
                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(__instance, 0f), s, GenMapUI.DefaultThingLabelColor);
                return(false);
            }
            Log.Warning("LWM DeepStorage: could not find GuiOverlayType of " + cds.cdsProps.overlayType);
            return(true);
        }
        private static bool Prefix(Thing __instance)
        {
            if (Find.CameraDriver.CurrentZoom != CameraZoomRange.Closest)
            {
                return(true);                                                          // maybe someone changes this? Who knows.
            }
            if (!(__instance is Building_Storage DSU))
            {
                return(true);
            }

            var cds = DSU.GetComp <CompDeepStorage>();

            if (cds == null)
            {
                return(true);
            }

            switch (cds.cdsProps.overlayType)
            {
            case GuiOverlayType.Normal:
                return(true);

            case GuiOverlayType.None:
                return(false);
            }

            List <Thing> things;
            string       s;

            switch (cds.cdsProps.overlayType)
            {
            case GuiOverlayType.CountOfAllStacks:
            {
                // maybe Armor Racks, Clothing Racks, def Weapon Lockers etc...
                things = new List <Thing>();
                foreach (var c in DSU.AllSlotCellsList())
                {
                    things.AddRange(__instance.Map.thingGrid.ThingsListAtFast(c).FindAll(t => t.def.EverStorable(false)));
                }

                switch (things.Count)
                {
                case 0 when cds.cdsProps.showContents:
                    return(false);        // If it's empty, player will see!

                case 0:
                    s = "LWM_DS_Empty".Translate();
                    break;

                case 1:
                    s = 1.ToStringCached();         // Why not s="1";?  You never know, someone may be playing in...
                    break;

                default:
                {
                    if (AllSameType(things))
                    {
                        s = "x" + things.Count.ToStringCached();
                    }
                    else
                    {
                        s = "[ " + things.Count.ToStringCached() + " ]";
                    }

                    break;
                }
                }

                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(__instance, 0f), s, GenMapUI.DefaultThingLabelColor);
                return(false);
            }

            case GuiOverlayType.CountOfStacksPerCell:
            {
                // maybe Armor Racks, Clothing Racks?
                foreach (var c in DSU.AllSlotCellsList())
                {
                    things = __instance.Map.thingGrid.ThingsListAtFast(c).FindAll(t => t.def.EverStorable(false));
                    switch (things.Count)
                    {
                    case 0 when cds.cdsProps.showContents:
                        continue;         // if it's empty, player will see!

                    case 0:
                        s = "LWM_DS_Empty".Translate();
                        break;

                    case 1:
                        s = 1.ToStringCached();         // ..a language that doesn't use arabic numerals?
                        break;

                    default:
                    {
                        if (AllSameType(things))
                        {
                            s = "x" + things.Count.ToStringCached();
                        }
                        else
                        {
                            s = "[ " + things.Count.ToStringCached() + " ]";
                        }

                        break;
                    }
                    }

                    var l2 = GenMapUI.LabelDrawPosFor(c);
//                    l2.x+=cds.x;
//                    l2.y+=cds.y;
                    l2.y += 10f;
                    GenMapUI.DrawThingLabel(l2, s, GenMapUI.DefaultThingLabelColor);
                }

                return(false);
            }

            case GuiOverlayType.SumOfAllItems:
            {
                // probably food baskets, skips, etc...
                things = new List <Thing>();
                foreach (var c in DSU.slotGroup.CellsList)
                {
                    things.AddRange(__instance.Map.thingGrid.ThingsListAtFast(c)
                                    .FindAll(t => t.def.EverStorable(false)));
                }

                if (things.Count == 0)
                {
                    if (cds.cdsProps.showContents)
                    {
                        return(false);                               // if it's empty, player will see
                    }
                    s = "LWM_DS_Empty".Translate();
                }
                else
                {
                    var count      = things[0].stackCount;
                    var allTheSame = true;
                    for (var i = 1; i < things.Count; i++)
                    {
                        if (things[i].def != things[0].def)
                        {
                            allTheSame = false;
                        }
                        count += things[i].stackCount;
                    }

                    if (allTheSame)
                    {
                        s = count.ToStringCached();
                    }
                    else
                    {
                        s = "[ " + count.ToStringCached() + " ]";
                    }
                }

                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(__instance, 0f), s, GenMapUI.DefaultThingLabelColor);
                return(false);
            }

            case GuiOverlayType.SumOfItemsPerCell:
            {
                // Big Shelves
                var anyItems = false;
                var itemsWithStackSizeOne = false;
                foreach (var c in DSU.AllSlotCellsList())
                {
                    things = __instance.Map.thingGrid.ThingsListAtFast(c).FindAll(t => t.def.EverStorable(false));
                    if (things.Count > 0)
                    {
                        anyItems = true;
                        var count = 0;
                        foreach (var t in things)
                        {
                            if (itemsWithStackSizeOne || t.def.stackLimit == 1)
                            {
                                itemsWithStackSizeOne = true;
                                if (things.Count == 1)
                                {
                                    s = 1.ToStringCached();     // ..a language that doesn't use arabic numerals?
                                }
                                else if (AllSameType(things))
                                {
                                    s = "x" + things.Count.ToStringCached();
                                }
                                else
                                {
                                    s = "[ " + things.Count.ToStringCached() + " ]";
                                }
                                var l = GenMapUI.LabelDrawPosFor(c);
                                l.y += 10f;
                                GenMapUI.DrawThingLabel(l, s, GenMapUI.DefaultThingLabelColor);
                                goto WhyDoesCSharpNotHaveBreakTwo;
                            }
                            else
                            {
                                count += t.stackCount;
                            }
                        }

                        if (AllSameType(things))
                        {
                            s = count.ToStringCached();
                        }
                        else
                        {
                            s = "[ " + count.ToStringCached() + " ]";
                        }
                        var l2 = GenMapUI.LabelDrawPosFor(c);
                        l2.y += 10f;
                        GenMapUI.DrawThingLabel(l2, s, GenMapUI.DefaultThingLabelColor);
                    }     // if count > 0

                    WhyDoesCSharpNotHaveBreakTwo :;
                }     // foreach cell

                if (anyItems || cds.cdsProps.showContents)
                {
                    return(false);
                }
                // there are no items, but no way to see that.
                s = "LWM_DS_Empty".Translate();
                GenMapUI.DrawThingLabel(GenMapUI.LabelDrawPosFor(__instance, 0f), s, GenMapUI.DefaultThingLabelColor);

                return(false);
            }

            default:
                Log.Warning("LWM DeepStorage: could not find GuiOverlayType of " + cds.cdsProps.overlayType);
                return(true);
            }
        }