summaryrefslogtreecommitdiff
path: root/Plugin.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Plugin.cs')
-rwxr-xr-xPlugin.cs96
1 files changed, 71 insertions, 25 deletions
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<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)");