forked from zeobviouslyfakeacc/ModSettings
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathModSettingsMenu.cs
More file actions
64 lines (54 loc) · 2.65 KB
/
ModSettingsMenu.cs
File metadata and controls
64 lines (54 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using Il2Cpp;
using UnityEngine;
namespace ModSettings {
internal static class ModSettingsMenu {
private static readonly HashSet<ModSettingsBase> mainMenuSettings = new HashSet<ModSettingsBase>();
private static readonly HashSet<ModSettingsBase> inGameSettings = new HashSet<ModSettingsBase>();
private static readonly SortedDictionary<string, List<ModSettingsBase>> settingsByModName = new SortedDictionary<string, List<ModSettingsBase>>();
private static ModSettingsGUI? modSettingsGUI = null;
internal static void RegisterSettings(ModSettingsBase modSettings, string modName, MenuType menuType) {
if (string.IsNullOrEmpty(modName)) {
throw new ArgumentException("[ModSettings] Mod name must be a non-empty string", "modName");
} else if (mainMenuSettings.Contains(modSettings) || inGameSettings.Contains(modSettings)) {
throw new ArgumentException("[ModSettings] Cannot add the same settings object multiple times", "modSettings");
} else if (modSettingsGUI != null) {
throw new InvalidOperationException("[ModSettings] RegisterSettings called after the GUI has been built.\n"
+ "Call this method before Panel_CustomXPSetup::Awake, preferably from your mod's OnLoad method");
}
if (menuType != MenuType.InGameOnly)
mainMenuSettings.Add(modSettings);
if (menuType != MenuType.MainMenuOnly)
inGameSettings.Add(modSettings);
if (settingsByModName.TryGetValue(modName, out List<ModSettingsBase>? settingsList)) {
settingsList.Add(modSettings);
} else {
settingsList = new List<ModSettingsBase> { modSettings };
settingsByModName.Add(modName, settingsList);
}
}
internal static void BuildGUI(Panel_OptionsMenu panel) {
GameObject modSettingsTab = ModSettingsGUIBuilder.CreateModSettingsTab(panel);
modSettingsGUI = modSettingsTab.AddComponent<ModSettingsGUI>();
foreach (KeyValuePair<string, List<ModSettingsBase>> entry in settingsByModName) {
ModSettingsGUIBuilder guiBuilder = new ModSettingsGUIBuilder(entry.Key, modSettingsGUI);
foreach (ModSettingsBase modSettings in entry.Value) {
guiBuilder.AddSettings(modSettings);
}
}
}
internal static void SetSettingsVisible(bool isMainMenu, bool visible) {
HashSet<ModSettingsBase> settings = isMainMenu ? mainMenuSettings : inGameSettings;
foreach (ModSettingsBase modSettings in settings) {
modSettings.SetMenuVisible(visible);
}
}
internal static bool HasVisibleModSettings(bool isMainMenu) {
HashSet<ModSettingsBase> settings = isMainMenu ? mainMenuSettings : inGameSettings;
foreach (ModSettingsBase modSettings in settings) {
if (modSettings.IsUserVisible())
return true;
}
return false;
}
}
}