25 public const string GUID =
"com.monksilly.WKLib";
26 public const string NAME =
"WKLib";
29 private static Harmony harmony =
null;
34 WKLog.Initialize(Logger);
36 WKLog.Debug($
"Initalizing reflection...");
37 ReflectionUtility.Initialize();
38 WKLog.Debug($
"Initalizing input utility...");
41 gameObject.hideFlags = HideFlags.HideAndDontSave;
43 harmony =
new Harmony(
GUID);
45 foreach (var type
in typeof(
WKLibPlugin).Assembly.GetTypes())
47 if (type.GetCustomAttribute<PatchOnEntryAttribute>() !=
null)
48 harmony.PatchAll(type);
53 WKLog.Info($
"Plugin {NAME} v{VERSION} is loaded!");
55 SceneManager.sceneLoaded -= OnSceneLoaded;
56 SceneManager.sceneLoaded += OnSceneLoaded;
59 private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
64 if (scene.name ==
"Main-Menu")
66 var versionText = GameObject.Find(
"Canvas - Main Menu/Main Menu/Version Text")?.GetComponent<TextMeshProUGUI>();
67 if (versionText is not
null)
69 versionText.text += $
" (wklib-{VERSION}) ({BepInEx.Bootstrap.Chainloader.PluginInfos.Count} Mods)";
72 var updateInfoGO = GameObject.Find(
"Canvas - Main Menu/Main Menu/Support Menu/Update Info");
73 if (updateInfoGO !=
null)
75 GameObject toggleOverlayGO = Instantiate(updateInfoGO, updateInfoGO.transform.parent);
76 toggleOverlayGO.transform.SetSiblingIndex(0);
77 toggleOverlayGO.name =
"Toggle Overlay";
79 var uiMenuButton = toggleOverlayGO.GetComponent<UI_MenuButton>();
80 if (uiMenuButton is not
null)
81 DestroyImmediate(uiMenuButton);
83 var textComponent = toggleOverlayGO.GetComponentInChildren<TextMeshProUGUI>();
84 if (textComponent !=
null)
86 textComponent.text =
"Toggle Overlay";
89 var buttonComponent = toggleOverlayGO.GetComponent<Button>();
90 if (buttonComponent !=
null)
92 buttonComponent.onClick.RemoveAllListeners();
93 buttonComponent.onClick.AddListener(() =>
95 RootPanel.Instance.IsOpen = !RootPanel.Instance.IsOpen;
96 EventSystem.current.SetSelectedGameObject(
null);
105 var pauseLayout = GameObject.Find(
"GameManager/Canvas/Pause/Pause Menu/Pause Buttons/Pause Layout");
106 if (pauseLayout !=
null)
108 var uiGap = pauseLayout.transform.Find(
"Gap.01");
109 var settingsButton = pauseLayout.transform.Find(
"Settings");
111 if (uiGap !=
null && settingsButton !=
null)
114 GameObject uiGapGO = Instantiate(uiGap.gameObject, uiGap.transform.parent);
115 uiGapGO.transform.SetSiblingIndex(uiGap.parent.childCount - 1);
116 uiGapGO.name =
"Gap.03";
119 GameObject toggleOverlayGO = Instantiate(settingsButton.gameObject, settingsButton.transform.parent);
120 toggleOverlayGO.transform.SetSiblingIndex(settingsButton.parent.childCount - 1);
121 toggleOverlayGO.name =
"Toggle Overlay";
123 var uiMenuButton = toggleOverlayGO.GetComponent<UI_MenuButton>();
124 if (uiMenuButton is not
null)
125 DestroyImmediate(uiMenuButton);
127 var textComponent = toggleOverlayGO.GetComponentInChildren<TextMeshProUGUI>();
128 if (textComponent !=
null)
130 textComponent.text =
"TOGGLE OVERLAY";
133 var buttonComponent = toggleOverlayGO.GetComponent<Button>();
134 if (buttonComponent !=
null)
136 buttonComponent.onClick.RemoveAllListeners();
137 buttonComponent.onClick.AddListener(() =>
139 RootPanel.Instance.IsOpen = !RootPanel.Instance.IsOpen;
140 EventSystem.current.SetSelectedGameObject(
null);
149 private void OnDestroy()
151 harmony?.UnpatchSelf();
152 Destroy(RootPanel.Instance.ImuiPanel.Canvas);
154 SceneManager.sceneLoaded -= OnSceneLoaded;
155 WKLog.Info($
"Plugin {NAME} unloaded!");