summaryrefslogtreecommitdiff
path: root/Plugin.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Plugin.cs')
-rwxr-xr-xPlugin.cs207
1 files changed, 172 insertions, 35 deletions
diff --git a/Plugin.cs b/Plugin.cs
index 8fb361b..e76d724 100755
--- a/Plugin.cs
+++ b/Plugin.cs
@@ -2,6 +2,7 @@
//#define OVERSIZED_SHADOW_MAP
//#define SHADER_FEATURES
//#define RESOURCE_ADJUSTMENT
+//#define DO_COMMON
using System.Numerics;
using System.Globalization;
@@ -141,9 +142,70 @@ namespace WorldTuningTool
return ConfigManager.GetConfig<Config>(Instance!);
}
- static void saveConfig()
+#if DO_COMMON
+ private static bool overridesContainsCommon(IEnumerable<Override> overrides, Override ovR)
{
+ foreach (Override ov in overrides)
+ {
+ if (ov.Equals(ovR))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static Override? removeIfOverridesContainsParam(IList<Override> overrides, Parameter param)
+ {
+ for (int i = 0; i < overrides.Count; i++)
+ {
+ Override ov = overrides[i];
+ if (ov.Param == param)
+ {
+ overrides.RemoveAt(i);
+ return ov;
+ }
+ }
+ return null;
+ }
+#endif
+
+ static void saveConfig(Config config)
+ {
+ config.Overrides.Remove(globalStage);
+#if DO_COMMON
+ config.CommonGlobals.Clear();
+ foreach (Override ov in config.Globals[selectedGlobal])
+ {
+ bool common = true;
+ foreach ((string name, List<Override> overrides) in config.Globals)
+ {
+ if (!overridesContainsCommon(overrides, ov))
+ {
+ common = false;
+ }
+ }
+ if (common) config.CommonGlobals.Add(ov);
+ }
+ Dictionary<string, List<Override>> allRemoved = new Dictionary<string, List<Override>>();
+ foreach ((string name, List<Override> overrides) in config.Globals)
+ {
+ List<Override> removed = new List<Override>();
+ foreach (Override ovC in config.CommonGlobals)
+ {
+ removed.Add(removeIfOverridesContainsParam(overrides, ovC.Param!)!);
+ }
+ allRemoved[name] = removed;
+ }
+#endif
ConfigManager.SaveConfig<Config>(Instance!);
+#if DO_COMMON
+ foreach ((string name, List<Override> overrides) in config.Globals)
+ {
+ overrides.InsertRange(0, allRemoved[name]);
+ }
+#endif
+ config.Overrides[globalStage] = config.Globals[selectedGlobal];
selectedOrderChanged = false;
setOrderChanged = false;
}
@@ -167,6 +229,8 @@ namespace WorldTuningTool
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;
@@ -1142,6 +1206,20 @@ namespace WorldTuningTool
valueInt = i1;
Save();
}
+#if DO_COMMON
+ public Override(Override c)
+ {
+ Param = c.Param;
+ valueV = c.valueV;
+ valueInt = c.valueInt;
+ Save();
+ }
+
+ public bool Equals(Override r)
+ {
+ return r.Param == Param && (r.sValueV, r.sValueInt) == (sValueV, sValueInt);
+ }
+#endif
public void Save()
{
@@ -2260,6 +2338,25 @@ namespace WorldTuningTool
{
config.Overrides.Add(globalStage, new List<Override>());
}
+ if (config.SelectedGlobal == "")
+ {
+ config.SelectedGlobal = "Base";
+ }
+ selectedGlobal = config.SelectedGlobal;
+ if (!config.Globals.ContainsKey(selectedGlobal))
+ {
+ config.Globals[selectedGlobal] = new List<Override>();
+ }
+#if DO_COMMON
+ foreach ((string name, List<Override> overrides) in config.Globals)
+ {
+ foreach (Override ov in config.CommonGlobals)
+ {
+ overrides.Insert(0, new Override(ov));
+ }
+ }
+#endif
+ config.Overrides[globalStage] = config.Globals[selectedGlobal];
foreach (StageExt area in Config.OrderedStages)
{
if (!config.Overrides.ContainsKey(area))
@@ -2267,7 +2364,6 @@ namespace WorldTuningTool
config.Overrides.Add(area, new List<Override>());
}
}
- BeginTransition();
List<Override> globalOverrides = config.Overrides[globalStage];
foreach (Override ovG in globalOverrides)
{
@@ -2281,17 +2377,7 @@ namespace WorldTuningTool
break;
}
}
- if (!config.Sets.ContainsKey(config.SelectedPreset))
- {
- config.SelectedPreset = "";
- }
- selectedSet = config.SelectedPreset;
- if (selectedSet != "")
- {
- HandleSetChange("", globalOverrides, maybeGetStageOverrides(config));
- }
- EndTransition();
- saveConfig();
+ saveConfig(config);
}
// It's hard to test, but I'm pretty sure just updating stepTime isn't enough for a higher rate to look right.
@@ -2821,6 +2907,32 @@ namespace WorldTuningTool
}
}
+ private List<Override> HandleGlobalChange()
+ {
+ Config config = getConfig();
+ List<Override>? stageOverrides = maybeGetStageOverrides(config);
+ List<Override> globalOverrides = config.Overrides[globalStage];
+ foreach (Override ovG in globalOverrides)
+ {
+ bool superseded = selectedOverrideSuperseded(config, null, stageOverrides, ovG.Param);
+ if (!superseded)
+ {
+ ovG.Unset();
+ }
+ }
+ config.Overrides[globalStage] = config.Globals[selectedGlobal];
+ globalOverrides = config.Overrides[globalStage];
+ foreach (Override ovG in globalOverrides)
+ {
+ bool superseded = selectedOverrideSuperseded(config, null, stageOverrides, ovG.Param);
+ if (!superseded)
+ {
+ ovG.Set();
+ }
+ }
+ return globalOverrides;
+ }
+
private void HandleAreaChange(StageExt stage)
{
Config config = getConfig();
@@ -2899,6 +3011,11 @@ namespace WorldTuningTool
ImGui.EndCombo();
}
ImGui.SameLine();
+ if (ImGui.Button("Global"))
+ {
+ selectedStage = globalStage;
+ }
+ ImGui.SameLine();
Config config = getConfig();
bool invalidStage = !config.Overrides.ContainsKey(currentStage);
if (invalidStage)
@@ -2915,27 +3032,51 @@ namespace WorldTuningTool
ImGui.PopStyleVar();
ImGui.PopItemFlag();
}
- ImGui.SameLine();
- if (ImGui.Button("Global"))
+
+ List<Override> selectedOverrides = config.Overrides[selectedStage];
+ if (ImGui.Button("Add override"))
{
- selectedStage = globalStage;
+ Override ov = new Override();
+ if (selectedStage == currentStage || selectedStage == globalStage)
+ {
+ ov.Set(); // Empty override never superseded.
+ }
+ selectedOverrides.Add(ov);
+ selectedOrderChanged = true;
}
- List<Override> selectedOverrides = config.Overrides[selectedStage];
List<Override>? stageOverrides = maybeGetStageOverrides(config);
List<Override>? globalOverrides = null;
if (selectedStage != globalStage)
{
globalOverrides = config.Overrides[globalStage];
}
- if (ImGui.Button("Add override"))
+ else
{
- Override ov = new Override();
- if (selectedStage == currentStage || selectedStage == globalStage)
+ ImGui.SameLine();
+ string prevGlobal = selectedGlobal;
+ ImGui.Text("Preset:");
+ ImGui.SameLine();
+ ImGui.SetCursorPos(ImGui.GetCursorPos() - new Vector2(5.0f, 0.0f));
+ if (ImGui.BeginCombo("##Preset", selectedGlobal))
{
- ov.Set(); // Empty override never superseded.
+ foreach ((string name, List<Override> overrides) in config.Globals)
+ {
+ bool isSelected = name == selectedGlobal;
+ if (ImGui.Selectable(name, isSelected))
+ {
+ selectedGlobal = name;
+ }
+ }
+ ImGui.EndCombo();
+ }
+ if (prevGlobal != selectedGlobal)
+ {
+ BeginTransition();
+ selectedOverrides = HandleGlobalChange();
+ EndTransition();
+ config.SelectedGlobal = selectedGlobal;
+ saveConfig(config);
}
- selectedOverrides.Add(ov);
- selectedOrderChanged = true;
}
ImGui.PopItemWidth();
for (int i = 0; i < selectedOverrides.Count; i++)
@@ -2991,7 +3132,7 @@ namespace WorldTuningTool
}
ovS.Save();
}
- saveConfig();
+ saveConfig(config);
}
if (selectedOrderChanged)
{
@@ -3028,7 +3169,7 @@ namespace WorldTuningTool
ImGui.PushItemFlag(ImGuiItemFlags.Disabled, true);
ImGui.PushStyleVar(ImGuiStyleVar.Alpha, ImGui.GetStyle().Alpha * 0.5f);
}
- if (ImGui.BeginCombo("##Sets", selectedSet))
+ if (ImGui.BeginCombo("##Set", selectedSet))
{
if (ImGui.Selectable("(None)", false))
{
@@ -3049,8 +3190,6 @@ namespace WorldTuningTool
BeginTransition();
HandleSetChange(prevSet, globalOverrides, stageOverrides);
EndTransition();
- config.SelectedPreset = selectedSet;
- saveConfig();
}
if (renamingSet)
{
@@ -3086,8 +3225,6 @@ namespace WorldTuningTool
config.Sets.Remove(selectedSet);
config.Sets[setName] = tmpOverrides;
selectedSet = setName;
- config.SelectedPreset = selectedSet;
- saveConfig();
}
renamingSet = false;
}
@@ -3167,7 +3304,7 @@ namespace WorldTuningTool
}
ovP.Save();
}
- saveConfig();
+ saveConfig(config);
}
if (setOrderChanged)
{
@@ -3207,7 +3344,7 @@ namespace WorldTuningTool
}
patches.FullResolutionVolumeBlur = fullResVolumeBlur;
config.Patches = patches;
- saveConfig();
+ saveConfig(config);
}
if (ImGui.BeginItemTooltip())
{
@@ -3227,7 +3364,7 @@ namespace WorldTuningTool
}
patches.HigherThanHighestVolumeRendering = higherVolumeQuality;
config.Patches = patches;
- saveConfig();
+ saveConfig(config);
}
if (ImGui.BeginItemTooltip())
{
@@ -3247,7 +3384,7 @@ namespace WorldTuningTool
}
patches.DisableLODLimits = disableLODLimits;
config.Patches = patches;
- saveConfig();
+ saveConfig(config);
}
if (ImGui.BeginItemTooltip())
{
@@ -3267,7 +3404,7 @@ namespace WorldTuningTool
}
patches.LargerFoliageSwayRange = largerFoliageSwayRange;
config.Patches = patches;
- saveConfig();
+ saveConfig(config);
}
if (ImGui.BeginItemTooltip())
{
@@ -3287,7 +3424,7 @@ namespace WorldTuningTool
}
patches.DisableReducedRateAnimations = disableReducedRateAnimations;
config.Patches = patches;
- saveConfig();
+ saveConfig(config);
}
if (ImGui.BeginItemTooltip())
{