예제 #1
0
        private float FindBestScale(out bool onlyOneRow, out int maxPerGlobalRow)
        {
            float num = 1f;
            List <TacticalColonistBar.Entry> entries = TacticUtils.TacticalColonistBar.Entries;
            int num2 = CalculateGroupsCount();

            while (true)
            {
                float scaleMultiplier = 1f;
                if (!TacticalGroupsSettings.HideGroups)
                {
                    var count = TacticUtils.AllColonyGroups.Count;
                    count += TacticUtils.AllCaravanGroups.Count;
                    if (!WorldRendererUtility.WorldRenderedNow && count > 0)
                    {
                        var activeColony = TacticUtils.AllColonyGroups.Where(x => x.Map == Find.CurrentMap).FirstOrDefault();
                        if (activeColony != null)
                        {
                            count += TacticUtils.GetAllPawnGroupFor(activeColony).Take(TacticalGroupsSettings.GroupRowCount).Count();
                            count += TacticUtils.GetAllSubGroupFor(activeColony).Take(TacticalGroupsSettings.SubGroupRowCount).Count();
                        }
                    }
                    scaleMultiplier += (float)count / 10f;
                }

                float num3 = ((TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacing) * num);
                float num4 = (MaxColonistBarWidth - (float)(num2 - 1) * 25f * num) / scaleMultiplier;
                maxPerGlobalRow = Mathf.FloorToInt(num4 / num3);
                onlyOneRow      = true;
                if (TryDistributeHorizontalSlotsBetweenGroups(maxPerGlobalRow))
                {
                    int  allowedRowsCountForScale = GetAllowedRowsCountForScale(num);
                    bool flag = true;
                    int  num5 = -1;
                    for (int i = 0; i < entries.Count; i++)
                    {
                        if (num5 != entries[i].group)
                        {
                            num5 = entries[i].group;
                            int num6 = Mathf.CeilToInt((float)entriesInGroup[entries[i].group] / (float)horizontalSlotsPerGroup[entries[i].group]);
                            if (num6 > 1)
                            {
                                onlyOneRow = false;
                            }
                            if (num6 > allowedRowsCountForScale)
                            {
                                flag = false;
                                break;
                            }
                        }
                    }
                    if (flag)
                    {
                        break;
                    }
                }
                num *= 0.95f;
            }
            return(num);
        }
