From 16fbbe04362b03e993f97bab5863a206f7166ccb Mon Sep 17 00:00:00 2001 From: Dexter Lowe Date: Thu, 18 Jun 2026 21:33:05 +0100 Subject: [PATCH] Fullscreen UI overhaul: single windowed workspace with live pawn preview Replace the four-window cascade (Dialog_FactionLoadout -> PresetUI -> FactionEditUI -> PawnKindEditUI) with a single fullscreen, paused Dialog_TotalControl driven by a TotalControlController that dispatches to three screens via a top tab strip and a clickable breadcrumb: - Faction View - global settings + preset management + faction list - Faction Edit - two panels: pawnkind list | faction settings - Pawn Edit - three columns: live portrait | category nav | options Pawn Edit reuses the existing Tab/DrawOverride system unchanged and fixes the old shared-scroll bug with a per-category scroll position. Live preview (PreviewPawnController + PawnPreviewWidget) renders the pawn via PortraitsCache, generated through the real pipeline so it matches raid output. It auto-refreshes (debounced) on edits, has rotate/regenerate/ headgear/clothes controls, and disposes throwaway pawns safely so they can never leak into the save. Other changes: - TCEditContext.CurrentFaction replaces the hidden WindowOfType() lookup in SpecificGearDrawer (the one place that could silently regress). - BaselinerDefName moved from FactionEditUI to FactionEdit. - Both entry points (mod-settings button, options-page link) now open Dialog_TotalControl. - Removed the four old window classes and ModCore.SettingsDialog. Data model and XML serialization are unchanged (old presets load as-is); module AddTabs/AddFactionUI contracts preserved. Compiles clean in Debug and Release. In-game verification still pending. Co-Authored-By: Claude Opus 4.8 (1M context) --- 1.6/Assemblies/FactionLoadout.dll | Bin 271872 -> 276480 bytes 1.6/Source/Dialog_XenotypeEdit.cs | 6 +- 1.6/Source/FactionEdit.cs | 3 + 1.6/Source/FactionEditUI.cs | 616 ------------------ 1.6/Source/ModCore.cs | 14 +- .../Patches/OptionListingUtility_Patch.cs | 2 +- 1.6/Source/PawnKindEditUI.cs | 166 ----- 1.6/Source/PresetUI.cs | 224 ------- 1.6/Source/TCEditContext.cs | 17 + 1.6/Source/Tabs/XenotypeTab.cs | 4 +- 1.6/Source/UISupport/Dialog_FactionLoadout.cs | 185 ------ 1.6/Source/UISupport/Dialog_TotalControl.cs | 66 ++ .../DrawSupport/PawnPreviewWidget.cs | 112 ++++ .../DrawSupport/SpecificGearDrawer.cs | 4 +- 1.6/Source/UISupport/PreviewPawnController.cs | 183 ++++++ .../UISupport/Screens/FactionEditScreen.cs | 378 +++++++++++ .../UISupport/Screens/FactionViewScreen.cs | 274 ++++++++ .../UISupport/Screens/PawnEditScreen.cs | 215 ++++++ .../UISupport/TotalControlController.cs | 302 +++++++++ .../English/Keyed/FactionLoadout_Keys.xml | 18 + 20 files changed, 1587 insertions(+), 1202 deletions(-) delete mode 100644 1.6/Source/FactionEditUI.cs delete mode 100644 1.6/Source/PawnKindEditUI.cs delete mode 100644 1.6/Source/PresetUI.cs create mode 100644 1.6/Source/TCEditContext.cs delete mode 100644 1.6/Source/UISupport/Dialog_FactionLoadout.cs create mode 100644 1.6/Source/UISupport/Dialog_TotalControl.cs create mode 100644 1.6/Source/UISupport/DrawSupport/PawnPreviewWidget.cs create mode 100644 1.6/Source/UISupport/PreviewPawnController.cs create mode 100644 1.6/Source/UISupport/Screens/FactionEditScreen.cs create mode 100644 1.6/Source/UISupport/Screens/FactionViewScreen.cs create mode 100644 1.6/Source/UISupport/Screens/PawnEditScreen.cs create mode 100644 1.6/Source/UISupport/TotalControlController.cs diff --git a/1.6/Assemblies/FactionLoadout.dll b/1.6/Assemblies/FactionLoadout.dll index 4b6fd840b0ca6f82130b80ad769cc5f9d7a38dbb..4e79f5dcf4464a70dd65c65dcf4c7d2266bbb4c8 100644 GIT binary patch literal 276480 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 T+T$5|2gEG^E5B<0KMnj1yx&O5 literal 271872 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 x.xenotype.defName, x => x.chance) ?? new Dictionary(); - if (!_edit.xenotypeChances.ContainsKey(FactionEditUI.BaselinerDefName)) - _edit.xenotypeChances.Add(FactionEditUI.BaselinerDefName, _edit.Faction?.Def?.xenotypeSet?.BaselinerChance ?? 1f); + if (!_edit.xenotypeChances.ContainsKey(FactionEdit.BaselinerDefName)) + _edit.xenotypeChances.Add(FactionEdit.BaselinerDefName, _edit.Faction?.Def?.xenotypeSet?.BaselinerChance ?? 1f); } - _edit.xenotypeChances[FactionEditUI.BaselinerDefName] = Math.Max(0f, 1f - _edit.xenotypeChances.Sum(x => x.Key == FactionEditUI.BaselinerDefName ? 0 : x.Value)); + _edit.xenotypeChances[FactionEdit.BaselinerDefName] = Math.Max(0f, 1f - _edit.xenotypeChances.Sum(x => x.Key == FactionEdit.BaselinerDefName ? 0 : x.Value)); // Reserve space for add buttons at bottom. const float addButtonsHeight = 70f; diff --git a/1.6/Source/FactionEdit.cs b/1.6/Source/FactionEdit.cs index e40339a..361486c 100644 --- a/1.6/Source/FactionEdit.cs +++ b/1.6/Source/FactionEdit.cs @@ -13,6 +13,9 @@ namespace FactionLoadout; [HotSwappable] public class FactionEdit : IExposable { + ///

