diff options
| author | 2026-06-29 19:49:35 -0400 | |
|---|---|---|
| committer | 2026-06-29 19:49:35 -0400 | |
| commit | b79f34e096629e2cc7b6607a438602cfd6322cbe (patch) | |
| tree | dd1c3e51928db3f382573d3ef63366ad704497e5 | |
| parent | 6374a4b274e5048c56a820402275e28cf5ac1d39 (diff) | |
| download | WorldTuningTool-b79f34e096629e2cc7b6607a438602cfd6322cbe.tar.gz WorldTuningTool-b79f34e096629e2cc7b6607a438602cfd6322cbe.tar.bz2 WorldTuningTool-b79f34e096629e2cc7b6607a438602cfd6322cbe.zip | |
Refactor the way global overrides are changed
Signed-off-by: Andrew Opalach <andrew@akon.city>
| -rwxr-xr-x | Plugin.cs | 96 |
1 files changed, 71 insertions, 25 deletions
@@ -151,13 +151,27 @@ namespace WorldTuningTool return ConfigManager.GetConfig<Config>(Instance!);
}
+ static void reorderConfig(Config config, List<Override> overrides)
+ {
+ List<Override> 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<Override> tmpOverrides = config.Overrides[globalStage];
config.Overrides.Remove(globalStage);
ConfigManager.SaveConfig<Config>(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<Override>());
- }
if (config.SelectedGlobal == "")
{
config.SelectedGlobal = "Base";
@@ -2451,7 +2463,19 @@ namespace WorldTuningTool {
config.Globals[selectedGlobal] = new List<Override>();
}
- config.Overrides[globalStage] = config.Globals[selectedGlobal];
+ // config.Overrides shouldn't contain Global here.
+ if (!config.Overrides.ContainsKey(globalStage))
+ {
+ config.Overrides.Add(globalStage, new List<Override>());
+ }
+ 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<Override> HandleGlobalChange()
+ private void HandleGlobalChange()
{
Config config = getConfig();
+
+ // Unset current Global overrides.
List<Override>? stageOverrides = maybeGetStageOverrides(config);
List<Override> 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<Override> 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"))
@@ -3297,6 +3331,14 @@ namespace WorldTuningTool }
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);
ImGui.Text("(Not Saved)");
@@ -3401,6 +3443,8 @@ namespace WorldTuningTool typedSetName = selectedSet;
}
ImGui.PopItemWidth();
+
+ bool setOrderChanged = false;
List<Override> 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();
@@ -3469,6 +3511,10 @@ namespace WorldTuningTool }
if (setOrderChanged)
{
+ configState |= SetNotSaved;
+ }
+ if ((configState & SetNotSaved) == SetNotSaved)
+ {
ImGui.SameLine();
ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f);
ImGui.Text("(Not Saved)");
|