4using System.Text.RegularExpressions;
6using BepInEx.Configuration;
15internal static class ModListWindow
17 public static bool isOpen =
true;
21 private static string searchString =
"";
23 public static void Initialize()
25 var pContainers = PluginConfigSearcher.GetPluginSettings();
27 foreach (var pluginContainer
in pContainers)
29 pluginContainer.PluginName =
30 PrettifyName(pluginContainer.PluginInfo.Metadata.Name);
34 pluginContainers = pContainers
35 .OrderBy(x => x.PluginName, StringComparer.OrdinalIgnoreCase)
39 string PrettifyName(
string input)
41 input = Regex.Replace(input,
"([a-z])([A-Z])",
"$1 $2");
42 input = Regex.Replace(input,
"([A-Z])([A-Z][a-z])",
"$1 $2");
43 input = Regex.Replace(input,
@"\s+",
" ");
44 input = Regex.Replace(input,
@"([A-Z]\.)\s([A-Z]\.)",
"$1$2");
50 public static void Draw(ImGui gui,
bool open)
55 if (!gui.BeginWindow(
"Mod list", ref isOpen,
new ImSize(250, 500), ImWindowFlag.None))
59 gui.Separator(
"Mods");
60 gui.TextEdit(ref searchString, hint:
"Search for mod");
64 for (
int i = 0; i < pluginContainers.Length; i++)
66 ref var pluginContainer = ref pluginContainers[i];
67 if (pluginContainer ==
null || pluginContainer.PluginInfo ==
null)
71 if (API ==
null || (API !=
null && API.ModTab ==
null))
73 var pluginName = pluginContainer.PluginInfo.Metadata.Name;
74 if (pluginName.IsNullOrWhiteSpace())
77 if (searchString.Trim() !=
string.Empty)
79 if (!pluginName.Contains(searchString, StringComparison.OrdinalIgnoreCase))
83 gui.PushId(pluginContainer.PluginInfo.Metadata.GUID);
85 if (gui.Button(pluginName))
87 pluginContainer.IsWindowOpen = !pluginContainer.IsWindowOpen;
94 if (API.ModTab ==
null)
97 if (searchString.Trim() !=
string.Empty)
99 if (!API.ModTab.DisplayName.Contains(searchString, StringComparison.OrdinalIgnoreCase))
103 if (gui.BeginTreeNode(API.ModTab.DisplayName))
105 API.ModTab.DrawSubMenu(gui);
115 DrawConfigWindows(gui);
118 public static void CloseConfigWindows()
120 for (
int i = 0; i < pluginContainers.Length; i++)
122 ref var pluginContainer = ref pluginContainers[i];
123 if (pluginContainer ==
null)
126 pluginContainer.IsWindowOpen =
false;
130 private static void DrawConfigWindows(ImGui gui)
132 for (
int i = 0; i < pluginContainers.Length; i++)
134 ref var pluginContainer = ref pluginContainers[i];
135 if (pluginContainer ==
null || pluginContainer.PluginInfo ==
null)
138 if (!pluginContainer.IsWindowOpen)
141 var pluginName = pluginContainer.PluginInfo.Metadata.Name;
142 if (pluginName.IsNullOrWhiteSpace())
145 if (!gui.BeginWindow(pluginName +
" " + pluginContainer.PluginInfo.Metadata.Version, ref pluginContainer.IsWindowOpen,
new ImSize(500, 500), ImWindowFlag.None))
148 foreach (var configSection
in pluginContainer.ConfigSection)
150 if (!configSection.Section.IsNullOrWhiteSpace())
153 gui.Separator(configSection.Section);
156 foreach (var configEntry
in configSection.ConfigEntries)
166 public static void HandleInput(ImGui gui,
bool open) { }
static void DrawConfigEntry(ImGui gui, ConfigEntryBase configEntry)