예제 #2
0
        public override void DoWindowContents(Rect rect)
        {
            base.DoWindowContents(rect);
            var colonyHideButtonRect = new Rect(rect.x + 13, rect.y + 13, Textures.ColonyHideButton.width, Textures.ColonyHideButton.height);

            if (this.colonistGroup.isColonyGroup || this.colonistGroup.isTaskForce)
            {
                GUI.DrawTexture(colonyHideButtonRect, Textures.ColonyHideButton);
                TooltipHandler.TipRegion(colonyHideButtonRect, Strings.GroupHideOptionsTooltip);
                if (this.colonistGroup.hideGroupIcon)
                {
                    GUI.DrawTexture(colonyHideButtonRect, Textures.ManageOptionsX);
                }
                if (Mouse.IsOver(colonyHideButtonRect))
                {
                    GUI.DrawTexture(colonyHideButtonRect, Textures.RescueTendHover);
                    if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                    {
                        var value = !this.colonistGroup.hideGroupIcon;
                        this.colonistGroup.hideGroupIcon = value;
                        if (this.colonistGroup is ColonyGroup colonyGroup)
                        {
                            foreach (var subGroup in TacticUtils.GetAllSubGroupFor(colonyGroup))
                            {
                                subGroup.hideGroupIcon = value;
                            }
                        }
                        TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
                    }
                }
            }
            else if (this.colonistGroup.isPawnGroup && this.colonistGroup is PawnGroup pawnGroup)
            {
                var subgroupButton = new Rect(colonyHideButtonRect);
                GUI.DrawTexture(subgroupButton, Textures.SubGroupButton);
                if (this.colonistGroup.isSubGroup)
                {
                    GUI.DrawTexture(subgroupButton, Textures.ManageOptionsX);
                }
                TooltipHandler.TipRegion(subgroupButton, Strings.HidePawnGroupOptionsTooltip);
                if (Mouse.IsOver(subgroupButton))
                {
                    GUI.DrawTexture(subgroupButton, Textures.RescueTendHover);
                    if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                    {
                        if (pawnGroup.isSubGroup)
                        {
                            pawnGroup.ConvertToPawnGroup();
                        }
                        else
                        {
                            pawnGroup.ConvertToSubGroup();
                        }
                        pawnGroup.ResetDrawOptions();
                        this.CloseAllWindows();
                        TacticUtils.TacticalColonistBar.MarkColonistsDirty();
                        TacticDefOf.TG_SubGroupSFX.PlayOneShotOnCamera();
                    }
                }
            }

            var hidePawnDotsRect = new Rect(colonyHideButtonRect.xMax + 10, colonyHideButtonRect.y, Textures.PawnDotsButton.width, Textures.PawnDotsButton.height);

            GUI.DrawTexture(hidePawnDotsRect, Textures.PawnDotsButton);
            TooltipHandler.TipRegion(hidePawnDotsRect, Strings.HideGroupPawnDotsOptionsTooltip);
            if (this.colonistGroup.hidePawnDots)
            {
                GUI.DrawTexture(hidePawnDotsRect, Textures.ManageOptionsX);
            }
            if (Mouse.IsOver(hidePawnDotsRect))
            {
                GUI.DrawTexture(hidePawnDotsRect, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
                    this.colonistGroup.hidePawnDots = !this.colonistGroup.hidePawnDots;
                }
            }

            var hideLifeOverlayRect = new Rect(colonyHideButtonRect.x, colonyHideButtonRect.yMax + 14, Textures.GroupOverlayButton.width, Textures.GroupOverlayButton.height);

            GUI.DrawTexture(hideLifeOverlayRect, Textures.GroupOverlayButton);
            if (this.colonistGroup.hideLifeOverlay)
            {
                GUI.DrawTexture(hideLifeOverlayRect, Textures.ManageOptionsX);
            }
            TooltipHandler.TipRegion(hideLifeOverlayRect, Strings.HideGroupHealthAlertOverlayOptionsTooltip);
            if (Mouse.IsOver(hideLifeOverlayRect))
            {
                GUI.DrawTexture(hideLifeOverlayRect, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
                    this.colonistGroup.hideLifeOverlay = !this.colonistGroup.hideLifeOverlay;
                }
            }

            var hideWeaponOverlayRect = new Rect(colonyHideButtonRect.xMax + 10, hideLifeOverlayRect.y, Textures.ShowWeaponButton.width, Textures.ShowWeaponButton.height);

            GUI.DrawTexture(hideWeaponOverlayRect, Textures.ShowWeaponButton);
            if (this.colonistGroup.hideWeaponOverlay)
            {
                GUI.DrawTexture(hideWeaponOverlayRect, Textures.ManageOptionsX);
            }
            TooltipHandler.TipRegion(hideWeaponOverlayRect, Strings.HideWeaponOverlayOptionsTooltip);
            if (Mouse.IsOver(hideWeaponOverlayRect))
            {
                GUI.DrawTexture(hideWeaponOverlayRect, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
                    this.colonistGroup.hideWeaponOverlay = !this.colonistGroup.hideWeaponOverlay;
                }
            }

            var presetButtonRect = new Rect(hideLifeOverlayRect.x + 5, hideLifeOverlayRect.yMax + 17, Textures.PresetButton.width, Textures.PresetButton.height);

            GUI.DrawTexture(presetButtonRect, Textures.PresetButton);
            Text.Anchor = TextAnchor.MiddleCenter;
            Widgets.Label(presetButtonRect, Strings.PresetLabel);
            Text.Anchor = TextAnchor.UpperLeft;

            TooltipHandler.TipRegion(presetButtonRect, Strings.PresetMenuOverlayOptionsTooltip);
            if (Mouse.IsOver(presetButtonRect))
            {
                GUI.DrawTexture(presetButtonRect, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
                    var presetMenu = this.childWindows?.FirstOrDefault(x => x is PresetMenu);
                    if (presetMenu != null)
                    {
                        presetMenu.Close();
                        this.childWindows.Remove(presetMenu);
                    }
                    else
                    {
                        TieredFloatMenu floatMenu = new PresetMenu(this, colonistGroup, windowRect, Textures.PresetMenu);
                        OpenNewMenu(floatMenu);
                    }
                }
            }

            //var banishPawnRect = new Rect(hideWeaponOverlayRect.x, hideWeaponOverlayRect.yMax + 14, Textures.BanishPawnButton.width, Textures.BanishPawnButton.height);
            //if (this.colonistGroup.isColonyGroup || this.colonistGroup.isTaskForce)
            //{
            //      GUI.DrawTexture(banishPawnRect, Textures.BanishPawnButton);
            //      TooltipHandler.TipRegion(banishPawnRect, Strings.BanishPawnTooltip);
            //      if (Mouse.IsOver(banishPawnRect))
            //      {
            //              GUI.DrawTexture(banishPawnRect, Textures.RescueTendHover);
            //              if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
            //              {
            //                      foreach (var pawn in Find.Selector.SelectedPawns)
            //            {
            //                              this.colonistGroup.Disband(pawn);
            //            }
            //                      TacticDefOf.TG_SlideMenuOptionSFX.PlayOneShotOnCamera();
            //              }
            //      }
            //}
        }
