From a51086234564cb7475a6f02d58b7be14f82b8f77 Mon Sep 17 00:00:00 2001 From: Zingabopp <37518403+Zingabopp@users.noreply.github.com> Date: Wed, 11 Sep 2019 05:47:06 -0500 Subject: [PATCH 1/3] Updated for 1.3.0 --- HitScoreVisualizer/Config.cs | 2 +- ...fterCutSwingRatingCounterDidChangeEvent.cs | 26 ------------------- ...leSaberSwingRatingCounterDidChangeEvent.cs | 26 +++++++++++++++++++ .../FlyingScoreEffectInitAndPresent.cs | 19 +++++++------- HitScoreVisualizer/HitScoreVisualizer.csproj | 2 +- 5 files changed, 38 insertions(+), 37 deletions(-) delete mode 100644 HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberAfterCutSwingRatingCounterDidChangeEvent.cs create mode 100644 HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberSwingRatingCounterDidChangeEvent.cs diff --git a/HitScoreVisualizer/Config.cs b/HitScoreVisualizer/Config.cs index 3a33501..8839077 100644 --- a/HitScoreVisualizer/Config.cs +++ b/HitScoreVisualizer/Config.cs @@ -382,7 +382,7 @@ public static void resetToDefault() instance = DEFAULT_CONFIG; } - public static void judge(FlyingScoreEffect scoreEffect, NoteCutInfo noteCutInfo, SaberAfterCutSwingRatingCounter saberAfterCutSwingRatingCounter, int score, int before, int after, int accuracy) + public static void judge(FlyingScoreEffect scoreEffect, int score, int before, int after, int accuracy) { // as of 0.13, the TextMeshPro is private; use reflection to grab it out of a private field TextMeshPro text = scoreEffect.getPrivateField("_text"); diff --git a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberAfterCutSwingRatingCounterDidChangeEvent.cs b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberAfterCutSwingRatingCounterDidChangeEvent.cs deleted file mode 100644 index 4f9083d..0000000 --- a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberAfterCutSwingRatingCounterDidChangeEvent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Harmony; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEngine; - -namespace HitScoreVisualizer.Harmony_Patches -{ - [HarmonyPatch(typeof(FlyingScoreEffect), "HandleSaberAfterCutSwingRatingCounterDidChangeEvent", - new Type[] { typeof(SaberAfterCutSwingRatingCounter), typeof(float) })] - class FlyingScoreEffectHandleSaberAfterCutSwingRatingCounterDidChangeEvent - { - static bool Prefix(SaberAfterCutSwingRatingCounter saberAfterCutSwingRatingCounter, FlyingScoreEffect __instance, NoteCutInfo ____noteCutInfo) - { - if (Config.instance.doIntermediateUpdates) - { - ScoreController.RawScoreWithoutMultiplier(____noteCutInfo, saberAfterCutSwingRatingCounter, out int before_plus_acc, out int after, out int accuracy); - int total = before_plus_acc + after; - Config.judge(__instance, ____noteCutInfo, saberAfterCutSwingRatingCounter, total, before_plus_acc - accuracy, after, accuracy); - } - return false; - } - } -} diff --git a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberSwingRatingCounterDidChangeEvent.cs b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberSwingRatingCounterDidChangeEvent.cs new file mode 100644 index 0000000..aec8ba3 --- /dev/null +++ b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectHandleSaberSwingRatingCounterDidChangeEvent.cs @@ -0,0 +1,26 @@ +using Harmony; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace HitScoreVisualizer.Harmony_Patches +{ + [HarmonyPatch(typeof(FlyingScoreEffect), "HandleSaberSwingRatingCounterDidChangeEvent", + new Type[] { typeof(SaberSwingRatingCounter), typeof(float) })] + class FlyingScoreEffectHandleSaberSwingRatingCounterDidChangeEvent + { + static bool Prefix(SaberSwingRatingCounter saberSwingRatingCounter, FlyingScoreEffect __instance, NoteCutInfo ____noteCutInfo) + { + if (Config.instance.doIntermediateUpdates) + { + ScoreController.RawScoreWithoutMultiplier(____noteCutInfo, out int before, out int after, out int accuracy); + int total = before + after + accuracy; + Config.judge(__instance, total, before, after, accuracy); + } + return false; + } + } +} diff --git a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs index 2caf81f..d103044 100644 --- a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs +++ b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs @@ -16,8 +16,7 @@ namespace HitScoreVisualizer.Harmony_Patches typeof(int), typeof(float), typeof(Vector3), - typeof(Color), - typeof(SaberAfterCutSwingRatingCounter)})] + typeof(Color)})] class FlyingScoreEffectInitAndPresent { public static FlyingScoreEffect currentEffect = null; @@ -39,6 +38,7 @@ static void Prefix(ref Vector3 targetPos, FlyingScoreEffect __instance) // Save the existing effect to clear if a new one spawns currentEffect = __instance; // In case it despawns before the next note is hit, don't try to clear it + currentEffect.didFinishEvent -= handleEffectDidFinish; // Just in case currentEffect.didFinishEvent += handleEffectDidFinish; } } @@ -49,21 +49,22 @@ static void handleEffectDidFinish(FlyingObjectEffect effect) if (currentEffect == effect) currentEffect = null; } - static void Postfix(SaberAfterCutSwingRatingCounter saberAfterCutSwingRatingCounter, FlyingScoreEffect __instance, ref Color ____color, NoteCutInfo noteCutInfo) + static void Postfix(FlyingScoreEffect __instance, ref Color ____color, NoteCutInfo noteCutInfo) { - void judge(SaberAfterCutSwingRatingCounter counter) + void judge(SaberSwingRatingCounter counter) { - ScoreController.RawScoreWithoutMultiplier(noteCutInfo, counter, out int before_plus_acc, out int after, out int accuracy); - int total = before_plus_acc + after; - Config.judge(__instance, noteCutInfo, counter, total, before_plus_acc - accuracy, after, accuracy); + ScoreController.RawScoreWithoutMultiplier(noteCutInfo, out int before, out int after, out int accuracy); + int total = before + after + accuracy; + Config.judge(__instance, total, before, after, accuracy); // If the counter is finished, remove our event from it counter.didFinishEvent -= judge; } // Apply judgments a total of twice - once when the effect is created, once when it finishes. - judge(saberAfterCutSwingRatingCounter); - saberAfterCutSwingRatingCounter.didFinishEvent += judge; + judge(noteCutInfo.swingRatingCounter); + noteCutInfo.swingRatingCounter.didFinishEvent -= judge; // Just in case + noteCutInfo.swingRatingCounter.didFinishEvent += judge; } } } diff --git a/HitScoreVisualizer/HitScoreVisualizer.csproj b/HitScoreVisualizer/HitScoreVisualizer.csproj index 218a1e6..9d28d11 100644 --- a/HitScoreVisualizer/HitScoreVisualizer.csproj +++ b/HitScoreVisualizer/HitScoreVisualizer.csproj @@ -74,7 +74,7 @@ - + From 1a61db863a863921ee3451e0ac3b19a01d0caa64 Mon Sep 17 00:00:00 2001 From: Zingabopp <37518403+Zingabopp@users.noreply.github.com> Date: Wed, 11 Sep 2019 06:17:44 -0500 Subject: [PATCH 2/3] Use IPA.Old instead of IllusionPlugin --- HitScoreVisualizer/HitScoreVisualizer.csproj | 3 --- HitScoreVisualizer/Plugin.cs | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/HitScoreVisualizer/HitScoreVisualizer.csproj b/HitScoreVisualizer/HitScoreVisualizer.csproj index 9d28d11..5292983 100644 --- a/HitScoreVisualizer/HitScoreVisualizer.csproj +++ b/HitScoreVisualizer/HitScoreVisualizer.csproj @@ -43,9 +43,6 @@ ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\Assembly-CSharp-firstpass.dll - - ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\IllusionPlugin.dll - False ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\Managed\IPA.Loader.dll diff --git a/HitScoreVisualizer/Plugin.cs b/HitScoreVisualizer/Plugin.cs index 0486b87..a84dee0 100644 --- a/HitScoreVisualizer/Plugin.cs +++ b/HitScoreVisualizer/Plugin.cs @@ -1,5 +1,5 @@ using Harmony; -using IllusionPlugin; +using IPA.Old; using System; using System.Reflection; using UnityEngine.SceneManagement; From 930ac6c05f9a5af22924de2ec94cddd3eb38f417 Mon Sep 17 00:00:00 2001 From: Zingabopp <37518403+Zingabopp@users.noreply.github.com> Date: Wed, 11 Sep 2019 15:10:41 -0500 Subject: [PATCH 3/3] Small optimization --- .../Harmony Patches/FlyingScoreEffectInitAndPresent.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs index d103044..75af00b 100644 --- a/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs +++ b/HitScoreVisualizer/Harmony Patches/FlyingScoreEffectInitAndPresent.cs @@ -63,8 +63,11 @@ void judge(SaberSwingRatingCounter counter) // Apply judgments a total of twice - once when the effect is created, once when it finishes. judge(noteCutInfo.swingRatingCounter); - noteCutInfo.swingRatingCounter.didFinishEvent -= judge; // Just in case - noteCutInfo.swingRatingCounter.didFinishEvent += judge; + if (!Config.instance.doIntermediateUpdates) // Don't need a judge on didFinishEvent if doIntermediateUpdates is on + { + noteCutInfo.swingRatingCounter.didFinishEvent -= judge; // Just in case + noteCutInfo.swingRatingCounter.didFinishEvent += judge; + } } } }