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); }
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(); // } // } //} }
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)); } }