예제 #3
0
        private void CalculateDrawLocs(List <Rect> outDrawLocs, float scale, bool onlyOneRow, int maxPerGlobalRow)
        {
            outDrawLocs.Clear();
            int num = maxPerGlobalRow;

            if (onlyOneRow)
            {
                for (int i = 0; i < horizontalSlotsPerGroup.Count; i++)
                {
                    horizontalSlotsPerGroup[i] = Mathf.Min(horizontalSlotsPerGroup[i], entriesInGroup[i]);
                }
                num = TacticUtils.TacticalColonistBar.Entries.Count;
            }
            int   num2 = CalculateGroupsCount();
            float num3 = (TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacingX) * scale;
            float num4 = ((float)num * num3 + (float)(num2 - 1) * 25f * scale);

            if (!TacticalGroupsSettings.HideGroups)
            {
                if (!WorldRendererUtility.WorldRenderedNow)
                {
                    var activeColony = TacticUtils.AllColonyGroups.FirstOrDefault(x => x.Map == Find.CurrentMap);
                    if (activeColony != null)
                    {
                        num4 += TacticUtils.GetAllPawnGroupFor(activeColony).Take(TacticalGroupsSettings.GroupRowCount).Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                        num4 += TacticUtils.GetAllSubGroupFor(activeColony).Take(TacticalGroupsSettings.SubGroupRowCount).Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                    }
                }
            }

            List <TacticalColonistBar.Entry> entries = TacticUtils.TacticalColonistBar.Entries;
            int   num5 = -1;
            int   num6 = -1;
            float num7 = ((float)UI.screenWidth - num4) / 2f;

            num7 += TacticalGroupsSettings.ColonistBarPositionX;
            bool createGroupAssigned = false;

            for (int j = 0; j < entries.Count; j++)
            {
                if (num5 != entries[j].group)
                {
                    if (num5 >= 0)
                    {
                        num7 += 25f * scale;
                        num7 += ((float)GetHorizontalSlotsPerGroup(num5)) * scale * (TacticalColonistBar.BaseSize.x + TacticalGroupsSettings.ColonistBarSpacingX);
                    }
                    if (!TacticalGroupsSettings.HideGroups)
                    {
                        if (entries[j].caravanGroup != null)
                        {
                            caravanGroupDrawLoc.Add(new MappedValue(entries[j].caravanGroup, new Rect(num7 - (25f * scale), TacticalGroupsSettings.ColonistBarPositionY,
                                                                                                      entries[j].caravanGroup.GroupIconWidth, entries[j].caravanGroup.GroupIconHeight)));
                            num7 += entries[j].caravanGroup.GroupIconWidth;
                        }
                        else if (entries[j].colonyGroup != null)
                        {
                            if (entries[j].colonyGroup.Map == Find.CurrentMap)
                            {
                                if (!WorldRendererUtility.WorldRenderedNow)
                                {
                                    var list = TacticUtils.GetAllSubGroupFor(entries[j].colonyGroup);
                                    if (list.Any())
                                    {
                                        list.Reverse();
                                        var initPos = num7;
                                        var xPos    = num7;
                                        var yPos    = TacticalGroupsSettings.ColonistBarPositionY;
                                        for (var groupID = 0; groupID < list.Count(); groupID++)
                                        {
                                            if (groupID > 0 && groupID % TacticalGroupsSettings.SubGroupRowCount == 0)
                                            {
                                                xPos  = initPos;
                                                yPos += list[groupID].GroupIconHeight + 7;
                                            }
                                            pawnGroupDrawLoc.Add(new MappedValue(list[groupID], new Rect(xPos, yPos, list[groupID].GroupIconWidth, list[groupID].GroupIconHeight)));
                                            xPos += list[groupID].GroupIconWidth + 5;
                                        }
                                        list  = list.Take(TacticalGroupsSettings.SubGroupRowCount).ToList();
                                        num7 += list.Sum(x => x.GroupIconWidth + 5);
                                    }
                                }
                            }

                            colonyGroupDrawLoc.Add(new MappedValue(entries[j].colonyGroup, new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY,
                                                                                                    entries[j].colonyGroup.GroupIconWidth, entries[j].colonyGroup.GroupIconHeight)));

                            num7 += entries[j].colonyGroup.GroupIconWidth + entries[j].colonyGroup.GroupIconMargin;
                            if (entries[j].colonyGroup.Map == Find.CurrentMap)
                            {
                                if (!WorldRendererUtility.WorldRenderedNow)
                                {
                                    var list = TacticUtils.GetAllPawnGroupFor(entries[j].colonyGroup);
                                    if (list.Any())
                                    {
                                        list.Reverse();
                                        var initPos = num7;
                                        var xPos    = num7;
                                        var yPos    = TacticalGroupsSettings.ColonistBarPositionY;
                                        for (var groupID = 0; groupID < list.Count(); groupID++)
                                        {
                                            if (groupID > 0 && groupID % TacticalGroupsSettings.GroupRowCount == 0)
                                            {
                                                xPos  = initPos;
                                                yPos += list[groupID].GroupIconHeight + 25;
                                            }
                                            pawnGroupDrawLoc.Add(new MappedValue(list[groupID], new Rect(xPos, yPos, list[groupID].GroupIconWidth, list[groupID].GroupIconHeight)));
                                            xPos += list[groupID].GroupIconWidth + list[groupID].GroupIconMargin;
                                        }
                                        list  = list.Take(TacticalGroupsSettings.GroupRowCount).ToList();
                                        num7 += list.Sum(x => x.GroupIconWidth + x.GroupIconMargin);
                                    }
                                }
                            }
                        }
                    }
                    if (entries[j].colonyGroup != null)
                    {
                        if (entries[j].colonyGroup?.Map == Find.CurrentMap)
                        {
                            createGroupRect     = new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY, Textures.CreateGroupIcon.width, Textures.CreateGroupIcon.height);
                            num7               += Textures.CreateGroupIcon.width + 20f;
                            createGroupAssigned = true;
                        }
                    }
                    else if (!createGroupAssigned)
                    {
                        createGroupRect = new Rect(num7, TacticalGroupsSettings.ColonistBarPositionY, Textures.CreateGroupIcon.width, Textures.CreateGroupIcon.height);
                        num7           += Textures.CreateGroupIcon.width + 20f;
                    }
                    num6 = 0;
                    num5 = entries[j].group;
                }
                else
                {
                    num6++;
                }
                Vector2 drawLoc = GetDrawLoc(num7, TacticalGroupsSettings.ColonistBarPositionY, entries[j].group, num6, scale);
                outDrawLocs.Add(new Rect(drawLoc.x, drawLoc.y, TacticUtils.TacticalColonistBar.Size.x, TacticUtils.TacticalColonistBar.Size.y));
            }
        }