From 453d8023c187b66d6030893f7b0f4dff1f50444e Mon Sep 17 00:00:00 2001 From: NotAKidoS <37721153+NotAKidOnSteam@users.noreply.github.com> Date: Thu, 16 Mar 2023 23:59:10 -0500 Subject: [PATCH] what --- FuckMetrics/FuckMetrics.cs | 37 +++++++++++ FuckMetrics/HarmonyPatches.cs | 120 ++++++++++++---------------------- FuckMetrics/Main.cs | 38 +++++------ 3 files changed, 95 insertions(+), 100 deletions(-) diff --git a/FuckMetrics/FuckMetrics.cs b/FuckMetrics/FuckMetrics.cs index d02169d..bb42b26 100644 --- a/FuckMetrics/FuckMetrics.cs +++ b/FuckMetrics/FuckMetrics.cs @@ -8,6 +8,13 @@ namespace NAK.Melons.FuckMetrics { public static class FuckMetrics { + public enum SettingState + { + Always, + MenuOnly, + Disabled + } + public static void ToggleMetrics(bool enable) { var job = SchedulerSystem.Instance.activeJobs.FirstOrDefault(pair => pair.Job.Method.Name == "UpdateMetrics").Job; @@ -34,6 +41,36 @@ namespace NAK.Melons.FuckMetrics } } + public static void ApplyMetricsSettings(bool show) + { + var disableMetrics = FuckMetricsMod.EntryDisableMetrics.Value; + if (disableMetrics == FuckMetrics.SettingState.Always) return; + + if (disableMetrics == FuckMetrics.SettingState.MenuOnly) + { + FuckMetrics.ToggleMetrics(show); + } + else if (disableMetrics == FuckMetrics.SettingState.Disabled && show) + { + ViewManager.Instance.UpdateMetrics(); + } + } + + public static void ApplyCoreUpdatesSettings(bool show) + { + var disableCoreUpdates = FuckMetricsMod.EntryDisableCoreUpdates.Value; + if (disableCoreUpdates == FuckMetrics.SettingState.Always) return; + + if (disableCoreUpdates == FuckMetrics.SettingState.MenuOnly) + { + FuckMetrics.ToggleCoreUpdates(show); + } + else if (disableCoreUpdates == FuckMetrics.SettingState.Disabled && show) + { + CVR_MenuManager.Instance.SendCoreUpdate(); + } + } + public static void CohtmlAdvanceView(CohtmlView cohtmlView, Traverse menuOpenTraverse) { if (!FuckMetricsMod.EntryDisableCohtmlViewOnIdle.Value) return; diff --git a/FuckMetrics/HarmonyPatches.cs b/FuckMetrics/HarmonyPatches.cs index 1918f1d..742c433 100644 --- a/FuckMetrics/HarmonyPatches.cs +++ b/FuckMetrics/HarmonyPatches.cs @@ -3,101 +3,63 @@ using ABI_RC.Core.IO; using cohtml; using HarmonyLib; -namespace NAK.Melons.FuckMetrics.HarmonyPatches; - -class CVR_MenuManagerPatches +namespace NAK.Melons.FuckMetrics.HarmonyPatches { - [HarmonyPostfix] - [HarmonyPatch(typeof(CVR_MenuManager), "ToggleQuickMenu", new Type[] { typeof(bool) })] - private static void Postfix_CVR_MenuManager_ToggleQuickMenu(bool show) + public static class CVR_MenuManagerPatches { - var disableMetrics = FuckMetricsMod.EntryDisableMetrics.Value; - var disableCoreUpdates = FuckMetricsMod.EntryDisableCoreUpdates.Value; - - if (disableMetrics == FuckMetricsMod.SettingState.MenuOnly) + [HarmonyPostfix] + [HarmonyPatch(typeof(CVR_MenuManager), "ToggleQuickMenu", new Type[] { typeof(bool) })] + private static void Postfix_CVR_MenuManager_ToggleQuickMenu(bool show) { - FuckMetrics.ToggleMetrics(show); - } - else if (disableMetrics == FuckMetricsMod.SettingState.Disabled && show) - { - ViewManager.Instance.UpdateMetrics(); - } - - if (disableCoreUpdates == FuckMetricsMod.SettingState.MenuOnly) - { - FuckMetrics.ToggleCoreUpdates(show); - } - else if (disableCoreUpdates == FuckMetricsMod.SettingState.Disabled && show) - { - CVR_MenuManager.Instance.SendCoreUpdate(); + FuckMetrics.ApplyMetricsSettings(show); + FuckMetrics.ApplyCoreUpdatesSettings(show); } } -} -class ViewManagerPatches -{ - [HarmonyPostfix] - [HarmonyPatch(typeof(ViewManager), "UiStateToggle", new Type[] { typeof(bool) })] - private static void Postfix_ViewManager_UiStateToggle(bool show) + public static class ViewManagerPatches { - var disableMetrics = FuckMetricsMod.EntryDisableMetrics.Value; - var disableCoreUpdates = FuckMetricsMod.EntryDisableCoreUpdates.Value; - - if (disableMetrics == FuckMetricsMod.SettingState.MenuOnly) + [HarmonyPostfix] + [HarmonyPatch(typeof(ViewManager), "UiStateToggle", new Type[] { typeof(bool) })] + private static void Postfix_ViewManager_UiStateToggle(bool show) { - FuckMetrics.ToggleMetrics(show); - } - else if (disableMetrics == FuckMetricsMod.SettingState.Disabled && show) - { - ViewManager.Instance.UpdateMetrics(); - } - - if (disableCoreUpdates == FuckMetricsMod.SettingState.MenuOnly) - { - FuckMetrics.ToggleCoreUpdates(show); - } - else if (disableCoreUpdates == FuckMetricsMod.SettingState.Disabled && show) - { - CVR_MenuManager.Instance.SendCoreUpdate(); + FuckMetrics.ApplyMetricsSettings(show); + FuckMetrics.ApplyCoreUpdatesSettings(show); } } -} -public static class CohtmlViewPatches -{ - private static CohtmlView _quickMenuView; - private static CohtmlView _gameMenuView; - private static Traverse _quickMenuOpenTraverse; - private static Traverse _gameMenuOpenTraverse; - - [HarmonyPostfix] - [HarmonyPatch(typeof(CVR_MenuManager), "Start")] - private static void Postfix_CVR_MenuManager_Start(ref CVR_MenuManager __instance, ref CohtmlView ___quickMenu) + public static class CohtmlViewPatches { - _quickMenuView = ___quickMenu; - _quickMenuOpenTraverse = Traverse.Create(__instance).Field("_quickMenuOpen"); - SchedulerSystem.AddJob(new SchedulerSystem.Job(() => FuckMetrics.CohtmlAdvanceView(_quickMenuView, _quickMenuOpenTraverse)), 15f, 6f, -1); - } + private static CohtmlView _quickMenuView; + private static CohtmlView _gameMenuView; + private static Traverse _quickMenuOpenTraverse; + private static Traverse _gameMenuOpenTraverse; - [HarmonyPostfix] - [HarmonyPatch(typeof(ViewManager), "Start")] - private static void Postfix_ViewManager_Start(ref ViewManager __instance, ref CohtmlView ___gameMenuView) - { - _gameMenuView = ___gameMenuView; - _gameMenuOpenTraverse = Traverse.Create(__instance).Field("_gameMenuOpen"); - SchedulerSystem.AddJob(new SchedulerSystem.Job(() => FuckMetrics.CohtmlAdvanceView(_gameMenuView, _gameMenuOpenTraverse)), 12f, 6f, -1); - } - - [HarmonyPostfix] - [HarmonyPatch(typeof(ViewManager), "OnMicrophoneStatusSwitched")] - private static void Postfix_ViewManager_OnMicrophoneStatusSwitched() - { - if (_quickMenuOpenTraverse.GetValue()) + [HarmonyPostfix] + [HarmonyPatch(typeof(CVR_MenuManager), "Start")] + private static void Postfix_CVRMenuManager_Start(ref CohtmlView ___quickMenu) { - if (FuckMetricsMod.EntryDisableMetrics.Value != FuckMetricsMod.SettingState.Always) + _quickMenuView = ___quickMenu; + _quickMenuOpenTraverse = Traverse.Create().Field("_quickMenuOpen"); + SchedulerSystem.AddJob(() => FuckMetrics.CohtmlAdvanceView(_quickMenuView, _quickMenuOpenTraverse), 15f, 6f, -1); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ViewManager), "Start")] + private static void Postfix_ViewManager_Start(ref CohtmlView ___gameMenuView) + { + _gameMenuView = ___gameMenuView; + _gameMenuOpenTraverse = Traverse.Create().Field("_gameMenuOpen"); + SchedulerSystem.AddJob(() => FuckMetrics.CohtmlAdvanceView(_gameMenuView, _gameMenuOpenTraverse), 12f, 6f, -1); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(ViewManager), "OnMicrophoneStatusSwitched")] + private static void Postfix_ViewManager_OnMicrophoneStatusSwitched() + { + if (_quickMenuOpenTraverse.GetValue()) { CVR_MenuManager.Instance.SendCoreUpdate(); } } } -} \ No newline at end of file +} diff --git a/FuckMetrics/Main.cs b/FuckMetrics/Main.cs index cdc051d..1a40a1e 100644 --- a/FuckMetrics/Main.cs +++ b/FuckMetrics/Main.cs @@ -13,63 +13,59 @@ public class FuckMetricsMod : MelonMod public static readonly MelonPreferences_Entry EntryDisableCohtmlViewOnIdle = CategoryFuckMetrics.CreateEntry("Disable CohtmlView On Idle", false, description: "Disables CohtmlView on the menus when idle. Takes up to 6 seconds after menu exit. This can give a huge performance boost."); - public static readonly MelonPreferences_Entry EntryDisableMetrics = - CategoryFuckMetrics.CreateEntry("Menu Metrics", SettingState.MenuOnly, description: "Disables menu metrics (FPS & Ping). Updates once on menu open if disabled."); + public static readonly MelonPreferences_Entry EntryDisableMetrics = + CategoryFuckMetrics.CreateEntry("Menu Metrics", FuckMetrics.SettingState.MenuOnly, description: "Disables menu metrics (FPS & Ping). Updates once on menu open if disabled."); - public static readonly MelonPreferences_Entry EntryDisableCoreUpdates = - CategoryFuckMetrics.CreateEntry("Menu Core Updates", SettingState.MenuOnly, description: "Disables menu core updates (Gamerule Icons & Debug Status). Updates once on menu open if disabled."); + public static readonly MelonPreferences_Entry EntryDisableCoreUpdates = + CategoryFuckMetrics.CreateEntry("Menu Core Updates", FuckMetrics.SettingState.MenuOnly, description: "Disables menu core updates (Gamerule Icons & Debug Status). Updates once on menu open if disabled."); public static readonly MelonPreferences_Entry EntryMetricsUpdateRate = CategoryFuckMetrics.CreateEntry("Metrics Update Rate", 1f, description: "Sets the update rate for the menu metrics. Default is 0.5f. Recommended to be 1f or higher."); public static readonly MelonPreferences_Entry EntryCoreUpdateRate = CategoryFuckMetrics.CreateEntry("Core Update Rate", 2f, description: "Sets the update rate for the menu core updates. Default is 0.1f. Recommended to be 2f or higher."); - public enum SettingState - { - Always, - MenuOnly, - Disabled - } public override void OnInitializeMelon() { Logger = LoggerInstance; + EntryDisableMetrics.OnEntryValueChangedUntyped.Subscribe(OnDisableMetrics); EntryDisableCoreUpdates.OnEntryValueChangedUntyped.Subscribe(OnDisableCoreUpdates); EntryMetricsUpdateRate.OnEntryValueChangedUntyped.Subscribe(OnChangeMetricsUpdateRate); EntryCoreUpdateRate.OnEntryValueChangedUntyped.Subscribe(OnChangeCoreUpdateRate); + ApplyPatches(typeof(HarmonyPatches.CVR_MenuManagerPatches)); ApplyPatches(typeof(HarmonyPatches.ViewManagerPatches)); ApplyPatches(typeof(HarmonyPatches.CohtmlViewPatches)); MelonCoroutines.Start(WaitForLocalPlayer()); } - IEnumerator WaitForLocalPlayer() + private IEnumerator WaitForLocalPlayer() { while (PlayerSetup.Instance == null) yield return null; UpdateSettings(); } + private void UpdateSettings() + { + FuckMetrics.ToggleMetrics(EntryDisableMetrics.Value == FuckMetrics.SettingState.Always); + FuckMetrics.ToggleCoreUpdates(EntryDisableCoreUpdates.Value == FuckMetrics.SettingState.Always); + } + private void OnDisableMetrics(object arg1, object arg2) { - FuckMetrics.ToggleMetrics(EntryDisableMetrics.Value == SettingState.Always); + FuckMetrics.ToggleMetrics(EntryDisableMetrics.Value == FuckMetrics.SettingState.Always); } private void OnDisableCoreUpdates(object arg1, object arg2) { - FuckMetrics.ToggleCoreUpdates(EntryDisableCoreUpdates.Value == SettingState.Always); - } - - private void UpdateSettings() - { - FuckMetrics.ToggleMetrics(EntryDisableMetrics.Value == SettingState.Always); - FuckMetrics.ToggleCoreUpdates(EntryDisableCoreUpdates.Value == SettingState.Always); + FuckMetrics.ToggleCoreUpdates(EntryDisableCoreUpdates.Value == FuckMetrics.SettingState.Always); } private void OnChangeMetricsUpdateRate(object arg1, object arg2) { - if (EntryDisableMetrics.Value != SettingState.Disabled) + if (EntryDisableMetrics.Value != FuckMetrics.SettingState.Disabled) { FuckMetrics.ToggleMetrics(false); FuckMetrics.ToggleMetrics(true); @@ -78,7 +74,7 @@ public class FuckMetricsMod : MelonMod private void OnChangeCoreUpdateRate(object arg1, object arg2) { - if (EntryDisableCoreUpdates.Value != SettingState.Disabled) + if (EntryDisableCoreUpdates.Value != FuckMetrics.SettingState.Disabled) { FuckMetrics.ToggleCoreUpdates(false); FuckMetrics.ToggleCoreUpdates(true);