Xenotype defName used to represent the "Baseliner" chance in xenotype edits. + public const string BaselinerDefName = "Baseliner"; + private static readonly Dictionary originalFactionDefs = new(); private static Dictionary<(FactionDef, PawnKindDef), PawnKindDef> factionSpecificPawnKindReplacements = new(); public bool Active = true; diff --git a/1.6/Source/FactionEditUI.cs b/1.6/Source/FactionEditUI.cs deleted file mode 100644 index 6e34f6d..0000000 --- a/1.6/Source/FactionEditUI.cs +++ /dev/null @@ -1,616 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using FactionLoadout.Modules; -using FactionLoadout.Patches; -using FactionLoadout.UISupport; -using FactionLoadout.Util; -using RimWorld; -using RimWorld.Planet; -using UnityEngine; -using Verse; - -namespace FactionLoadout; - -[HotSwappable] -public class FactionEditUI : Window -{ - public static string BaselinerDefName = "Baseliner"; - - public readonly FactionEdit Current; - - private readonly List bin = []; - private FactionDef clonedFac; - private ThingFilterUI.UIState filterState = new(); - private int framesSinceF; - private readonly List pawns = []; - private readonly HashSet tempKinds = []; - private bool _ThingIDPatch = false; - private bool _previewFailed = false; - private Vector2 overridesScrollPos; - private float overridesContentHeight = 10000f; // measured after first frame; init large so nothing clips - - public FactionEditUI(FactionEdit fac) - { - Current = fac; - draggable = true; - resizeable = true; - doCloseX = true; - closeOnCancel = true; - closeOnClickedOutside = false; - } - - public static void OpenEditor(FactionEdit fac) - { - if (fac == null) - return; - - Find.WindowStack.Add(new FactionEditUI(fac)); - } - - public override void PostOpen() - { - base.PostOpen(); - Rect copy = windowRect; - copy.y = 110; - copy.x -= copy.width * 0.5f + 15; - copy.height = 800; - windowRect = copy; - } - - public override void PostClose() - { - base.PostClose(); - - DestroyPawns(); - clonedFac = null; - - Find.WindowStack.WindowOfType()?.Close(); - } - - private void DestroyPawns() - { - foreach (Pawn pawn in pawns) - { - if (pawn == null) - continue; - - if (Find.WorldPawns?.Contains(pawn) == true) - { - Find.WorldPawns.RemoveAndDiscardPawnViaGC(pawn); - } - else if (!pawn.Discarded) - { - Find.WorldPawns?.PassToWorld(pawn, PawnDiscardDecideMode.Discard); - } - } - - pawns.Clear(); - } - - public override void DoWindowContents(Rect inRect) - { - framesSinceF++; - - if (Current == null || Current.DeletedOrClosed) - { - Close(); - return; - } - - Listing_Standard ui = new(); - ui.Begin(inRect); - - // --- Header (always visible) --- - Rect r = ui.GetRect(50); - Widgets.Label(r, $"Faction: {Current.Faction.Def?.LabelCap ?? "None".Translate()}"); - if (Current.Faction.IsMissing) - { - ui.Label($"{"FactionLoadout_FactionMissingEditWarning".Translate()}"); - } - - if (Current.Faction.DefName == Preset.SpecialCreepjoinerFactionDefName) - ui.Label($"{"FactionLoadout_FactionEdit_ExperimentalCreepjoiner".Translate()}"); - if (Current.Faction.DefName == Preset.SpecialWildManFactionDefName) - ui.Label($"{"FactionLoadout_FactionEdit_ExperimentalWildMan".Translate()}"); - if (Current.Faction.DefName == Preset.SpecialFactionlessPawnsFactionDefName) - ui.Label($"{"FactionLoadout_Special_FactionlessWarning".Translate()}"); - - // Disabled for now - // DrawMaterialFilter(ui); - - if (!Current.Faction.IsMissing) - { - DrawFactionClipboardToolbar(ui); - } - - // --- Scrollable overrides --- - // Outer container fills available space (no content dependency = no feedback loop). - // Inner rect uses previous frame's measurement + buffer so content is never clipped. - const float minFooterHeight = 200f; - float scrollOutH = Mathf.Max(60f, inRect.height - ui.CurHeight - minFooterHeight); - Rect scrollOutRect = ui.GetRect(scrollOutH); - float innerH = Mathf.Max(overridesContentHeight + 100f, scrollOutH); - Rect scrollViewRect = new(0f, 0f, scrollOutRect.width - 16f, innerH); - - Widgets.BeginScrollView(scrollOutRect, ref overridesScrollPos, scrollViewRect); - Listing_Standard inner = new(); - inner.Begin(scrollViewRect); - - if ( - inner.ButtonTextLabeled( - "FactionLoadout_Faction_Techlevel".Translate(), - Current.TechLevel?.ToStringHuman() ?? "FactionLoadout_NotOverriden_WithDefault".Translate((Current.Faction?.Def?.techLevel ?? TechLevel.Undefined).ToStringHuman()) - ) - ) - { - IEnumerable enums = Enum.GetValues(typeof(TechLevel)).Cast().Append(null); - FloatMenuUtility.MakeMenu( - enums, - e => e?.ToStringHuman() ?? "FactionLoadout_NotOverriden_WithDefault".Translate((Current.Faction?.Def?.techLevel ?? TechLevel.Undefined).ToStringHuman()), - e => - () => - { - Current.TechLevel = e; - } - ); - } - - if ( - ModsConfig.BiotechActive - && Current.Faction is { IsMissing: false } - && Current.Faction?.Def != Preset.SpecialWildManFaction - && Current.Faction?.Def != Preset.SpecialFactionlessPawnsFaction - ) - { - if (!Current.OverrideFactionXenotypes) - { - Current.xenotypeChances.Clear(); - Current.xenotypeChancesByDef.Clear(); - } - - inner.GapLine(); - string xenoState = Current.OverrideFactionXenotypes - ? "FactionLoadout_Xenotype_ActiveCount".Translate(Current.xenotypeChances.Count) - : "FactionLoadout_Xenotype_Off".Translate(); - if (inner.ButtonTextLabeled("FactionLoadout_EditXenoSpawnRates".Translate(), xenoState)) - Find.WindowStack.Add(new Dialog_XenotypeEdit(Current)); - } - - // --- Spawn Groups section --- - if (Current.Faction is not { IsMissing: true }) - { - inner.GapLine(); - - // Summary row: "Spawn Groups: N groups [Edit Spawn Groups]" - Rect groupsRow = inner.GetRect(28f); - float editBtnW = 160f; - Rect editGroupsBtn = new(groupsRow.xMax - editBtnW, groupsRow.y, editBtnW, 24f); - - Text.Anchor = TextAnchor.MiddleLeft; - string groupsSummary; - int groupCount; - if (Current.PawnGroupMakerEdits != null) - { - groupCount = Current.PawnGroupMakerEdits.Count; - groupsSummary = "FactionLoadout_SpawnGroups_SummaryModified".Translate(groupCount, "FactionLoadout_GroupEditor_NewTag".Translate().ToString().ToLower()); - } - else - { - groupCount = Current?.Faction?.Def?.pawnGroupMakers?.Count ?? 0; - groupsSummary = "FactionLoadout_SpawnGroups_Summary".Translate(groupCount); - } - - Rect summaryLabelRect = new(groupsRow.x, groupsRow.y, groupsRow.width - editBtnW - 4f, groupsRow.height); - GUI.color = Color.grey; - Widgets.Label(summaryLabelRect, "FactionLoadout_SpawnGroups_Label".Translate() + " " + groupsSummary); - GUI.color = Color.white; - Text.Anchor = TextAnchor.UpperLeft; - - if (Widgets.ButtonText(editGroupsBtn, "FactionLoadout_SpawnGroups_EditButton".Translate())) - GroupEditorUI.OpenEditor(Current); - - // Orphan warning (conditional) — lists which pawnkinds are missing from groups - HashSet orphaned = Current?.GetOrphanedKinds() ?? []; - if (orphaned.Count > 0) - { - string names = orphaned.Select(k => k.LabelCap.ToString()).OrderBy(n => n).ToCommaList(); - string warnText = "FactionLoadout_SpawnGroups_OrphanWarning".Translate(names); - float warnH = Text.CalcHeight(warnText, inner.ColumnWidth); - Rect warnRow = inner.GetRect(warnH); - GUI.color = new Color(1f, 0.6f, 0.1f); - Widgets.Label(warnRow, warnText); - GUI.color = Color.white; - } - } - - // Give each active module a chance to add faction-level UI (e.g. a button row). - foreach (ITotalControlModule module in ModuleRegistry.Modules) - { - if (!module.IsActive) - continue; - try - { - module.AddFactionUI(Current, inner); - } - catch (Exception e) - { - ModCore.Error($"Error drawing faction UI for module '{module.ModuleName}'", e); - } - } - - inner.GapLine(); - inner.Label($"{"FactionLoadout_FactionEdit_LoadoutOverrides".Translate()}"); - inner.Gap(); - - HashSet orphanedKinds = Current?.GetOrphanedKinds() ?? []; - foreach (PawnKindEdit edit in Current.KindEdits) - { - Rect rect = inner.GetRect(30); - string delText = "Delete".Translate(); - float delW = Mathf.Max(38, Text.CalcSize(delText).x + 10); - GUI.color = Color.red; - if (Widgets.ButtonText(new Rect(rect.x, rect.y, delW, 24), delText)) - { - bin.Add(edit); - edit.DeletedOrClosed = true; - } - - GUI.color = Color.white; - rect.x += delW + 4; - string editText = "FactionLoadout_Edit".Translate().CapitalizeFirst(); - float editW = Mathf.Max(50, Text.CalcSize(editText).x + 10); - if (Widgets.ButtonText(new Rect(rect.x, rect.y, editW, 24), editText)) - Find.WindowStack.Add(new PawnKindEditUI(edit)); - - rect.x += editW + 4; - if (Widgets.ButtonImageFitted(new Rect(rect.x, rect.y, 24, 24), TexButton.Copy)) - PawnKindClipboard.Copy(edit); - TooltipHandler.TipRegion(new Rect(rect.x, rect.y, 24, 24), "FactionLoadout_Clipboard_CopyTooltip".Translate()); - - rect.x += 28; - if (PawnKindClipboard.HasData) - { - if (Widgets.ButtonImageFitted(new Rect(rect.x, rect.y, 24, 24), TexButton.Paste)) - PawnKindClipboard.PasteAll(edit); - TooltipHandler.TipRegion(new Rect(rect.x, rect.y, 24, 24), "FactionLoadout_Clipboard_PasteAllTooltip".Translate(PawnKindClipboard.GetDescription())); - } - else - { - GUI.color = Color.gray; - Widgets.DrawTextureFitted(new Rect(rect.x, rect.y, 24, 24), TexButton.Paste, 1f); - GUI.color = Color.white; - TooltipHandler.TipRegion(new Rect(rect.x, rect.y, 24, 24), "FactionLoadout_Clipboard_Empty".Translate()); - } - - rect.x += 28; - - // Orphan warning icon - bool isOrphaned = !edit.IsGlobal && edit.Def != null && orphanedKinds.Contains(edit.Def); - if (isOrphaned) - { - GUI.color = Color.yellow; - Widgets.Label(new Rect(rect.x, rect.y, 20f, 24f), "⚠"); - GUI.color = Color.white; - TooltipHandler.TipRegion(new Rect(rect.x, rect.y, 20f, 24f), "FactionLoadout_SpawnGroups_OrphanKindTooltip".Translate()); - rect.x += 22f; - } - - Widgets.Label(rect, $"{(edit.IsGlobal ? $"{"FactionLoadout_GlobalLabel".Translate()}" : edit.Def.LabelCap.ToString())}"); - } - - foreach (PawnKindEdit item in bin) - Current.KindEdits.Remove(item); - bin.Clear(); - - if (!Current.Faction.IsMissing && inner.ButtonText("Add".Translate().CapitalizeFirst() + "...")) - { - IEnumerable MakeKinds() - { - tempKinds.Clear(); - if (!Current.HasGlobalEditor()) - tempKinds.Add(null); - - // Collect all pawnkinds from group edits (if active) or the - // live faction def. When PawnGroupMakerEdits is null, - // GetAllKindDefsForUI delegates to GetAllPawnKinds which already - // includes basicMemberKind and fixedLeaderKinds. - foreach (PawnKindDef kind in Current.GetAllKindDefsForUI()) - { - if (!Current.HasEditFor(kind)) - tempKinds.Add(kind); - } - - // basicMemberKind and fixedLeaderKinds are NOT included in the - // PawnGroupMaker-based path of GetAllKindDefsForUI (those fields - // are not part of any group maker entry). When PawnGroupMakerEdits - // is null the GetAllPawnKinds path already covers them, so only - // add them here when group edits are active to avoid duplicates. - if (Current.PawnGroupMakerEdits != null) - { - if (Current.Faction.Def?.basicMemberKind != null && !Current.HasEditFor(Current.Faction.Def.basicMemberKind)) - tempKinds.Add(Current.Faction.Def.basicMemberKind); - if (Current.Faction.Def?.fixedLeaderKinds != null) - { - foreach (PawnKindDef item in Current.Faction.Def.fixedLeaderKinds) - { - if (!Current.HasEditFor(item)) - tempKinds.Add(item); - } - } - } - - foreach (PawnKindDef item in tempKinds) - yield return item; - - if (tempKinds.Count(k => k != null) == 0) - { - if (Current.Faction.Def == FactionDefOf.Ancients || Current.Faction.Def == FactionDefOf.AncientsHostile) - { - yield return PawnKindDefOf.AncientSoldier; - yield return PawnKindDefOf.Slave; - } - } - - tempKinds.Clear(); - } - - List kinds = MakeKinds().ToList(); - List items = CustomFloatMenu.MakeItems( - kinds, - k => - k != null - ? new MenuItemText(k, $"{k.LabelCap} ({k.defName})", tooltip: k.description) - : new MenuItemText(null, $"{"FactionLoadout_GlobalLabel".Translate()}") - ); - CustomFloatMenu.Open( - items, - raw => - { - PawnKindDef k = raw.GetPayload(); - if (k != null) - { - Current.KindEdits.Add(new PawnKindEdit(k)); - } - else - { - PawnKindDef kind = kinds.FirstOrDefault(pawnKindDef => pawnKindDef != null); - ModCore.Log($"Using {kind} as global base."); - if (kind != null) - Current.KindEdits.Insert(0, new PawnKindEdit(kind) { IsGlobal = true }); - } - } - ); - } - - overridesContentHeight = inner.CurHeight; - inner.End(); - Widgets.EndScrollView(); - - // --- Footer (always visible) --- - ui.GapLine(26); - - if (Prefs.DevMode && clonedFac != null && ui.ButtonText("FactionLoadout_FactionEdit_DebugClonedKinds".Translate())) - foreach (PawnKindDef kind in clonedFac.GetKindDefs()) - { - ModCore.Log($"Kind: {kind.label} ({kind.defName})"); - ModCore.Log($" - Apparel Money: {kind.apparelMoney}"); - if (kind.apparelRequired == null) - continue; - ModCore.Log(" - Apparel required:"); - foreach (ThingDef item in kind.apparelRequired) - ModCore.Log($" * {item?.LabelCap ?? ""}"); - } - - bool isInGame = Verse.Current.Game != null; - - if (!isInGame) - { - ui.Label($"{"FactionLoadout_FactionEdit_PreviewError".Translate()}"); - } - else - { - ui.CheckboxLabeled("FactionLoadout_FactionEdit_ThingIDPatch".Translate(), ref _ThingIDPatch, "FactionLoadout_FactionEdit_ThingIDPatchTooltip".Translate()); - ui.Gap(20); - Rect total = ui.GetRect(inRect.height - ui.CurHeight - 32); - int count = pawns.Count; - - if (count != 0) - { - const float labelH = 26f; - float maxIconH = Mathf.Max(total.height - labelH - 10f, 50f); - float w = Mathf.Min(total.width / count, maxIconH); - for (int i = 0; i < count; i++) - { - Rect pawnArea = new(total.x + i * w, total.y, w, w); - Pawn pawn = pawns[i]; - - if (pawn != null) - Widgets.ThingIcon(pawnArea, pawn); - else - Widgets.DrawTextureFitted(pawnArea, Widgets.CheckboxOffTex, 1f); - - Widgets.DrawHighlightIfMouseover(pawnArea); - TooltipHandler.TipRegion(pawnArea, pawn?.KindLabel?.CapitalizeFirst() ?? ""); - if (Mouse.IsOver(pawnArea) && pawn != null) - { - Pawn p = pawns[i]; - Rect window = windowRect; - window.y += 510; - window.x -= 465 - 40; - window.height = 550; - window.width = 410; - Find.WindowStack.ImmediateWindow( - 90812358, - window, - WindowLayer.Super, - () => - { - var list = - typeof(Selector).GetField("selected", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(Find.Selector) as List - ?? new List(); - list.Clear(); - list.Add(p); - typeof(ITab_Pawn_Gear).GetMethod("FillTab", BindingFlags.Instance | BindingFlags.NonPublic)?.Invoke(new ITab_Pawn_Gear(), []); - list.Clear(); - } - ); - } - - pawnArea.height = 200; - pawnArea.y += w + 10; - if (pawnArea.width >= 50) - Widgets.Label(pawnArea, pawns[i]?.KindLabel.CapitalizeFirst() ?? ""); - } - } - } - - GUI.enabled = isInGame; - bool f = Input.GetKeyDown(KeyCode.F); - if ((ui.ButtonText("FactionLoadout_FactionEdit_RegeneratePreviews".Translate()) || (pawns.Count == 0 && !_previewFailed) || (f && framesSinceF > 20)) && isInGame) - { - if (f) - framesSinceF = 0; - _previewFailed = false; - - FactionDef toClone = FactionEdit.TryGetOriginal(Current.Faction.Def.defName) ?? Current.Faction.Def; - clonedFac = CloningUtility.Clone(toClone); - clonedFac.defName = Current.Faction.Def.defName; - clonedFac.humanlikeFaction = Current.Faction.Def.humanlikeFaction; - clonedFac.fixedName = $"TEMP FACTION CLONE ({clonedFac.defName})"; - - Current.Apply(clonedFac, false); - DestroyPawns(); - - Faction faction = new() - { - def = clonedFac, - loadID = -1, - colorFromSpectrum = Rand.Range(0f, 1f), - hidden = true, - ideos = Find.FactionManager?.FirstFactionOfDef(Current.Faction.Def)?.ideos, - Name = clonedFac.fixedName, - relations = Find - .FactionManager.AllFactionsVisible.Select(otherFaction => new FactionRelation - { - other = otherFaction, - baseGoodwill = 0, - kind = FactionRelationKind.Neutral, - }) - .ToList(), - temporary = true, - deactivated = true, - }; - - ThingIDPatch.Active = _ThingIDPatch; - IdeoUtilityPatch.Active = true; - FactionUtilityPawnGenPatch.Active = true; - - foreach (PawnKindDef item in FactionEdit.GetAllPawnKinds(clonedFac)) - try - { - Pawn pawn = PawnGenerator.GeneratePawn( - new PawnGenerationRequest(item, faction) - { - ForceGenerateNewPawn = true, - AllowDowned = false, - AllowDead = false, - CanGeneratePawnRelations = false, - RelationWithExtraPawnChanceFactor = 0, - ColonistRelationChanceFactor = 0, - ForceNoIdeo = true, - ForbidAnyTitle = true, - } - ); - pawns.Add(pawn); - } - catch (Exception e) - { - ModCore.Error($"Failed to generate pawn of type '{item.LabelCap}':", e); - pawns.Add(null); - } - - Find.FactionManager.Remove(faction); - - ThingIDPatch.Active = false; - FactionLeaderPatch.Active = false; - FactionUtilityPawnGenPatch.Active = false; - IdeoUtilityPatch.Active = false; - } - - GUI.enabled = true; - ui.End(); - } - - private void DrawFactionClipboardToolbar(Listing_Standard ui) - { - Rect toolbar = ui.GetRect(28f); - float x = toolbar.x; - float y = toolbar.y; - const float btnSize = 24f; - const float gap = 4f; - - if (Widgets.ButtonImageFitted(new Rect(x, y, btnSize, btnSize), TexButton.Copy)) - FactionEditClipboard.Copy(Current); - TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_FactionClipboard_CopyTooltip".Translate()); - - x += btnSize + gap; - if (FactionEditClipboard.HasData) - { - if (Widgets.ButtonImageFitted(new Rect(x, y, btnSize, btnSize), TexButton.Paste)) - FactionEditClipboard.PasteAll(Current); - TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_FactionClipboard_PasteTooltip".Translate(FactionEditClipboard.GetDescription())); - } - else - { - GUI.color = Color.gray; - Widgets.DrawTextureFitted(new Rect(x, y, btnSize, btnSize), TexButton.Paste, 1f); - GUI.color = Color.white; - TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_Clipboard_Empty".Translate()); - } - } - - private void DrawMaterialFilter(Listing_Standard ui) - { - Rect matRect = ui.GetRect(28); - matRect.width = 300; - if ( - Widgets.ButtonText( - matRect, - $"{"FactionLoadout_FactionEdit_CustomMaterials".Translate()}{(Current.ApparelStuffFilter == null ? $"{"No".Translate()}" : $"{"Yes".Translate()}")}" - ) - ) - { - filterState = new ThingFilterUI.UIState(); - - if (Current.ApparelStuffFilter != null) - { - Current.ApparelStuffFilter = null; - } - else - { - Current.ApparelStuffFilter = new ThingFilter(); - if (Current.Faction.Def.apparelStuffFilter != null) - Current.ApparelStuffFilter.CopyAllowancesFrom(Current.Faction.Def.apparelStuffFilter); - } - } - - if (Current.ApparelStuffFilter == null) - return; - Rect filter = ui.GetRect(240); - ThingFilterUI.DoThingFilterConfigWindow( - filter, - filterState, - Current.ApparelStuffFilter, - forceHideHitPointsConfig: true, - forceHiddenFilters: - [ - SpecialThingFilterDefOf.AllowDeadmansApparel, - SpecialThingFilterDefOf.AllowNonDeadmansApparel, - SpecialThingFilterDefOf.AllowFresh, - DefDatabase.GetNamed("AllowRotten"), - ] - ); - } -} diff --git a/1.6/Source/ModCore.cs b/1.6/Source/ModCore.cs index d3b5546..37dfcea 100644 --- a/1.6/Source/ModCore.cs +++ b/1.6/Source/ModCore.cs @@ -12,9 +12,7 @@ namespace FactionLoadout; public class ModCore : Mod { - public Dialog_FactionLoadout settingsDialog = null; public static MySettings Settings; - public Dialog_FactionLoadout SettingsDialog => settingsDialog ??= new Dialog_FactionLoadout(); public static void Debug(string msg) { @@ -54,7 +52,17 @@ public override string SettingsCategory() public override void DoSettingsWindowContents(Rect inRect) { - SettingsDialog.DoWindowContents(inRect); + Listing_Standard ui = new(); + ui.Begin(inRect); + ui.Label("FactionLoadout_Settings_LauncherBlurb".Translate()); + ui.Gap(); + if (ui.ButtonText("FactionLoadout_Open".Translate())) + { + Find.WindowStack.Add(new Dialog_TotalControl()); + Find.WindowStack.WindowOfType()?.Close(); + Find.WindowStack.WindowOfType()?.Close(); + } + ui.End(); } private void LoadLate() diff --git a/1.6/Source/Patches/OptionListingUtility_Patch.cs b/1.6/Source/Patches/OptionListingUtility_Patch.cs index 0c8358f..9d7ec1e 100644 --- a/1.6/Source/Patches/OptionListingUtility_Patch.cs +++ b/1.6/Source/Patches/OptionListingUtility_Patch.cs @@ -19,7 +19,7 @@ public static void DrawOptionListing_Patch(ref List optList) "FactionLoadout_SettingName".Translate(), delegate { - Find.WindowStack.Add(new Dialog_FactionLoadout()); + Find.WindowStack.Add(new Dialog_TotalControl()); }, Textures.TC_Link ) diff --git a/1.6/Source/PawnKindEditUI.cs b/1.6/Source/PawnKindEditUI.cs deleted file mode 100644 index f493ab0..0000000 --- a/1.6/Source/PawnKindEditUI.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using FactionLoadout.Modules; -using FactionLoadout.UISupport; -using FactionLoadout.UISupport.DrawSupport; -using FactionLoadout.Util; -using RimWorld; -using UnityEngine; -using Verse; - -namespace FactionLoadout; - -[HotSwappable] -public class PawnKindEditUI : Window -{ - public readonly PawnKindEdit Current; - - private readonly Dictionary tabHeights = new(); - private Vector2 globalScroll; - private int selectedTab; - private List tabs; - - public PawnKindDef DefaultKind - { - get - { - if (Current.DeletedOrClosed) - return Current.Def; - - FactionDef found = FactionEdit.TryGetOriginal(Current.ParentEdit.Faction.DefName); - if (found == null) - return Current.Def; - PawnKindDef found2 = found.GetKindDefs().FirstOrDefault(k => k.defName == Current.Def.defName); - return found2 ?? Current.Def; - } - } - - public PawnKindEditUI(PawnKindEdit toEdit) - { - draggable = true; - resizeable = true; - doCloseX = true; - Current = toEdit; - - DefCache.ScanDefs(); - } - - public override void PostOpen() - { - base.PostOpen(); - windowRect = new Rect(UI.screenWidth * 0.5f, 30, UI.screenWidth * 0.5f - 20, UI.screenHeight - 50); - } - - public override void DoWindowContents(Rect inRect) - { - if (Current == null || Current.DeletedOrClosed) - { - Close(); - return; - } - - Text.Font = GameFont.Small; - - if (tabs == null) - BuildTabs(); - - if ((tabs?.Count ?? 0) == 0) - { - Widgets.Label(inRect, "FactionLoadout_NoEditableProperties".Translate()); - return; - } - - Rect titleArea = inRect; - titleArea.height = 40; - string title = - $"Pawn Type: {(Current.IsGlobal ? "FactionLoadout_GlobalLabel".Translate().ToString() : Current.Def.LabelCap.ToString())}"; - Widgets.Label(titleArea, title); - - Rect tabRect = inRect; - float tabRows = (float)Math.Ceiling(tabs.Count / 5f); - tabRect.height = tabRows * 50 + 50; - tabRect.y += 50; - - for (int i = 0; i < tabs.Count; i++) - { - float row = (float)Math.Floor(i / 5f); - if (row > 0 && i % 5 == 0) - { - tabRect.ExpandedBy(0, 50f); - tabRect.yMin += 50; - } - - Rect button = tabRect; - button.height = 40; - button.width = 140; - button.x += 150 * (i - 5 * row); - - Tab tab = tabs[i]; - Color bg = selectedTab == i ? new Color32(49, 82, 133, 255) : new Color(0.2f, 0.2f, 0.2f, 1f); - if (Widgets.CustomButtonText(ref button, $"{tab.Name}", bg, Color.white, Color.white)) - selectedTab = i; - - if (selectedTab != i) - continue; - - float toolbarY = inRect.y + 100 + 50 * (tabRows - 1); - ClipboardToolbar.Draw( - new Rect(inRect.x, toolbarY, inRect.width, 28), - Current, - () => - { - if (selectedTab >= 0 && selectedTab < tabs.Count && tabs[selectedTab] is EditTab et) - et.ResetBuffers(); - } - ); - - Rect contentArea = inRect; - contentArea.yMin += 100 + 50 * (tabRows - 1) + 32; - float tabContentH = tabHeights.TryGetValue(tab, out float storedH) ? Mathf.Max(storedH, contentArea.height) : contentArea.height; - Widgets.BeginScrollView(contentArea, ref globalScroll, new Rect(0, 0, inRect.width - 24, tabContentH)); - - Listing_Standard ui = new() { ColumnWidth = inRect.width - 24 }; - ui.Begin(new Rect(0, 0, inRect.width - 24, 1000000)); - - tab.Draw(ui); - - tabHeights[tab] = ui.CurHeight; - ui.End(); - Widgets.EndScrollView(); - } - } - - private void BuildTabs() - { - PawnKindDef dk = DefaultKind; - tabs = [new GeneralTab(Current, dk)]; - - bool isAnimal = dk.RaceProps.Animal; - if (!isAnimal) - { - tabs.AddRange([ - new BackstoryTab(Current, dk), - new AppearanceTab(Current, dk), - new ApparelTab(Current, dk), - new WeaponTab(Current, dk), - new ImplantsTab(Current, dk), - new InventoryTab(Current, dk), - new RaidPointsTab(Current, dk), - new RaidLootTab(Current, dk), - ]); - if (VFEAncientsReflectionModule.ModLoaded.Value) - tabs.Add(new AncientsTab(Current, dk)); - if (VEPsycastsReflectionModule.ModLoaded.Value) - tabs.Add(new PsycastsTab(Current, dk)); - if (ModsConfig.BiotechActive) - tabs.Add(new XenotypeTab(Current, dk)); - - foreach (ITotalControlModule module in ModuleRegistry.Modules) - { - if (module.IsActive) - module.AddTabs(Current, dk, tabs); - } - } - } -} diff --git a/1.6/Source/PresetUI.cs b/1.6/Source/PresetUI.cs deleted file mode 100644 index ee58fcd..0000000 --- a/1.6/Source/PresetUI.cs +++ /dev/null @@ -1,224 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using FactionLoadout.UISupport; -using RimWorld; -using UnityEngine; -using Verse; - -namespace FactionLoadout; - -public class PresetUI : Window -{ - public static void OpenEditor(Preset pre) - { - if (pre == null) - return; - - Find.WindowStack.Add(new PresetUI(pre)); - } - - public readonly Preset Current; - - private Vector2 scroll; - - public PresetUI(Preset pre) - { - Current = pre; - draggable = true; - resizeable = true; - doCloseX = false; - closeOnCancel = false; - closeOnCancel = false; - closeOnClickedOutside = false; - } - - public override void PostOpen() - { - base.PostOpen(); - - windowRect = new Rect(20, 110, Mathf.Max(UI.screenWidth * 0.5f - 550, 450), 1000); - } - - public override void PostClose() - { - base.PostClose(); - Find.WindowStack.WindowOfType()?.Close(); - } - - public override void DoWindowContents(Rect inRect) - { - if (Current == null) - { - Close(); - return; - } - - Listing_Standard ui = new(); - ui.Begin(inRect); - - Rect rect = ui.GetRect(50); - Widgets.Label(rect, $"Preset: {Current.Name}"); - - Rect buttonsRect = ui.GetRect(32); - - // Save button - Rect button = buttonsRect; - button.x = Mathf.Lerp(button.x, button.xMax, 0f); - button.width *= 0.3f; - button = button.ExpandedBy(-2f, -5f); - GUI.color = Color.green; - string saveLabel = Current.IsPackaged ? "FactionLoadout_SaveToSourceFile".Translate().ToString() : "Save".Translate().ToString().ToUpper(); - if (Widgets.ButtonText(button, $"{saveLabel}")) - Current.Save(); - - // Save & exit - button = buttonsRect; - button.x = Mathf.Lerp(button.x, button.xMax, 1f / 3f); - button.width *= 0.3f; - button = button.ExpandedBy(-2f, -5f); - if (Widgets.ButtonText(button, $"{"FactionLoadout_Preset_SaveAndExit".Translate()}")) - { - Current.Save(); - Close(); - } - - // Exit button. - GUI.color = Color.Lerp(Color.white, Color.red, 0.65f); - button = buttonsRect; - button.x = Mathf.Lerp(button.x, button.xMax, 2f / 3f); - button.width *= 0.3f; - button = button.ExpandedBy(-2f, -5f); - if (Widgets.ButtonText(button, $"{"Close".Translate().ToString().ToUpper()}")) - Close(); - - GUI.color = Color.white; - ui.GapLine(); - - if (Current.IsPackaged) - { - Rect warningRect = ui.GetRect(44); - Widgets.DrawBoxSolid(warningRect, new Color(0.45f, 0.35f, 0.05f, 0.85f)); - warningRect = warningRect.ContractedBy(6f); - Widgets.Label(warningRect, "FactionLoadout_PackagedPresetWarning".Translate(Current.PackagedModName).ToString()); - } - - // Missing faction handling. - if (Current.HasMissingFactions()) - { - ui.Label($"{"FactionLoadout_Preset_MissingWarning".Translate()}"); - ui.Label($"{"FactionLoadout_Preset_MissingHeader".Translate()}"); - ui.GapLine(); - foreach (string str in Current.GetMissingFactionAndModNames()) - ui.Label($" - {str}"); - } - - Rect nameArea = ui.GetRect(28); - nameArea.width = 200; - Widgets.Label(nameArea, "FactionLoadout_Preset_EditName".Translate()); - nameArea.x += 80; - nameArea.height -= 5; - Current.Name = Widgets.TextField(nameArea, Current.Name); - - ui.Label($"{"FactionLoadout_Preset_EditCount".Translate(Current.factionChanges.Count)}"); - ui.Gap(); - - float factionListHeight = Mathf.Max(100f, inRect.height - ui.CurHeight - 60f); - Widgets.BeginScrollView(ui.GetRect(factionListHeight), ref scroll, new Rect(0, 0, inRect.width - 20, Current.factionChanges.Count * (28 * 2 + 10))); - - Listing_Standard oldUI = ui; - ui = new Listing_Standard(); - ui.Begin(new Rect(0, 0, inRect.width - 20, 99999)); - - for (int i = 0; i < Current.factionChanges.Count; i++) - { - FactionEdit item = Current.factionChanges[i]; - Rect area = ui.GetRect(28); - Widgets.Label(area, $"{item.Faction.LabelCap} ({item.Faction.DefName})"); - - area = ui.GetRect(28); - area.width = 80; - area.y -= 5; - GUI.color = Color.red; - string deleteLabel = $"[{"Delete".Translate()}]"; - area.width = Mathf.Max(80, Text.CalcSize(deleteLabel).x + 10); - if (Widgets.ButtonText(area, deleteLabel)) - { - item.DeletedOrClosed = true; - Current.factionChanges.RemoveAt(i); - i--; - continue; - } - - GUI.color = Color.white; - - area.x += area.width + 10; - if (item.Faction.IsMissing) - { - area.width = 120; - GUI.color = new Color(1f, 0.75f, 0.2f); - if (Widgets.ButtonText(area, "FactionLoadout_EditAnyway".Translate())) - FactionEditUI.OpenEditor(item); - GUI.color = Color.white; - area.x += 130; - area.width = inRect.width - 20 - area.x; - GUI.color = new Color(1f, 0.4f, 0.4f); - Widgets.Label(area, "FactionLoadout_FactionMissing".Translate()); - GUI.color = Color.white; - } - else - { - string editLabel = "FactionLoadout_Edit".Translate().CapitalizeFirst(); - area.width = Mathf.Max(80, Text.CalcSize(editLabel).x + 10); - if (Widgets.ButtonText(area, editLabel)) - FactionEditUI.OpenEditor(item); - area.x += area.width + 10; - Widgets.CheckboxLabeled(area, "Enabled".Translate(), ref item.Active, placeCheckboxNearText: true); - } - - ui.GapLine(10); - } - - ui.End(); - Widgets.EndScrollView(); - ui = oldUI; - - ui.Gap(); - if (ui.ButtonText("FactionLoadout_Preset_AddFactionEdit".Translate())) - { - List raw = DefDatabase.AllDefsListForReading.Where(f => !Current.HasEditFor(f)).ToList(); - if (!Current.HasEditFor(Preset.SpecialCreepjoinerFaction) && !raw.Any(f => f.defName == Preset.SpecialCreepjoinerFaction.defName)) - { - raw.Add(Preset.SpecialCreepjoinerFaction); - } - if (!Current.HasEditFor(Preset.SpecialWildManFaction) && !raw.Any(f => f.defName == Preset.SpecialWildManFaction.defName)) - { - raw.Add(Preset.SpecialWildManFaction); - } - if ( - Preset.FactionlessPawnKindsSet.Count > 0 - && !Current.HasEditFor(Preset.SpecialFactionlessPawnsFaction) - && !raw.Any(f => f.defName == Preset.SpecialFactionlessPawnsFaction.defName) - ) - { - raw.Add(Preset.SpecialFactionlessPawnsFaction); - } - List items = CustomFloatMenu.MakeItems( - raw, - f => new MenuItemText(f, $"{f.LabelCap} ({f.defName})", DefUtils.TryGetIcon(f, out Color c), c, f.description) - ); - - CustomFloatMenu.Open( - items, - menuItemBase => - { - FactionDef e = menuItemBase.GetPayload(); - - FactionEdit edit = new() { Faction = e }; - Current.factionChanges.Add(edit); - } - ); - } - - ui.End(); - } -} diff --git a/1.6/Source/TCEditContext.cs b/1.6/Source/TCEditContext.cs new file mode 100644 index 0000000..7933af8 --- /dev/null +++ b/1.6/Source/TCEditContext.cs @@ -0,0 +1,17 @@ +namespace FactionLoadout; + +/// +/// Ambient "currently being edited" context for the fullscreen Total Control UI. +/// +/// Some draw helpers (notably SpecificGearDrawer) historically resolved the +/// active faction by looking for a FactionEditUI window on the WindowStack. The +/// fullscreen shell renders the equivalent screens without that window present, so it +/// publishes the faction being edited here instead. The old windows fall back to this +/// too, so both UIs work during the transition. +/// +/// Set when a faction is opened in the shell; cleared when the shell closes. +/// +public static class TCEditContext +{ + public static FactionEdit CurrentFaction; +} diff --git a/1.6/Source/Tabs/XenotypeTab.cs b/1.6/Source/Tabs/XenotypeTab.cs index ad196f3..db977f0 100644 --- a/1.6/Source/Tabs/XenotypeTab.cs +++ b/1.6/Source/Tabs/XenotypeTab.cs @@ -27,8 +27,8 @@ protected override void DrawContents(Listing_Standard ui) if (Current.ForcedXenotypeChances.NullOrEmpty()) { Current.ForcedXenotypeChances = Current.Def?.xenotypeSet?.xenotypeChances?.ToDictionary(x => x.xenotype.defName, x => x.chance) ?? new Dictionary(); - if (!Current.ForcedXenotypeChances.ContainsKey(FactionEditUI.BaselinerDefName)) - Current.ForcedXenotypeChances.Add(FactionEditUI.BaselinerDefName, Current.Def?.xenotypeSet?.BaselinerChance ?? 1f); + if (!Current.ForcedXenotypeChances.ContainsKey(FactionEdit.BaselinerDefName)) + Current.ForcedXenotypeChances.Add(FactionEdit.BaselinerDefName, Current.Def?.xenotypeSet?.BaselinerChance ?? 1f); } foreach (string key in Current.ForcedXenotypeChances.Keys.ToList()) diff --git a/1.6/Source/UISupport/Dialog_FactionLoadout.cs b/1.6/Source/UISupport/Dialog_FactionLoadout.cs deleted file mode 100644 index 969b1b3..0000000 --- a/1.6/Source/UISupport/Dialog_FactionLoadout.cs +++ /dev/null @@ -1,185 +0,0 @@ -using System; -using System.Collections.Generic; -using RimWorld; -using UnityEngine; -using Verse; - -namespace FactionLoadout.UISupport; - -public class Dialog_FactionLoadout : Window -{ - public override Vector2 InitialSize => new Vector2(800f, 600f); - public Vector2 scrollPosition = Vector2.zero; - - public Dialog_FactionLoadout() - { - doCloseButton = true; - closeOnAccept = true; - closeOnCancel = true; - doCloseX = true; - forcePause = true; - absorbInputAroundWindow = true; - } - - public override void DoWindowContents(Rect inRect) - { - int presetHeight = (Preset.LoadedPresets.Count + 1) * 30; - int restHeight = 300; // Adjust this value as needed - - float scrollViewHeight = presetHeight + restHeight; - - Rect viewRect = new Rect(0, 0, inRect.width - 20, scrollViewHeight); - Rect viewPortRect = new Rect(0, 30, inRect.width, inRect.height - 70); - scrollPosition = GUI.BeginScrollView(viewPortRect, scrollPosition, viewRect); - Listing_Standard ui = new Listing_Standard(); - - try - { - ui.Begin(viewRect); - - ui.Label("FactionLoadout_Settings_FactionPresetDesc".Translate()); - ui.GapLine(); - - ui.CheckboxLabeled( - "FactionLoadout_Settings_VanillaRestrictions".Translate(), - ref MySettings.VanillaRestrictions, - "FactionLoadout_Settings_VanillaRestrictionsDesc".Translate() - ); - ui.GapLine(); - ui.CheckboxLabeled("FactionLoadout_Settings_Verbose".Translate(), ref MySettings.VerboseLogging, "FactionLoadout_Settings_VerboseDesc".Translate()); - ui.CheckboxLabeled( - "FactionLoadout_Settings_PatchKindInRequests".Translate(), - ref MySettings.PatchKindInRequests, - "FactionLoadout_Settings_PatchKindInRequestsDesc".Translate() - ); - ui.GapLine(); - ui.Label("FactionLoadout_Settings_FactionPresetDesc".Translate()); - ui.GapLine(); - - bool deleteMode = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); - Preset toDelete = null; - - foreach (Preset preset in Preset.LoadedPresets) - { - Rect area = ui.GetRect(30); - area.width = 80; - - bool active = MySettings.ActivePreset == preset.GUID; - - GUI.color = active ? Color.green : Color.red; - bool currentActive = active; - Widgets.CheckboxLabeled(area, "FactionLoadout_Active".Translate().CapitalizeFirst(), ref active, placeCheckboxNearText: true); - if (currentActive != active) - { - MySettings.ActivePreset = active ? preset.GUID : null; - ModCore.Settings.Write(); - } - - GUI.color = Color.white; - area.x += 90; - - if (preset.IsPackaged) - { - GUI.color = new Color(1f, 0.75f, 0.2f); - if (Widgets.ButtonText(area, "FactionLoadout_PackagedLabel".Translate().CapitalizeFirst())) - { - Preset capturedPreset = preset; - List options = - [ - new FloatMenuOption( - "FactionLoadout_CopyToMyPresets".Translate(), - () => - { - try - { - Preset copy = Preset.CreateCopy(capturedPreset); - Preset.AddNewPreset(copy); - copy.Save(); - PresetUI.OpenEditor(copy); - Find.WindowStack.WindowOfType()?.Close(); - Find.WindowStack.WindowOfType()?.Close(); - } - catch (Exception ex) - { - ModCore.Error("Failed to copy packaged preset.", ex); - } - } - ), - new FloatMenuOption( - "FactionLoadout_EditSourceFile".Translate(), - () => - { - PresetUI.OpenEditor(capturedPreset); - Find.WindowStack.WindowOfType()?.Close(); - Find.WindowStack.WindowOfType()?.Close(); - } - ), - ]; - Find.WindowStack.Add(new FloatMenu(options)); - } - GUI.color = Color.white; - - area.x += 90; - area.width = 9999; - Widgets.Label(area, $"{preset.Name} ({preset.PackagedModName})"); - } - else - { - GUI.color = deleteMode ? Color.red : Color.white; - if (Widgets.ButtonText(area, deleteMode ? "Delete".Translate().CapitalizeFirst() : "FactionLoadout_Edit".Translate().CapitalizeFirst())) - { - if (!deleteMode) - { - PresetUI.OpenEditor(preset); - Find.WindowStack.WindowOfType()?.Close(); - Find.WindowStack.WindowOfType()?.Close(); - } - else - { - toDelete = preset; - } - } - - GUI.color = Color.white; - - area.x += 90; - area.width = 9999; - Widgets.Label(area, preset.Name); - } - } - - if (toDelete != null) - Preset.DeletePreset(toDelete); - - if (Preset.LoadedPresets.EnumerableNullOrEmpty()) - ui.Label("FactionLoadout_NothingHere".Translate()); - - ui.GapLine(); - if (ui.ButtonText("FactionLoadout_CreateNewPreset".Translate())) - { - Preset preset = new(); - Preset.AddNewPreset(preset); - preset.Save(); - - MySettings.ActivePreset = preset.GUID; - - PresetUI.OpenEditor(preset); - - Find.WindowStack.WindowOfType()?.Close(); - Find.WindowStack.WindowOfType()?.Close(); - } - } - finally - { - ui.End(); - GUI.EndScrollView(); - } - } - - public override void PostClose() - { - base.PostClose(); - Find.WindowStack.WindowOfType()?.Close(); - ModCore.Settings.Write(); - } -} diff --git a/1.6/Source/UISupport/Dialog_TotalControl.cs b/1.6/Source/UISupport/Dialog_TotalControl.cs new file mode 100644 index 0000000..e5d1ffb --- /dev/null +++ b/1.6/Source/UISupport/Dialog_TotalControl.cs @@ -0,0 +1,66 @@ +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport; + +/// +/// The single fullscreen, paused workspace that replaces the old window cascade +/// (Dialog_FactionLoadout -> PresetUI -> FactionEditUI -> PawnKindEditUI). All +/// navigation and screen drawing is delegated to . +/// +[HotSwappable] +public class Dialog_TotalControl : Window +{ + public readonly TotalControlController Controller; + + public Dialog_TotalControl(Preset preset = null) + { + forcePause = true; + doCloseX = true; + absorbInputAroundWindow = true; + closeOnAccept = false; // Enter is used by text fields; must not close the window. + closeOnCancel = true; // Esc: handled by OnCancelKeyPressed (step back), closes from Home. + closeOnClickedOutside = false; + draggable = false; + resizeable = false; + preventCameraMotion = true; + + Controller = new TotalControlController(this, preset); + } + + public override Vector2 InitialSize => new(UI.screenWidth * 0.96f, UI.screenHeight * 0.96f); + + public override float Margin => 12f; + + public override void PostOpen() + { + base.PostOpen(); + float w = UI.screenWidth * 0.96f; + float h = UI.screenHeight * 0.96f; + windowRect = new Rect((UI.screenWidth - w) / 2f, (UI.screenHeight - h) / 2f, w, h); + } + + public override void DoWindowContents(Rect inRect) + { + Controller.Draw(inRect); + } + + public override void OnCancelKeyPressed() + { + // Esc steps back one screen; only closes the window once at Home. + if (Controller.HandleEscape()) + { + Event.current.Use(); + return; + } + + base.OnCancelKeyPressed(); + } + + public override void PostClose() + { + base.PostClose(); + Controller.Dispose(); + ModCore.Settings.Write(); + } +} diff --git a/1.6/Source/UISupport/DrawSupport/PawnPreviewWidget.cs b/1.6/Source/UISupport/DrawSupport/PawnPreviewWidget.cs new file mode 100644 index 0000000..e7ba9d8 --- /dev/null +++ b/1.6/Source/UISupport/DrawSupport/PawnPreviewWidget.cs @@ -0,0 +1,112 @@ +using System; +using RimWorld; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport.DrawSupport; + +/// +/// Draws the big live pawn portrait plus its control strip (rotate, regenerate, and +/// headgear/clothes toggles). Pure drawing + view state; the expensive pawn lifecycle +/// lives in . +/// +public class PawnPreviewWidget +{ + private Rot4 rotation = Rot4.South; + private bool renderHeadgear = true; + private bool renderClothes = true; + + public void Draw(Rect inRect, PreviewPawnController controller) + { + Widgets.DrawMenuSection(inRect); + Rect content = inRect.ContractedBy(8f); + + const float stripH = 92f; + Rect portraitArea = new(content.x, content.y, content.width, content.height - stripH - 4f); + Rect strip = new(content.x, portraitArea.yMax + 4f, content.width, stripH); + + DrawPortrait(portraitArea, controller); + DrawControls(strip, controller); + } + + private void DrawPortrait(Rect area, PreviewPawnController controller) + { + if (!controller.InGame) + { + DrawCentered(area, $"{"FactionLoadout_FactionEdit_PreviewError".Translate()}"); + return; + } + if (controller.PreviewFailed) + { + DrawCentered(area, $"{"FactionLoadout_Preview_Failed".Translate()}"); + return; + } + if (controller.PreviewPawn == null) + { + DrawCentered(area, "FactionLoadout_Preview_Placeholder".Translate()); + return; + } + + // Centered portrait-aspect sub-rect so the pawn fills nicely without distortion. + const float aspect = 0.7f; // width / height + float w = Mathf.Min(area.width, area.height * aspect); + float h = w / aspect; + if (h > area.height) + { + h = area.height; + w = h * aspect; + } + Rect portrait = new(area.x + (area.width - w) / 2f, area.y + (area.height - h) / 2f, w, h); + + try + { + RenderTexture tex = PortraitsCache.Get( + controller.PreviewPawn, + new Vector2(portrait.width, portrait.height), + rotation, + default, + 1f, + supersample: true, + compensateForUIScale: true, + renderHeadgear, + renderClothes + ); + GUI.DrawTexture(portrait, tex); + } + catch (Exception e) + { + ModCore.Error("Failed to render preview portrait.", e); + controller.MarkFailed(); + } + } + + private void DrawControls(Rect strip, PreviewPawnController controller) + { + // Row 1: rotate ◀ / regenerate / rotate ▶ + Rect row1 = new(strip.x, strip.y, strip.width, 30f); + float rotW = 40f; + if (Widgets.ButtonText(new Rect(row1.x, row1.y, rotW, row1.height), "◀")) + rotation = rotation.Rotated(RotationDirection.Counterclockwise); + if (Widgets.ButtonText(new Rect(row1.xMax - rotW, row1.y, rotW, row1.height), "▶")) + rotation = rotation.Rotated(RotationDirection.Clockwise); + Rect regenRect = new(row1.x + rotW + 4f, row1.y, row1.width - 2 * (rotW + 4f), row1.height); + if (Widgets.ButtonText(regenRect, "FactionLoadout_Preview_Regenerate".Translate())) + controller.RequestRegenerate(); + + // Row 2: headgear / clothes toggles + Rect row2 = new(strip.x, row1.yMax + 6f, strip.width, 24f); + Rect half1 = new(row2.x, row2.y, row2.width / 2f - 4f, row2.height); + Rect half2 = new(row2.x + row2.width / 2f + 4f, row2.y, row2.width / 2f - 4f, row2.height); + Widgets.CheckboxLabeled(half1, "FactionLoadout_Preview_ShowHeadgear".Translate(), ref renderHeadgear); + Widgets.CheckboxLabeled(half2, "FactionLoadout_Preview_ShowClothes".Translate(), ref renderClothes); + } + + private static void DrawCentered(Rect area, string text) + { + Text.Anchor = TextAnchor.MiddleCenter; + GUI.color = new Color(1f, 1f, 1f, 0.7f); + Widgets.Label(area, text); + GUI.color = Color.white; + Text.Anchor = TextAnchor.UpperLeft; + } +} diff --git a/1.6/Source/UISupport/DrawSupport/SpecificGearDrawer.cs b/1.6/Source/UISupport/DrawSupport/SpecificGearDrawer.cs index 0a085bc..fb8cada 100644 --- a/1.6/Source/UISupport/DrawSupport/SpecificGearDrawer.cs +++ b/1.6/Source/UISupport/DrawSupport/SpecificGearDrawer.cs @@ -204,7 +204,7 @@ private static void DrawItemMaterial(Rect area, SpecRequirementEdit item) if (item.Material == null) { - FactionDef faction = Find.WindowStack.WindowOfType()?.Current?.Faction?.Def; + FactionDef faction = TCEditContext.CurrentFaction?.Faction?.Def; TechLevel techLevel = MySettings.VanillaRestrictions ? faction?.techLevel ?? TechLevel.Undefined : TechLevel.Undefined; item.Material = GenStuff.AllowedStuffsFor(item.Thing, techLevel).FirstOrDefault(); } @@ -212,7 +212,7 @@ private static void DrawItemMaterial(Rect area, SpecRequirementEdit item) Widgets.DrawHighlightIfMouseover(material); if (Widgets.ButtonInvisible(material)) { - FactionDef faction = Find.WindowStack.WindowOfType()?.Current?.Faction?.Def; + FactionDef faction = TCEditContext.CurrentFaction?.Faction?.Def; TechLevel techLevel = MySettings.VanillaRestrictions ? faction?.techLevel ?? TechLevel.Undefined : TechLevel.Undefined; IEnumerable defs = GenStuff.AllowedStuffsFor(item.Thing, techLevel); List stuffItems = CustomFloatMenu.MakeItems( diff --git a/1.6/Source/UISupport/PreviewPawnController.cs b/1.6/Source/UISupport/PreviewPawnController.cs new file mode 100644 index 0000000..c78d74d --- /dev/null +++ b/1.6/Source/UISupport/PreviewPawnController.cs @@ -0,0 +1,183 @@ +using System; +using System.Linq; +using FactionLoadout.Patches; +using FactionLoadout.Util; +using RimWorld; +using RimWorld.Planet; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport; + +/// +/// Owns the live preview pawn for the Pawn Edit screen. Generates the pawn through the +/// REAL generation pipeline (so the always-active apparel/weapon/hediff Harmony patches +/// apply the edits exactly as they would for a raid — "match real raids"), debounces +/// regeneration so dragging a slider doesn't regenerate every frame, and disposes the +/// throwaway pawn safely so it can never leak into the save. +/// +[HotSwappable] +public class PreviewPawnController +{ + public readonly FactionEdit ParentFaction; + public PawnKindDef TargetKind; + + public Pawn PreviewPawn { get; private set; } + public bool PreviewFailed { get; private set; } + + /// Mirrors the old FactionEditUI "Thing ID Patch" toggle (off by default). + public bool UseThingIDPatch; + + private bool dirty; + private int frameCounter; + private int dirtyAtFrame; + private const int DebounceFrames = 20; + + public bool InGame => Verse.Current.Game != null; + + public PreviewPawnController(FactionEdit parentFaction, PawnKindDef targetKind) + { + ParentFaction = parentFaction; + TargetKind = targetKind; + // Generate immediately on the first Tick. + dirty = true; + dirtyAtFrame = -DebounceFrames; + } + + /// An option changed; regenerate after a short idle (debounced). + public void NotifyEditChanged() + { + dirty = true; + dirtyAtFrame = frameCounter; + PreviewFailed = false; + } + + /// Force an immediate fresh roll (also re-rolls randomized pools/chances). + public void RequestRegenerate() + { + PreviewFailed = false; + Regenerate(); + } + + public void MarkFailed() => PreviewFailed = true; + + /// Call once per frame from the screen. + public void Tick() + { + frameCounter++; + if (!InGame) + return; + if (dirty && !PreviewFailed && frameCounter - dirtyAtFrame >= DebounceFrames) + Regenerate(); + } + + private void Regenerate() + { + dirty = false; + if (!InGame || TargetKind == null) + { + PreviewFailed = TargetKind == null; + return; + } + + DiscardPawn(PreviewPawn); + PreviewPawn = null; + + try + { + PreviewPawn = GeneratePreviewPawn(); + PreviewFailed = PreviewPawn == null; + if (PreviewPawn != null) + PortraitsCache.SetDirty(PreviewPawn); + } + catch (Exception e) + { + ModCore.Error($"Failed to generate preview pawn for '{TargetKind?.LabelCap}'.", e); + PreviewPawn = null; + PreviewFailed = true; + } + } + + private Pawn GeneratePreviewPawn() + { + FactionDef toClone = FactionEdit.TryGetOriginal(ParentFaction.Faction.Def.defName) ?? ParentFaction.Faction.Def; + FactionDef clonedFac = CloningUtility.Clone(toClone); + clonedFac.defName = ParentFaction.Faction.Def.defName; + clonedFac.humanlikeFaction = ParentFaction.Faction.Def.humanlikeFaction; + // The "TEMP FACTION CLONE" prefix is load-bearing — PawnKindEdit.GetEditsFor + // special-cases it so the edits resolve for this throwaway faction. + clonedFac.fixedName = $"TEMP FACTION CLONE ({clonedFac.defName})"; + + ParentFaction.Apply(clonedFac, false); + + Faction faction = new() + { + def = clonedFac, + loadID = -1, + colorFromSpectrum = Rand.Range(0f, 1f), + hidden = true, + ideos = Find.FactionManager?.FirstFactionOfDef(ParentFaction.Faction.Def)?.ideos, + Name = clonedFac.fixedName, + relations = Find + .FactionManager.AllFactionsVisible.Select(otherFaction => new FactionRelation + { + other = otherFaction, + baseGoodwill = 0, + kind = FactionRelationKind.Neutral, + }) + .ToList(), + temporary = true, + deactivated = true, + }; + + ThingIDPatch.Active = UseThingIDPatch; + IdeoUtilityPatch.Active = true; + FactionUtilityPawnGenPatch.Active = true; + + try + { + return PawnGenerator.GeneratePawn( + new PawnGenerationRequest(TargetKind, faction) + { + ForceGenerateNewPawn = true, + AllowDowned = false, + AllowDead = false, + CanGeneratePawnRelations = false, + RelationWithExtraPawnChanceFactor = 0, + ColonistRelationChanceFactor = 0, + ForceNoIdeo = true, + ForbidAnyTitle = true, + } + ); + } + finally + { + Find.FactionManager.Remove(faction); + ThingIDPatch.Active = false; + FactionLeaderPatch.Active = false; + FactionUtilityPawnGenPatch.Active = false; + IdeoUtilityPatch.Active = false; + } + } + + public void Dispose() + { + DiscardPawn(PreviewPawn); + PreviewPawn = null; + } + + /// + /// Save-contamination guard (same pattern as the old FactionEditUI.DestroyPawns): + /// never keep the throwaway pawn — discard it, stripping dangling references. + /// + private static void DiscardPawn(Pawn pawn) + { + if (pawn == null) + return; + + if (Find.WorldPawns?.Contains(pawn) == true) + Find.WorldPawns.RemoveAndDiscardPawnViaGC(pawn); + else if (!pawn.Discarded) + Find.WorldPawns?.PassToWorld(pawn, PawnDiscardDecideMode.Discard); + } +} diff --git a/1.6/Source/UISupport/Screens/FactionEditScreen.cs b/1.6/Source/UISupport/Screens/FactionEditScreen.cs new file mode 100644 index 0000000..c0beeb8 --- /dev/null +++ b/1.6/Source/UISupport/Screens/FactionEditScreen.cs @@ -0,0 +1,378 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FactionLoadout.Modules; +using FactionLoadout.Util; +using RimWorld; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport.Screens; + +/// +/// Edits one faction: a two-panel layout with the pawnkind-edit list on the left and +/// faction-level settings (tech level, xenotypes, spawn groups, module UI) on the right. +/// Extracted from the old FactionEditUI.DoWindowContents, minus the preview block +/// (the live preview lands on the Pawn Edit screen in Phase C). +/// +[HotSwappable] +public class FactionEditScreen +{ + public readonly TotalControlController Controller; + public readonly FactionEdit Current; + + private readonly List bin = []; + private readonly HashSet tempKinds = []; + + private Vector2 kindsScroll; + private Vector2 settingsScroll; + private float settingsContentHeight = 10000f; // measured after first frame; large so nothing clips + + public FactionEditScreen(TotalControlController controller, FactionEdit fac) + { + Controller = controller; + Current = fac; + } + + public void Draw(Rect inRect) + { + if (Current == null || Current.DeletedOrClosed) + return; + + // --- Header block (title + warnings + clipboard toolbar) --- + Listing_Standard head = new(); + head.Begin(new Rect(inRect.x, inRect.y, inRect.width, 240f)); + + Rect titleRect = head.GetRect(44f); + Widgets.Label(titleRect, $"{"FactionLoadout_TC_FactionHeader".Translate()}: {Current.Faction.Def?.LabelCap ?? "None".Translate()}"); + + if (Current.Faction.IsMissing) + head.Label($"{"FactionLoadout_FactionMissingEditWarning".Translate()}"); + if (Current.Faction.DefName == Preset.SpecialCreepjoinerFactionDefName) + head.Label($"{"FactionLoadout_FactionEdit_ExperimentalCreepjoiner".Translate()}"); + if (Current.Faction.DefName == Preset.SpecialWildManFactionDefName) + head.Label($"{"FactionLoadout_FactionEdit_ExperimentalWildMan".Translate()}"); + if (Current.Faction.DefName == Preset.SpecialFactionlessPawnsFactionDefName) + head.Label($"{"FactionLoadout_Special_FactionlessWarning".Translate()}"); + + if (!Current.Faction.IsMissing) + DrawFactionClipboardToolbar(head); + + float headH = head.CurHeight; + head.End(); + + // --- Two columns --- + float colsY = inRect.y + headH + 6f; + float colsH = inRect.yMax - colsY; + float leftW = inRect.width * 0.36f; + const float gap = 10f; + Rect leftRect = new(inRect.x, colsY, leftW, colsH); + Rect rightRect = new(inRect.x + leftW + gap, colsY, inRect.width - leftW - gap, colsH); + + DrawKindList(leftRect); + DrawFactionSettings(rightRect); + } + + // ----------------------------------------------------------- left: pawnkinds + + private void DrawKindList(Rect rect) + { + Widgets.DrawMenuSection(rect); + rect = rect.ContractedBy(6f); + + Rect titleR = new(rect.x, rect.y, rect.width, 24f); + Widgets.Label(titleR, $"{"FactionLoadout_FactionEdit_LoadoutOverrides".Translate()}"); + + // "Add..." button pinned at the bottom of the panel. + Rect addBtn = new(rect.x, rect.yMax - 30f, rect.width, 30f); + float listY = titleR.yMax + 4f; + Rect scrollOut = new(rect.x, listY, rect.width, addBtn.y - listY - 6f); + + const float rowH = 32f; + float contentH = Mathf.Max(Current.KindEdits.Count * rowH + 6f, scrollOut.height); + Rect view = new(0, 0, scrollOut.width - 16f, contentH); + + HashSet orphanedKinds = Current?.GetOrphanedKinds() ?? []; + + Widgets.BeginScrollView(scrollOut, ref kindsScroll, view); + for (int i = 0; i < Current.KindEdits.Count; i++) + { + PawnKindEdit edit = Current.KindEdits[i]; + Rect row = new(0, i * rowH, view.width, rowH - 2f); + if (i % 2 == 1) + Widgets.DrawHighlight(row); + DrawKindRow(row, edit, orphanedKinds); + } + Widgets.EndScrollView(); + + foreach (PawnKindEdit item in bin) + Current.KindEdits.Remove(item); + bin.Clear(); + + if (!Current.Faction.IsMissing && Widgets.ButtonText(addBtn, "Add".Translate().CapitalizeFirst() + "...")) + OpenAddKindMenu(); + } + + private void DrawKindRow(Rect row, PawnKindEdit edit, HashSet orphanedKinds) + { + float x = row.x + 2f; + float y = row.y + 2f; + + string delText = "Delete".Translate(); + float delW = Mathf.Max(38f, Text.CalcSize(delText).x + 10f); + GUI.color = Color.red; + if (Widgets.ButtonText(new Rect(x, y, delW, 24f), delText)) + { + bin.Add(edit); + edit.DeletedOrClosed = true; + } + GUI.color = Color.white; + x += delW + 4f; + + string editText = "FactionLoadout_Edit".Translate().CapitalizeFirst(); + float editW = Mathf.Max(50f, Text.CalcSize(editText).x + 10f); + if (Widgets.ButtonText(new Rect(x, y, editW, 24f), editText)) + Controller.OpenKind(edit); + x += editW + 4f; + + if (Widgets.ButtonImageFitted(new Rect(x, y, 24f, 24f), TexButton.Copy)) + PawnKindClipboard.Copy(edit); + TooltipHandler.TipRegion(new Rect(x, y, 24f, 24f), "FactionLoadout_Clipboard_CopyTooltip".Translate()); + x += 28f; + + if (PawnKindClipboard.HasData) + { + if (Widgets.ButtonImageFitted(new Rect(x, y, 24f, 24f), TexButton.Paste)) + PawnKindClipboard.PasteAll(edit); + TooltipHandler.TipRegion(new Rect(x, y, 24f, 24f), "FactionLoadout_Clipboard_PasteAllTooltip".Translate(PawnKindClipboard.GetDescription())); + } + else + { + GUI.color = Color.gray; + Widgets.DrawTextureFitted(new Rect(x, y, 24f, 24f), TexButton.Paste, 1f); + GUI.color = Color.white; + TooltipHandler.TipRegion(new Rect(x, y, 24f, 24f), "FactionLoadout_Clipboard_Empty".Translate()); + } + x += 28f; + + bool isOrphaned = !edit.IsGlobal && edit.Def != null && orphanedKinds.Contains(edit.Def); + if (isOrphaned) + { + GUI.color = Color.yellow; + Widgets.Label(new Rect(x, y, 20f, 24f), "⚠"); + GUI.color = Color.white; + TooltipHandler.TipRegion(new Rect(x, y, 20f, 24f), "FactionLoadout_SpawnGroups_OrphanKindTooltip".Translate()); + x += 22f; + } + + Rect labelRect = new(x, row.y, row.xMax - x, row.height); + Text.Anchor = TextAnchor.MiddleLeft; + Widgets.Label(labelRect, $"{(edit.IsGlobal ? $"{"FactionLoadout_GlobalLabel".Translate()}" : edit.Def.LabelCap.ToString())}"); + Text.Anchor = TextAnchor.UpperLeft; + } + + // ------------------------------------------------------ right: faction settings + + private void DrawFactionSettings(Rect rect) + { + Widgets.DrawMenuSection(rect); + rect = rect.ContractedBy(6f); + + float innerH = Mathf.Max(settingsContentHeight + 40f, rect.height); + Rect view = new(0, 0, rect.width - 16f, innerH); + + Widgets.BeginScrollView(rect, ref settingsScroll, view); + Listing_Standard ui = new() { ColumnWidth = view.width }; + ui.Begin(view); + + // Tech level. + if ( + ui.ButtonTextLabeled( + "FactionLoadout_Faction_Techlevel".Translate(), + Current.TechLevel?.ToStringHuman() ?? "FactionLoadout_NotOverriden_WithDefault".Translate((Current.Faction?.Def?.techLevel ?? TechLevel.Undefined).ToStringHuman()) + ) + ) + { + IEnumerable enums = Enum.GetValues(typeof(TechLevel)).Cast().Append(null); + FloatMenuUtility.MakeMenu( + enums, + e => e?.ToStringHuman() ?? "FactionLoadout_NotOverriden_WithDefault".Translate((Current.Faction?.Def?.techLevel ?? TechLevel.Undefined).ToStringHuman()), + e => () => Current.TechLevel = e + ); + } + + // Xenotype spawn rates (Biotech). + if ( + ModsConfig.BiotechActive + && Current.Faction is { IsMissing: false } + && Current.Faction?.Def != Preset.SpecialWildManFaction + && Current.Faction?.Def != Preset.SpecialFactionlessPawnsFaction + ) + { + if (!Current.OverrideFactionXenotypes) + { + Current.xenotypeChances.Clear(); + Current.xenotypeChancesByDef.Clear(); + } + + ui.GapLine(); + string xenoState = Current.OverrideFactionXenotypes ? "FactionLoadout_Xenotype_ActiveCount".Translate(Current.xenotypeChances.Count) : "FactionLoadout_Xenotype_Off".Translate(); + if (ui.ButtonTextLabeled("FactionLoadout_EditXenoSpawnRates".Translate(), xenoState)) + Find.WindowStack.Add(new Dialog_XenotypeEdit(Current)); + } + + // Spawn groups. + if (Current.Faction is not { IsMissing: true }) + { + ui.GapLine(); + + Rect groupsRow = ui.GetRect(28f); + const float editBtnW = 160f; + Rect editGroupsBtn = new(groupsRow.xMax - editBtnW, groupsRow.y, editBtnW, 24f); + + Text.Anchor = TextAnchor.MiddleLeft; + string groupsSummary; + if (Current.PawnGroupMakerEdits != null) + groupsSummary = "FactionLoadout_SpawnGroups_SummaryModified".Translate(Current.PawnGroupMakerEdits.Count, "FactionLoadout_GroupEditor_NewTag".Translate().ToString().ToLower()); + else + groupsSummary = "FactionLoadout_SpawnGroups_Summary".Translate(Current?.Faction?.Def?.pawnGroupMakers?.Count ?? 0); + + Rect summaryLabelRect = new(groupsRow.x, groupsRow.y, groupsRow.width - editBtnW - 4f, groupsRow.height); + GUI.color = Color.grey; + Widgets.Label(summaryLabelRect, "FactionLoadout_SpawnGroups_Label".Translate() + " " + groupsSummary); + GUI.color = Color.white; + Text.Anchor = TextAnchor.UpperLeft; + + if (Widgets.ButtonText(editGroupsBtn, "FactionLoadout_SpawnGroups_EditButton".Translate())) + GroupEditorUI.OpenEditor(Current); + + HashSet orphaned = Current?.GetOrphanedKinds() ?? []; + if (orphaned.Count > 0) + { + string names = orphaned.Select(k => k.LabelCap.ToString()).OrderBy(n => n).ToCommaList(); + string warnText = "FactionLoadout_SpawnGroups_OrphanWarning".Translate(names); + Rect warnRow = ui.GetRect(Text.CalcHeight(warnText, ui.ColumnWidth)); + GUI.color = new Color(1f, 0.6f, 0.1f); + Widgets.Label(warnRow, warnText); + GUI.color = Color.white; + } + } + + // Active modules contribute faction-level UI here (unchanged contract). + foreach (ITotalControlModule module in ModuleRegistry.Modules) + { + if (!module.IsActive) + continue; + try + { + module.AddFactionUI(Current, ui); + } + catch (Exception e) + { + ModCore.Error($"Error drawing faction UI for module '{module.ModuleName}'", e); + } + } + + settingsContentHeight = ui.CurHeight; + ui.End(); + Widgets.EndScrollView(); + } + + // ------------------------------------------------------------------- helpers + + private void DrawFactionClipboardToolbar(Listing_Standard ui) + { + Rect toolbar = ui.GetRect(28f); + float x = toolbar.x; + float y = toolbar.y; + const float btnSize = 24f; + const float gap = 4f; + + if (Widgets.ButtonImageFitted(new Rect(x, y, btnSize, btnSize), TexButton.Copy)) + FactionEditClipboard.Copy(Current); + TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_FactionClipboard_CopyTooltip".Translate()); + + x += btnSize + gap; + if (FactionEditClipboard.HasData) + { + if (Widgets.ButtonImageFitted(new Rect(x, y, btnSize, btnSize), TexButton.Paste)) + FactionEditClipboard.PasteAll(Current); + TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_FactionClipboard_PasteTooltip".Translate(FactionEditClipboard.GetDescription())); + } + else + { + GUI.color = Color.gray; + Widgets.DrawTextureFitted(new Rect(x, y, btnSize, btnSize), TexButton.Paste, 1f); + GUI.color = Color.white; + TooltipHandler.TipRegion(new Rect(x, y, btnSize, btnSize), "FactionLoadout_Clipboard_Empty".Translate()); + } + } + + private void OpenAddKindMenu() + { + IEnumerable MakeKinds() + { + tempKinds.Clear(); + if (!Current.HasGlobalEditor()) + tempKinds.Add(null); + + foreach (PawnKindDef kind in Current.GetAllKindDefsForUI()) + { + if (!Current.HasEditFor(kind)) + tempKinds.Add(kind); + } + + if (Current.PawnGroupMakerEdits != null) + { + if (Current.Faction.Def?.basicMemberKind != null && !Current.HasEditFor(Current.Faction.Def.basicMemberKind)) + tempKinds.Add(Current.Faction.Def.basicMemberKind); + if (Current.Faction.Def?.fixedLeaderKinds != null) + { + foreach (PawnKindDef item in Current.Faction.Def.fixedLeaderKinds) + { + if (!Current.HasEditFor(item)) + tempKinds.Add(item); + } + } + } + + foreach (PawnKindDef item in tempKinds) + yield return item; + + if (tempKinds.Count(k => k != null) == 0) + { + if (Current.Faction.Def == FactionDefOf.Ancients || Current.Faction.Def == FactionDefOf.AncientsHostile) + { + yield return PawnKindDefOf.AncientSoldier; + yield return PawnKindDefOf.Slave; + } + } + + tempKinds.Clear(); + } + + List kinds = MakeKinds().ToList(); + List items = CustomFloatMenu.MakeItems( + kinds, + k => k != null ? new MenuItemText(k, $"{k.LabelCap} ({k.defName})", tooltip: k.description) : new MenuItemText(null, $"{"FactionLoadout_GlobalLabel".Translate()}") + ); + CustomFloatMenu.Open( + items, + raw => + { + PawnKindDef k = raw.GetPayload(); + if (k != null) + { + Current.KindEdits.Add(new PawnKindEdit(k)); + } + else + { + PawnKindDef kind = kinds.FirstOrDefault(pawnKindDef => pawnKindDef != null); + ModCore.Log($"Using {kind} as global base."); + if (kind != null) + Current.KindEdits.Insert(0, new PawnKindEdit(kind) { IsGlobal = true }); + } + } + ); + } +} diff --git a/1.6/Source/UISupport/Screens/FactionViewScreen.cs b/1.6/Source/UISupport/Screens/FactionViewScreen.cs new file mode 100644 index 0000000..d61a194 --- /dev/null +++ b/1.6/Source/UISupport/Screens/FactionViewScreen.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport.Screens; + +/// +/// Home screen: global settings + active-preset management + the selected preset's +/// faction-edit list. Merges the old Dialog_FactionLoadout (settings + preset +/// list) and PresetUI (per-preset faction list) into one in-shell screen. +/// +[HotSwappable] +public class FactionViewScreen +{ + public readonly TotalControlController Controller; + + private Vector2 factionScroll; + + public FactionViewScreen(TotalControlController controller) + { + Controller = controller; + } + + public void Draw(Rect inRect) + { + Listing_Standard ui = new(); + ui.Begin(inRect); + + // --- Global settings --- + ui.CheckboxLabeled( + "FactionLoadout_Settings_VanillaRestrictions".Translate(), + ref MySettings.VanillaRestrictions, + "FactionLoadout_Settings_VanillaRestrictionsDesc".Translate() + ); + ui.CheckboxLabeled("FactionLoadout_Settings_Verbose".Translate(), ref MySettings.VerboseLogging, "FactionLoadout_Settings_VerboseDesc".Translate()); + ui.CheckboxLabeled( + "FactionLoadout_Settings_PatchKindInRequests".Translate(), + ref MySettings.PatchKindInRequests, + "FactionLoadout_Settings_PatchKindInRequestsDesc".Translate() + ); + ui.GapLine(); + + Preset preset = Controller.SelectedPreset; + if (preset == null) + { + ui.Label("FactionLoadout_NothingHere".Translate()); + ui.Gap(); + if (ui.ButtonText("FactionLoadout_CreateNewPreset".Translate())) + CreateNewPreset(); + ui.End(); + return; + } + + DrawPresetHeader(ui, preset); + ui.GapLine(); + + ui.Label($"{"FactionLoadout_Preset_EditCount".Translate(preset.factionChanges.Count)}"); + ui.Gap(4); + + // --- Faction list (scrollable). Fixed row height -> compute content directly. --- + const float rowH = 34f; + float listH = Mathf.Max(120f, inRect.height - ui.CurHeight - 44f); + Rect scrollOut = ui.GetRect(listH); + float contentH = Mathf.Max(preset.factionChanges.Count * rowH + 8f, listH); + Rect view = new(0, 0, scrollOut.width - 16f, contentH); + + Widgets.BeginScrollView(scrollOut, ref factionScroll, view); + FactionEdit toDelete = null; + for (int i = 0; i < preset.factionChanges.Count; i++) + { + FactionEdit item = preset.factionChanges[i]; + Rect row = new(0, i * rowH, view.width, rowH - 2f); + if (i % 2 == 1) + Widgets.DrawHighlight(row); + Widgets.DrawHighlightIfMouseover(row); + if (DrawFactionRow(row, item)) + toDelete = item; + } + + Widgets.EndScrollView(); + + if (toDelete != null) + { + toDelete.DeletedOrClosed = true; + preset.factionChanges.Remove(toDelete); + } + + // --- Add faction edit --- + if (ui.ButtonText("FactionLoadout_Preset_AddFactionEdit".Translate())) + OpenAddFactionMenu(preset); + + ui.End(); + } + + /// Returns true if this faction was marked for deletion. + private bool DrawFactionRow(Rect row, FactionEdit item) + { + bool delete = false; + float rightX = row.xMax; + + // Delete (far right, red). + string delText = "Delete".Translate(); + float delW = Mathf.Max(80f, Text.CalcSize(delText).x + 16f); + Rect delBtn = new(rightX - delW, row.y + 3f, delW, row.height - 6f); + GUI.color = Color.red; + if (Widgets.ButtonText(delBtn, delText)) + delete = true; + GUI.color = Color.white; + rightX -= delW + 6f; + + if (item.Faction.IsMissing) + { + string editAnyway = "FactionLoadout_EditAnyway".Translate(); + float ew = Mathf.Max(120f, Text.CalcSize(editAnyway).x + 16f); + Rect editBtn = new(rightX - ew, row.y + 3f, ew, row.height - 6f); + GUI.color = new Color(1f, 0.75f, 0.2f); + if (Widgets.ButtonText(editBtn, editAnyway)) + Controller.OpenFaction(item); + GUI.color = new Color(1f, 0.4f, 0.4f); + Rect lbl = new(row.x, row.y, editBtn.x - row.x - 6f, row.height); + Text.Anchor = TextAnchor.MiddleLeft; + Widgets.Label(lbl, $"{item.Faction.LabelCap} ({item.Faction.DefName}) — {"FactionLoadout_FactionMissing".Translate()}"); + Text.Anchor = TextAnchor.UpperLeft; + GUI.color = Color.white; + return delete; + } + + // Edit. + string editText = "FactionLoadout_Edit".Translate().CapitalizeFirst(); + float editW = Mathf.Max(80f, Text.CalcSize(editText).x + 16f); + Rect edit = new(rightX - editW, row.y + 3f, editW, row.height - 6f); + if (Widgets.ButtonText(edit, editText)) + Controller.OpenFaction(item); + rightX -= editW + 6f; + + // Enabled checkbox. + Rect enabledRect = new(rightX - 110f, row.y, 110f, row.height); + Widgets.CheckboxLabeled(enabledRect, "Enabled".Translate(), ref item.Active, placeCheckboxNearText: true); + rightX -= 116f; + + // Label (fills remaining space on the left). + Rect nameRect = new(row.x + 4f, row.y, rightX - row.x - 4f, row.height); + Text.Anchor = TextAnchor.MiddleLeft; + Widgets.Label(nameRect, $"{item.Faction.LabelCap} ({item.Faction.DefName})"); + Text.Anchor = TextAnchor.UpperLeft; + + return delete; + } + + private void DrawPresetHeader(Listing_Standard ui, Preset preset) + { + // Name row. + Rect nameRow = ui.GetRect(30); + Rect nameLbl = new(nameRow.x, nameRow.y, 80f, nameRow.height); + Text.Anchor = TextAnchor.MiddleLeft; + Widgets.Label(nameLbl, "FactionLoadout_Preset_EditName".Translate()); + Text.Anchor = TextAnchor.UpperLeft; + Rect nameField = new(nameRow.x + 84f, nameRow.y + 2f, 280f, 26f); + preset.Name = Widgets.TextField(nameField, preset.Name); + + // Active toggle (only one preset may be active). + Rect activeRect = new(nameRow.x + 380f, nameRow.y, 140f, nameRow.height); + bool active = MySettings.ActivePreset == preset.GUID; + bool was = active; + GUI.color = active ? Color.green : Color.white; + Widgets.CheckboxLabeled(activeRect, "FactionLoadout_Active".Translate().CapitalizeFirst(), ref active, placeCheckboxNearText: true); + GUI.color = Color.white; + if (active != was) + { + MySettings.ActivePreset = active ? preset.GUID : null; + ModCore.Settings.Write(); + } + + // Action buttons. + Rect btnRow = ui.GetRect(30); + float bx = btnRow.x; + const float bw = 150f; + + string saveLabel = preset.IsPackaged ? "FactionLoadout_SaveToSourceFile".Translate() : "Save".Translate().ToString().ToUpper(); + GUI.color = Color.green; + if (Widgets.ButtonText(new Rect(bx, btnRow.y, bw, 28f), $"{saveLabel}")) + preset.Save(); + GUI.color = Color.white; + bx += bw + 6f; + + if (Widgets.ButtonText(new Rect(bx, btnRow.y, bw, 28f), "FactionLoadout_CopyToMyPresets".Translate())) + CopyPreset(preset); + bx += bw + 6f; + + if (!preset.IsPackaged) + { + GUI.color = Color.Lerp(Color.white, Color.red, 0.65f); + if (Widgets.ButtonText(new Rect(bx, btnRow.y, bw, 28f), $"{"Delete".Translate().ToString().ToUpper()}")) + { + Preset.DeletePreset(preset); + Controller.SelectPreset(Preset.LoadedPresets.FirstOrDefault()); + } + GUI.color = Color.white; + bx += bw + 6f; + } + + if (Widgets.ButtonText(new Rect(bx, btnRow.y, bw, 28f), "FactionLoadout_CreateNewPreset".Translate())) + CreateNewPreset(); + + // Packaged + missing-faction warnings. + if (preset.IsPackaged) + { + Rect warningRect = ui.GetRect(44); + Widgets.DrawBoxSolid(warningRect, new Color(0.45f, 0.35f, 0.05f, 0.85f)); + Widgets.Label(warningRect.ContractedBy(6f), "FactionLoadout_PackagedPresetWarning".Translate(preset.PackagedModName).ToString()); + } + + if (preset.HasMissingFactions()) + { + ui.Label($"{"FactionLoadout_Preset_MissingWarning".Translate()}"); + foreach (string str in preset.GetMissingFactionAndModNames()) + ui.Label($" - {str}"); + } + } + + private void CreateNewPreset() + { + Preset preset = new(); + Preset.AddNewPreset(preset); + preset.Save(); + MySettings.ActivePreset = preset.GUID; + ModCore.Settings.Write(); + Controller.SelectPreset(preset); + } + + private void CopyPreset(Preset src) + { + try + { + Preset copy = Preset.CreateCopy(src); + Preset.AddNewPreset(copy); + copy.Save(); + Controller.SelectPreset(copy); + } + catch (Exception ex) + { + ModCore.Error("Failed to copy preset.", ex); + } + } + + private void OpenAddFactionMenu(Preset preset) + { + List raw = DefDatabase.AllDefsListForReading.Where(f => !preset.HasEditFor(f)).ToList(); + if (!preset.HasEditFor(Preset.SpecialCreepjoinerFaction) && !raw.Any(f => f.defName == Preset.SpecialCreepjoinerFaction.defName)) + raw.Add(Preset.SpecialCreepjoinerFaction); + if (!preset.HasEditFor(Preset.SpecialWildManFaction) && !raw.Any(f => f.defName == Preset.SpecialWildManFaction.defName)) + raw.Add(Preset.SpecialWildManFaction); + if ( + Preset.FactionlessPawnKindsSet.Count > 0 + && !preset.HasEditFor(Preset.SpecialFactionlessPawnsFaction) + && !raw.Any(f => f.defName == Preset.SpecialFactionlessPawnsFaction.defName) + ) + raw.Add(Preset.SpecialFactionlessPawnsFaction); + + List items = CustomFloatMenu.MakeItems(raw, f => new MenuItemText(f, $"{f.LabelCap} ({f.defName})", DefUtils.TryGetIcon(f, out Color c), c, f.description)); + + CustomFloatMenu.Open( + items, + menuItemBase => + { + FactionDef e = menuItemBase.GetPayload(); + preset.factionChanges.Add(new FactionEdit { Faction = e }); + } + ); + } +} diff --git a/1.6/Source/UISupport/Screens/PawnEditScreen.cs b/1.6/Source/UISupport/Screens/PawnEditScreen.cs new file mode 100644 index 0000000..ff2d359 --- /dev/null +++ b/1.6/Source/UISupport/Screens/PawnEditScreen.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FactionLoadout.Modules; +using FactionLoadout.UISupport.DrawSupport; +using FactionLoadout.Util; +using RimWorld; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport.Screens; + +/// +/// Edits one pawnkind in three columns: a big live preview (left), a vertical category +/// nav (middle), and the selected category's option content (right). Reuses the existing +/// machinery unchanged — the only structural changes vs. the old +/// PawnKindEditUI are the vertical nav (instead of cramped tab buttons) and a +/// per-category scroll position (fixes the old shared-scroll bug). +/// +/// The preview column is a placeholder in Phase B; Phase C plugs the live portrait in +/// at . +/// +[HotSwappable] +public class PawnEditScreen +{ + public readonly TotalControlController Controller; + public readonly FactionEdit ParentFaction; + public readonly PawnKindEdit Current; + public readonly PreviewPawnController Preview; + private readonly PawnPreviewWidget previewWidget = new(); + + private List tabs; + private int selectedCategory; + private readonly Dictionary categoryScroll = new(); + private readonly Dictionary tabHeights = new(); + private Vector2 navScroll; + + public PawnEditScreen(TotalControlController controller, FactionEdit parentFaction, PawnKindEdit kind) + { + Controller = controller; + ParentFaction = parentFaction; + Current = kind; + Preview = new PreviewPawnController(parentFaction, kind?.Def); + DefCache.ScanDefs(); + } + + public void Dispose() => Preview.Dispose(); + + /// The unmodified base def, used to show "default" values next to overrides. + public PawnKindDef DefaultKind + { + get + { + if (Current.DeletedOrClosed) + return Current.Def; + + FactionDef found = FactionEdit.TryGetOriginal(ParentFaction.Faction.DefName); + if (found == null) + return Current.Def; + PawnKindDef found2 = found.GetKindDefs().FirstOrDefault(k => k.defName == Current.Def.defName); + return found2 ?? Current.Def; + } + } + + public void Draw(Rect inRect) + { + if (Current == null || Current.DeletedOrClosed) + return; + + Preview.Tick(); + + Text.Font = GameFont.Small; + if (tabs == null) + BuildTabs(); + + // Header. + Rect header = new(inRect.x, inRect.y, inRect.width, 32f); + Text.Font = GameFont.Medium; + string kindLabel = Current.IsGlobal ? "FactionLoadout_GlobalLabel".Translate().ToString() : Current.Def.LabelCap.ToString(); + Widgets.Label(header, "FactionLoadout_TC_PawnHeader".Translate(kindLabel)); + Text.Font = GameFont.Small; + + float colsY = inRect.y + 36f; + float colsH = inRect.yMax - colsY; + + if ((tabs?.Count ?? 0) == 0) + { + Widgets.Label(new Rect(inRect.x, colsY, inRect.width, 40f), "FactionLoadout_NoEditableProperties".Translate()); + return; + } + + selectedCategory = Mathf.Clamp(selectedCategory, 0, tabs.Count - 1); + + // Three columns: preview | category nav | options. + float previewW = inRect.width * 0.38f; + float navW = inRect.width * 0.16f; + const float gap = 8f; + Rect previewRect = new(inRect.x, colsY, previewW, colsH); + Rect navRect = new(previewRect.xMax + gap, colsY, navW, colsH); + Rect optsRect = new(navRect.xMax + gap, colsY, inRect.xMax - (navRect.xMax + gap), colsH); + + DrawPreviewColumn(previewRect); + DrawCategoryNav(navRect); + DrawOptions(optsRect); + } + + private void DrawPreviewColumn(Rect rect) + { + previewWidget.Draw(rect, Preview); + } + + private void DrawCategoryNav(Rect rect) + { + Widgets.DrawMenuSection(rect); + rect = rect.ContractedBy(4f); + + const float rowH = 34f; + float contentH = tabs.Count * rowH; + bool needsScroll = contentH > rect.height; + Rect view = new(0, 0, rect.width - (needsScroll ? 16f : 0f), Mathf.Max(contentH, rect.height)); + + Widgets.BeginScrollView(rect, ref navScroll, view); + for (int i = 0; i < tabs.Count; i++) + { + Rect btn = new(0, i * rowH, view.width, rowH - 2f); + Color bg = selectedCategory == i ? new Color32(49, 82, 133, 255) : new Color(0.2f, 0.2f, 0.2f, 1f); + Rect r = btn; + if (Widgets.CustomButtonText(ref r, $"{tabs[i].Name}", bg, Color.white, Color.white)) + selectedCategory = i; + } + Widgets.EndScrollView(); + } + + private void DrawOptions(Rect rect) + { + Widgets.DrawMenuSection(rect); + rect = rect.ContractedBy(6f); + + // Clipboard toolbar (copy / paste-all). Wired identically to the old editor: + // the reset callback clears the active tab's text/scroll buffers after a paste. + Rect toolbarRect = new(rect.x, rect.y, rect.width, 28f); + ClipboardToolbar.Draw( + toolbarRect, + Current, + () => + { + if (selectedCategory >= 0 && selectedCategory < tabs.Count && tabs[selectedCategory] is EditTab et) + et.ResetBuffers(); + } + ); + + // Selected category content, with its OWN scroll position (per-category bug fix). + Tab tab = tabs[selectedCategory]; + Rect scrollOut = new(rect.x, toolbarRect.yMax + 4f, rect.width, rect.yMax - (toolbarRect.yMax + 4f)); + float innerW = scrollOut.width - 24f; + float contentH = tabHeights.TryGetValue(tab, out float storedH) ? Mathf.Max(storedH, scrollOut.height) : scrollOut.height; + + Vector2 scroll = categoryScroll.TryGetValue(tab, out Vector2 s) ? s : Vector2.zero; + Widgets.BeginScrollView(scrollOut, ref scroll, new Rect(0, 0, innerW, contentH)); + + Listing_Standard ui = new() { ColumnWidth = innerW }; + ui.Begin(new Rect(0, 0, innerW, 1000000)); + + // Detect inline option changes (checkboxes/sliders/text) to auto-refresh the + // preview. Float-menu pickers apply on a later frame and are covered by the + // explicit Regenerate button. + bool prevChanged = GUI.changed; + GUI.changed = false; + tab.Draw(ui); + if (GUI.changed) + Preview.NotifyEditChanged(); + GUI.changed = prevChanged || GUI.changed; + + tabHeights[tab] = ui.CurHeight; + ui.End(); + + Widgets.EndScrollView(); + categoryScroll[tab] = scroll; + } + + private void BuildTabs() + { + PawnKindDef dk = DefaultKind; + tabs = [new GeneralTab(Current, dk)]; + + bool isAnimal = dk.RaceProps.Animal; + if (!isAnimal) + { + tabs.AddRange( + [ + new BackstoryTab(Current, dk), + new AppearanceTab(Current, dk), + new ApparelTab(Current, dk), + new WeaponTab(Current, dk), + new ImplantsTab(Current, dk), + new InventoryTab(Current, dk), + new RaidPointsTab(Current, dk), + new RaidLootTab(Current, dk), + ] + ); + if (VFEAncientsReflectionModule.ModLoaded.Value) + tabs.Add(new AncientsTab(Current, dk)); + if (VEPsycastsReflectionModule.ModLoaded.Value) + tabs.Add(new PsycastsTab(Current, dk)); + if (ModsConfig.BiotechActive) + tabs.Add(new XenotypeTab(Current, dk)); + + foreach (ITotalControlModule module in ModuleRegistry.Modules) + { + if (module.IsActive) + module.AddTabs(Current, dk, tabs); + } + } + } +} diff --git a/1.6/Source/UISupport/TotalControlController.cs b/1.6/Source/UISupport/TotalControlController.cs new file mode 100644 index 0000000..8b995d9 --- /dev/null +++ b/1.6/Source/UISupport/TotalControlController.cs @@ -0,0 +1,302 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FactionLoadout.UISupport.Screens; +using RimWorld; +using UnityEngine; +using Verse; + +namespace FactionLoadout.UISupport; + +public enum TCScreen +{ + FactionView, + FactionEdit, + PawnEdit, +} + +/// +/// Owns the navigation state (which screen + the selected preset/faction/pawnkind) and +/// renders the shared chrome (title bar, top tab strip, breadcrumb) before dispatching +/// to the active screen. Screen objects hold their own scroll/buffer state so it persists +/// across frames; the controller rebuilds a screen only when its subject changes. +/// +[HotSwappable] +public class TotalControlController +{ + public readonly Dialog_TotalControl Owner; + + public TCScreen Screen { get; private set; } = TCScreen.FactionView; + public Preset SelectedPreset; + public FactionEdit SelectedFaction { get; private set; } + public PawnKindEdit SelectedKind { get; private set; } + + private readonly FactionViewScreen factionView; + private FactionEditScreen factionEdit; + private PawnEditScreen pawnEdit; + + public TotalControlController(Dialog_TotalControl owner, Preset initialPreset) + { + Owner = owner; + SelectedPreset = ResolveInitialPreset(initialPreset); + factionView = new FactionViewScreen(this); + } + + public static Preset ResolveInitialPreset(Preset given) + { + if (given != null) + return given; + + if (!MySettings.ActivePreset.NullOrEmpty()) + { + Preset active = Preset.LoadedPresets.FirstOrDefault(p => p.GUID == MySettings.ActivePreset); + if (active != null) + return active; + } + + return Preset.LoadedPresets.FirstOrDefault(); + } + + // ---------------------------------------------------------------- navigation + + public void SelectPreset(Preset p) + { + SelectedPreset = p; + SelectedFaction = null; + SelectedKind = null; + factionEdit = null; + DisposePawnEdit(); + TCEditContext.CurrentFaction = null; + Screen = TCScreen.FactionView; + } + + public void OpenFaction(FactionEdit fe) + { + if (fe == null) + return; + + if (SelectedFaction != fe) + { + SelectedFaction = fe; + SelectedKind = null; + factionEdit = new FactionEditScreen(this, fe); + DisposePawnEdit(); + } + + TCEditContext.CurrentFaction = fe; + Screen = TCScreen.FactionEdit; + } + + public void OpenKind(PawnKindEdit pke) + { + if (pke == null) + return; + + if (SelectedKind != pke) + { + DisposePawnEdit(); + SelectedKind = pke; + pawnEdit = new PawnEditScreen(this, SelectedFaction, pke); + } + + Screen = TCScreen.PawnEdit; + } + + public void GoTo(TCScreen s) + { + if (IsEnabled(s)) + Screen = s; + } + + public bool IsEnabled(TCScreen s) => + s switch + { + TCScreen.FactionView => true, + TCScreen.FactionEdit => SelectedFaction is { DeletedOrClosed: false }, + TCScreen.PawnEdit => SelectedKind is { DeletedOrClosed: false }, + _ => false, + }; + + public bool HandleEscape() + { + switch (Screen) + { + case TCScreen.PawnEdit: + Screen = TCScreen.FactionEdit; + return true; + case TCScreen.FactionEdit: + Screen = TCScreen.FactionView; + return true; + default: + return false; // at Home -> let the window close + } + } + + public void Dispose() + { + DisposePawnEdit(); + TCEditContext.CurrentFaction = null; + } + + private void DisposePawnEdit() + { + pawnEdit?.Dispose(); + pawnEdit = null; + } + + // ------------------------------------------------------------------- drawing + + public void Draw(Rect inRect) + { + // Validate the selection context; fall back if something was deleted underneath us. + if (Screen == TCScreen.PawnEdit && SelectedKind is not { DeletedOrClosed: false }) + { + SelectedKind = null; + DisposePawnEdit(); + Screen = IsEnabled(TCScreen.FactionEdit) ? TCScreen.FactionEdit : TCScreen.FactionView; + } + if (Screen == TCScreen.FactionEdit && SelectedFaction is not { DeletedOrClosed: false }) + { + SelectedFaction = null; + SelectedKind = null; + factionEdit = null; + DisposePawnEdit(); + Screen = TCScreen.FactionView; + } + + Rect titleBar = new(inRect.x, inRect.y, inRect.width, 38f); + Rect tabStrip = new(inRect.x, titleBar.yMax + 2f, inRect.width, 32f); + Rect crumb = new(inRect.x, tabStrip.yMax + 4f, inRect.width, 20f); + Rect content = new(inRect.x, crumb.yMax + 6f, inRect.width, inRect.yMax - (crumb.yMax + 6f)); + + DrawTitleBar(titleBar); + DrawTabStrip(tabStrip); + DrawBreadcrumb(crumb); + + switch (Screen) + { + case TCScreen.FactionView: + factionView.Draw(content); + break; + case TCScreen.FactionEdit: + factionEdit?.Draw(content); + break; + case TCScreen.PawnEdit: + pawnEdit?.Draw(content); + break; + } + } + + private void DrawTitleBar(Rect rect) + { + Text.Font = GameFont.Medium; + Rect titleRect = new(rect.x, rect.y, 360f, rect.height); + Widgets.Label(titleRect, "FactionLoadout_TC_Title".Translate()); + Text.Font = GameFont.Small; + + // Active-preset dropdown. Leave ~34px on the right for the window's close X. + const float dropdownW = 300f; + Rect dropdown = new(rect.xMax - dropdownW - 34f, rect.y + 4f, dropdownW, 30f); + string presetLabel = SelectedPreset != null ? "FactionLoadout_TC_PresetLabel".Translate(SelectedPreset.Name) : "FactionLoadout_TC_NoPreset".Translate(); + if (Widgets.ButtonText(dropdown, presetLabel)) + OpenPresetDropdown(); + } + + private void OpenPresetDropdown() + { + List options = new(); + foreach (Preset p in Preset.LoadedPresets) + { + Preset captured = p; + bool active = MySettings.ActivePreset == p.GUID; + string label = active ? $"{p.Name} ({"FactionLoadout_Active".Translate()})" : p.Name; + options.Add(new FloatMenuOption(label, () => SelectPreset(captured))); + } + + if (options.Count == 0) + options.Add(new FloatMenuOption("FactionLoadout_NothingHere".Translate(), null)); + + Find.WindowStack.Add(new FloatMenu(options)); + } + + private void DrawTabStrip(Rect rect) + { + const float tabW = 170f; + const float gap = 4f; + DrawTab(new Rect(rect.x, rect.y, tabW, rect.height), TCScreen.FactionView, "FactionLoadout_Tab_FactionView".Translate()); + DrawTab(new Rect(rect.x + (tabW + gap), rect.y, tabW, rect.height), TCScreen.FactionEdit, "FactionLoadout_Tab_FactionEdit".Translate()); + DrawTab(new Rect(rect.x + (tabW + gap) * 2f, rect.y, tabW, rect.height), TCScreen.PawnEdit, "FactionLoadout_Tab_PawnEdit".Translate()); + Widgets.DrawLineHorizontal(rect.x, rect.yMax, rect.width); + } + + private void DrawTab(Rect rect, TCScreen screen, string label) + { + bool selected = Screen == screen; + Color bg = selected ? new Color32(49, 82, 133, 255) : new Color(0.2f, 0.2f, 0.2f, 1f); + + if (!IsEnabled(screen)) + { + Widgets.DrawBoxSolid(rect, new Color(0.14f, 0.14f, 0.14f, 1f)); + GUI.color = new Color(1f, 1f, 1f, 0.35f); + Text.Anchor = TextAnchor.MiddleCenter; + Widgets.Label(rect, $"{label}"); + Text.Anchor = TextAnchor.UpperLeft; + GUI.color = Color.white; + return; + } + + Rect r = rect; + if (Widgets.CustomButtonText(ref r, $"{label}", bg, Color.white, Color.white)) + GoTo(screen); + } + + private void DrawBreadcrumb(Rect rect) + { + Text.Font = GameFont.Tiny; + float x = rect.x; + + // Home is always clickable (unless already there). + DrawCrumbSegment(ref x, rect, "FactionLoadout_Breadcrumb_Home".Translate(), Screen != TCScreen.FactionView, () => GoTo(TCScreen.FactionView)); + + if (SelectedFaction is { DeletedOrClosed: false }) + { + DrawCrumbSeparator(ref x, rect); + DrawCrumbSegment(ref x, rect, SelectedFaction.Faction.LabelCap.ToString(), Screen != TCScreen.FactionEdit, () => GoTo(TCScreen.FactionEdit)); + + if (SelectedKind is { DeletedOrClosed: false }) + { + DrawCrumbSeparator(ref x, rect); + string kindName = SelectedKind.IsGlobal ? "FactionLoadout_GlobalLabel".Translate().ToString() : SelectedKind.Def?.LabelCap.ToString(); + DrawCrumbSegment(ref x, rect, kindName, clickable: false, onClick: null); + } + } + + Text.Font = GameFont.Small; + } + + private static void DrawCrumbSegment(ref float x, Rect bar, string text, bool clickable, Action onClick) + { + float w = Text.CalcSize(text).x; + Rect r = new(x, bar.y, w, bar.height); + GUI.color = clickable ? new Color(0.6f, 0.8f, 1f) : Color.white; + Widgets.Label(r, text); + if (clickable) + { + Widgets.DrawHighlightIfMouseover(r); + if (Widgets.ButtonInvisible(r)) + onClick?.Invoke(); + } + GUI.color = Color.white; + x += w; + } + + private static void DrawCrumbSeparator(ref float x, Rect bar) + { + const string sep = " › "; + float w = Text.CalcSize(sep).x; + GUI.color = new Color(0.6f, 0.6f, 0.6f); + Widgets.Label(new Rect(x, bar.y, w, bar.height), sep); + GUI.color = Color.white; + x += w; + } +} diff --git a/Common/Languages/English/Keyed/FactionLoadout_Keys.xml b/Common/Languages/English/Keyed/FactionLoadout_Keys.xml index a166017..9df1739 100644 --- a/Common/Languages/English/Keyed/FactionLoadout_Keys.xml +++ b/Common/Languages/English/Keyed/FactionLoadout_Keys.xml @@ -403,4 +403,22 @@ Add new faction edit... WARNING: This preset has missing factions, probably because they are added by a mod that is not loaded: Missing factions + + + Total Control + Preset: {0} + (no preset selected) + Faction + Pawn: {0} + Generating preview... + Preview failed to generate. Click Regenerate to retry. + Regenerate + Headgear + Clothes + Faction View + Faction Edit + Pawn Edit + Home + Open Total Control + Total Control opens in a fullscreen editor where you can manage presets, edit factions, and customise pawns with a live preview.