From b79f34e096629e2cc7b6607a438602cfd6322cbe Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Mon, 29 Jun 2026 19:49:35 -0400 Subject: Refactor the way global overrides are changed Signed-off-by: Andrew Opalach --- Plugin.cs | 96 ++++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 71 insertions(+), 25 deletions(-) (limited to 'Plugin.cs') diff --git a/Plugin.cs b/Plugin.cs index e9ecb56..70d69ed 100755 --- a/Plugin.cs +++ b/Plugin.cs @@ -151,13 +151,27 @@ namespace WorldTuningTool return ConfigManager.GetConfig(Instance!); } + static void reorderConfig(Config config, List overrides) + { + List selectedGlobals = config.Globals[selectedGlobal]; + selectedGlobals.Clear(); + foreach (Override ovG in overrides) + { + selectedGlobals.Add(ovG); + } + } + + private static int configState = 0; + private const int SelectedNotSaved = 1; + private const int SetNotSaved = (1 << 1); + static void saveConfig(Config config) { + List tmpOverrides = config.Overrides[globalStage]; config.Overrides.Remove(globalStage); ConfigManager.SaveConfig(Instance!); - config.Overrides[globalStage] = config.Globals[selectedGlobal]; - selectedOrderChanged = false; - setOrderChanged = false; + config.Overrides[globalStage] = tmpOverrides; + configState = 0; } private const float defaultParamWidth = 0.215f; @@ -177,12 +191,10 @@ namespace WorldTuningTool private static StageExt selectedStage = globalStage; private static StageExt previousStage = selectedStage; - private static bool selectedOrderChanged = false; private static string selectedGlobal = ""; private static string selectedSet = ""; - private static bool setOrderChanged = false; private static bool renamingSet = false; private static string typedSetName = ""; @@ -931,7 +943,7 @@ namespace WorldTuningTool EndTransition(); } setOverrides.Add(ov); - setOrderChanged = true; + configState |= SetNotSaved; } if (ImGui.BeginItemTooltip()) { @@ -962,7 +974,11 @@ namespace WorldTuningTool EndTransition(); } selectedOverrides.Add(ov); - selectedOrderChanged = true; + if (selectedStage == globalStage) + { + reorderConfig(config, selectedOverrides); + } + configState |= SelectedNotSaved; } if (ImGui.BeginItemTooltip()) { @@ -1247,7 +1263,7 @@ namespace WorldTuningTool } Set(); } - setOrderChanged = true; + configState |= SetNotSaved; } else { @@ -1261,7 +1277,7 @@ namespace WorldTuningTool } Set(); } - selectedOrderChanged = true; + configState |= SelectedNotSaved; } EndTransition(); Assert(!superseded == isSet); @@ -2438,10 +2454,6 @@ namespace WorldTuningTool sMhScene = SingletonManager.GetSingleton("sMhScene")!; sLightProbes = SingletonManager.GetSingleton("sLightProbes")!; Config config = getConfig(); - if (!config.Overrides.ContainsKey(globalStage)) - { - config.Overrides.Add(globalStage, new List()); - } if (config.SelectedGlobal == "") { config.SelectedGlobal = "Base"; @@ -2451,7 +2463,19 @@ namespace WorldTuningTool { config.Globals[selectedGlobal] = new List(); } - config.Overrides[globalStage] = config.Globals[selectedGlobal]; + // config.Overrides shouldn't contain Global here. + if (!config.Overrides.ContainsKey(globalStage)) + { + config.Overrides.Add(globalStage, new List()); + } + else + { + config.Overrides[globalStage].Clear(); + } + foreach (Override ovG in config.Globals[selectedGlobal]) + { + config.Overrides[globalStage].Add(ovG); + } foreach (StageExt area in Config.OrderedStages) { if (!config.Overrides.ContainsKey(area)) @@ -3068,9 +3092,11 @@ namespace WorldTuningTool } } - private List HandleGlobalChange() + private void HandleGlobalChange() { Config config = getConfig(); + + // Unset current Global overrides. List? stageOverrides = maybeGetStageOverrides(config); List globalOverrides = config.Overrides[globalStage]; foreach (Override ovG in globalOverrides) @@ -3081,8 +3107,17 @@ namespace WorldTuningTool ovG.Unset(); } } - config.Overrides[globalStage] = config.Globals[selectedGlobal]; - globalOverrides = config.Overrides[globalStage]; + + // Drop current Global overrides. + globalOverrides.Clear(); + + // Rebuild from new selections. + foreach (Override ovG in config.Globals[selectedGlobal]) + { + globalOverrides.Add(ovG); + } + + // Set new Global overrides. foreach (Override ovG in globalOverrides) { bool superseded = selectedOverrideSuperseded(config, null, stageOverrides, ovG.Param); @@ -3091,7 +3126,6 @@ namespace WorldTuningTool ovG.Set(); } } - return globalOverrides; } private void HandleAreaChange(StageExt stage) @@ -3194,6 +3228,7 @@ namespace WorldTuningTool selectedStage = globalStage; } + bool selectedOrderChanged = false; List selectedOverrides = config.Overrides[selectedStage]; if (ImGui.Button("Add override")) { @@ -3233,7 +3268,7 @@ namespace WorldTuningTool if (prevGlobal != selectedGlobal) { BeginTransition(); - selectedOverrides = HandleGlobalChange(); + HandleGlobalChange(); EndTransition(); config.SelectedGlobal = selectedGlobal; saveConfig(config); @@ -3251,16 +3286,15 @@ namespace WorldTuningTool ImGui.SameLine(); bool requestDown = ImGui.Button("▼"); ImGui.SameLine(); + selectedOrderChanged |= requestRemove || requestUp || requestDown; if (requestDown && i < selectedOverrides.Count - 1) { (selectedOverrides[i], selectedOverrides[i + 1]) = (selectedOverrides[i + 1], selectedOverrides[i]); - selectedOrderChanged = true; } ovS.Draw(false, selectedOverrides, stageOverrides, globalOverrides, superseded, width); if (requestUp && i > 0) { (selectedOverrides[i], selectedOverrides[i - 1]) = (selectedOverrides[i - 1], selectedOverrides[i]); - selectedOrderChanged = true; } if (requestRemove) { @@ -3275,9 +3309,9 @@ namespace WorldTuningTool EndTransition(); } selectedOverrides.RemoveAt(i); - selectedOrderChanged = true; i--; } + ImGui.PopID(); } if (ImGui.Button("Save")) @@ -3296,6 +3330,14 @@ namespace WorldTuningTool saveConfig(config); } if (selectedOrderChanged) + { + if (selectedStage == globalStage) + { + reorderConfig(config, selectedOverrides); + } + configState |= SelectedNotSaved; + } + if ((configState & SelectedNotSaved) == SelectedNotSaved) { ImGui.SameLine(); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); @@ -3401,6 +3443,8 @@ namespace WorldTuningTool typedSetName = selectedSet; } ImGui.PopItemWidth(); + + bool setOrderChanged = false; List setOverrides = config.Sets[selectedSet]; if (ImGui.Button("Add override")) { @@ -3420,16 +3464,15 @@ namespace WorldTuningTool ImGui.SameLine(); bool requestDown = ImGui.Button("▼"); ImGui.SameLine(); + setOrderChanged |= requestRemove || requestUp || requestDown; if (requestDown && i < setOverrides.Count - 1) { (setOverrides[i], setOverrides[i + 1]) = (setOverrides[i + 1], setOverrides[i]); - setOrderChanged = true; } ovP.Draw(true, setOverrides, stageOverrides, globalOverrides, superseded, width); if (requestUp && i > 0) { (setOverrides[i], setOverrides[i - 1]) = (setOverrides[i - 1], setOverrides[i]); - setOrderChanged = true; } if (requestRemove) { @@ -3447,7 +3490,6 @@ namespace WorldTuningTool EndTransition(); } setOverrides.RemoveAt(i); - setOrderChanged = true; i--; } ImGui.PopID(); @@ -3468,6 +3510,10 @@ namespace WorldTuningTool saveConfig(config); } if (setOrderChanged) + { + configState |= SetNotSaved; + } + if ((configState & SetNotSaved) == SetNotSaved) { ImGui.SameLine(); ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f); -- cgit v1.2.3-101-g0448