From 12724cea56cb46b1c330e6dbc205878fc27f79c8 Mon Sep 17 00:00:00 2001 From: Clansty Date: Fri, 4 Oct 2024 19:38:02 +0800 Subject: [PATCH] [+] Add options --- AquaMai/AquaMai.csproj | 11 ++--- AquaMai/Config.cs | 3 ++ .../SlideAutoPlayTweak.cs | 12 +++--- .../{RenderTweak => Fix}/SlideJudgeTweak.cs | 6 +-- AquaMai/Main.cs | 11 +---- AquaMai/{CustomSkin => UX}/CustomNoteSkin.cs | 41 +++++++++---------- .../TrackStartProcessTweak.cs | 4 +- 7 files changed, 40 insertions(+), 48 deletions(-) rename AquaMai/{RenderTweak => Fix}/SlideAutoPlayTweak.cs (98%) rename AquaMai/{RenderTweak => Fix}/SlideJudgeTweak.cs (98%) rename AquaMai/{CustomSkin => UX}/CustomNoteSkin.cs (98%) rename AquaMai/{RenderTweak => UX}/TrackStartProcessTweak.cs (99%) diff --git a/AquaMai/AquaMai.csproj b/AquaMai/AquaMai.csproj index 74d23044..14c15867 100644 --- a/AquaMai/AquaMai.csproj +++ b/AquaMai/AquaMai.csproj @@ -292,7 +292,6 @@ DEBUG - @@ -308,15 +307,14 @@ DEBUG + + - - - True True @@ -339,6 +337,7 @@ DEBUG + @@ -354,6 +353,7 @@ DEBUG + @@ -374,9 +374,6 @@ DEBUG - - - diff --git a/AquaMai/Config.cs b/AquaMai/Config.cs index 6c21f836..6c4eb180 100644 --- a/AquaMai/Config.cs +++ b/AquaMai/Config.cs @@ -39,6 +39,8 @@ public class UXConfig public bool TestProof { get; set; } public bool HideSelfMadeCharts { get; set; } public bool CustomFont { get; set; } + public bool CustomNoteSkin { get; set; } + public bool TrackStartProcessTweak { get; set; } public string CustomVersionString { get; set; } = ""; public string CustomPlaceName { get; set; } = ""; public string ExecOnIdle { get; set; } = ""; @@ -55,6 +57,7 @@ public class FixConfig public int ExtendNotesPool { get; set; } public bool FrameRateLock { get; set; } public bool FontFix { get; set; } + public bool SlideJudgeTweak { get; set; } } public class UtilsConfig diff --git a/AquaMai/RenderTweak/SlideAutoPlayTweak.cs b/AquaMai/Fix/SlideAutoPlayTweak.cs similarity index 98% rename from AquaMai/RenderTweak/SlideAutoPlayTweak.cs rename to AquaMai/Fix/SlideAutoPlayTweak.cs index 17017b6f..1e3b1916 100644 --- a/AquaMai/RenderTweak/SlideAutoPlayTweak.cs +++ b/AquaMai/Fix/SlideAutoPlayTweak.cs @@ -3,14 +3,14 @@ using Manager; using Monitor; -namespace AquaMai.RenderTweak; +namespace AquaMai.Fix; public class SlideAutoPlayTweak { /* 这个 Patch 用于修复以下 bug: * SlideFan 在 AutoPlay 时, 只有第一个箭头会消失 * 原 method 逻辑如下: - * + * * if (this.IsNoteCheckTimeStartIgnoreJudgeWait()) * { * // do something ... @@ -34,7 +34,7 @@ public class SlideAutoPlayTweak * } * // do something ... * } - * + * * 导致这个 bug 的原因是 else 分支的 for 循环终止条件写错了, 应该是 11.0 (因为有 11 个箭头), SBGA 写成了 1.0 * 这个 method 中一共只有 5 处 ldc.r4 的 IL Code, 依次为 10.0, 11.0, 1.0, 1.0, 0.0 * 修复 bug 需要把第三处的 1.0 更改为 11.0, 这里使用 Transpiler 解决 @@ -61,7 +61,7 @@ private static IEnumerable FixFanAutoPlayArrow(IEnumerable ____hitIndex + 0.5f; } } - -} \ No newline at end of file + +} diff --git a/AquaMai/RenderTweak/SlideJudgeTweak.cs b/AquaMai/Fix/SlideJudgeTweak.cs similarity index 98% rename from AquaMai/RenderTweak/SlideJudgeTweak.cs rename to AquaMai/Fix/SlideJudgeTweak.cs index 25377a11..d0a8a546 100644 --- a/AquaMai/RenderTweak/SlideJudgeTweak.cs +++ b/AquaMai/Fix/SlideJudgeTweak.cs @@ -5,7 +5,7 @@ using Process; using UnityEngine; -namespace AquaMai.RenderTweak; +namespace AquaMai.Fix; public class SlideJudgeTweak { @@ -60,7 +60,7 @@ private static void FixCircleSlideJudgePosition( } } } - + /* * 这个 Patch 让 Wifi Slide 的判定显示有上下的区别 (原本所有 Wifi 的判定显示都是朝向圆心的), 就像 majdata 里那样 * 这个 bug 产生的原因是 SBGA 忘记给 Wifi 的 EndButtonId 赋值了 @@ -86,4 +86,4 @@ private static void FixFanJudgeFilp( } } } -} \ No newline at end of file +} diff --git a/AquaMai/Main.cs b/AquaMai/Main.cs index 97910f59..935a0c88 100644 --- a/AquaMai/Main.cs +++ b/AquaMai/Main.cs @@ -4,10 +4,8 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Threading; -using AquaMai.CustomSkin; using AquaMai.Fix; using AquaMai.Helpers; -using AquaMai.RenderTweak; using AquaMai.Resources; using AquaMai.Utils; using AquaMai.UX; @@ -160,19 +158,14 @@ public override void OnInitializeMelon() Patch(typeof(ExtendNotesPool)); Patch(typeof(FixCheckAuth)); Patch(typeof(DebugFeature)); + Patch(typeof(FixConnSlide)); + Patch(typeof(SlideAutoPlayTweak)); // UX Patch(typeof(CustomVersionString)); Patch(typeof(CustomPlaceName)); Patch(typeof(RunCommandOnEvents)); // Utils Patch(typeof(JudgeAdjust)); - - // My Patches - Patch(typeof(CustomNoteSkin)); - Patch(typeof(SlideAutoPlayTweak)); - Patch(typeof(TrackStartProcessTweak)); - Patch(typeof(SlideJudgeTweak)); - Patch(typeof(FixConnSlide)); # if DEBUG Patch(typeof(LogNetworkErrors)); # endif diff --git a/AquaMai/CustomSkin/CustomNoteSkin.cs b/AquaMai/UX/CustomNoteSkin.cs similarity index 98% rename from AquaMai/CustomSkin/CustomNoteSkin.cs rename to AquaMai/UX/CustomNoteSkin.cs index 24b0b891..603077d5 100644 --- a/AquaMai/CustomSkin/CustomNoteSkin.cs +++ b/AquaMai/UX/CustomNoteSkin.cs @@ -1,7 +1,6 @@ using System; -using System.IO; using System.Collections.Generic; -using System.Reflection; +using System.IO; using HarmonyLib; using MelonLoader; using Monitor; @@ -9,13 +8,13 @@ using Process; using UnityEngine; -namespace AquaMai.CustomSkin; +namespace AquaMai.UX; public class CustomNoteSkin { private static readonly List ImageExts = [".jpg", ".png", ".jpeg"]; private static readonly List SlideFanFields = ["_normalSlideFan", "_eachSlideFan", "_breakSlideFan", "_breakSlideFanEff"]; - + private static Sprite customOutline; private static Sprite[,] customSlideFan = new Sprite[4, 11]; @@ -28,7 +27,7 @@ private static bool LoadIntoGameNoteImageContainer(string fieldName, int? idx1, MelonLogger.Msg($"[CustomNoteSkin] Cannot found field {fieldName}"); return false; } - + var fieldType = fieldTraverse.GetValueType(); if (!idx1.HasValue) { @@ -83,19 +82,19 @@ private static bool LoadIntoGameNoteImageContainer(string fieldName, int? idx1, return true; } - + [HarmonyPostfix] [HarmonyPatch(typeof(GameNotePrefabContainer), "Initialize")] private static void LoadNoteSkin() { if (!Directory.Exists(Path.Combine(Environment.CurrentDirectory, "Skins"))) return; - + foreach (var laFile in Directory.EnumerateFiles(Path.Combine(Environment.CurrentDirectory, "Skins"))) { if (!ImageExts.Contains(Path.GetExtension(laFile).ToLowerInvariant())) continue; var texture = new Texture2D(1, 1, TextureFormat.RGBA32, false); texture.LoadImage(File.ReadAllBytes(laFile)); - + var name = Path.GetFileNameWithoutExtension(laFile); var args = name.Split('_'); // 文件名的格式是 XXXXXXXX_A_B 表示 GameNoteImageContainer._XXXXXXXX[A, B] @@ -105,7 +104,7 @@ private static void LoadNoteSkin() int? idx2 = (args.Length < 3)? null : (int.TryParse(args[2], out temp) ? temp : null); Traverse traverse; - + if (fieldName == "_outline") { customOutline = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), 1f); @@ -140,14 +139,14 @@ private static void LoadNoteSkin() 0, SpriteMeshType.Tight, target.sprite.border ); target.sprite = custom; - + traverse = Traverse.Create(GameNotePrefabContainer.TouchTapC); noticeObject = traverse.Field("NoticeObject").Value; noticeObject.GetComponent().sprite = custom; MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}"); continue; } - + if (fieldName == "_touchHold") { if (!idx1.HasValue) @@ -170,7 +169,7 @@ private static void LoadNoteSkin() MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}"); continue; } - + if (fieldName == "_normalTouchBorder") { if (!idx1.HasValue) @@ -192,7 +191,7 @@ private static void LoadNoteSkin() MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}"); continue; } - + if (fieldName == "_eachTouchBorder") { if (!idx1.HasValue) @@ -214,14 +213,14 @@ private static void LoadNoteSkin() MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}"); continue; } - + if (LoadIntoGameNoteImageContainer(fieldName, idx1, idx2, texture)) { MelonLogger.Msg($"[CustomNoteSkin] Successfully loaded {name}"); } } } - + [HarmonyPostfix] [HarmonyPatch(typeof(GameCtrl), "Initialize")] private static void ChangeOutlineTexture(GameObject ____guideEndPointObj) @@ -231,7 +230,7 @@ private static void ChangeOutlineTexture(GameObject ____guideEndPointObj) ____guideEndPointObj.GetComponent().sprite = customOutline; } } - + [HarmonyPostfix] [HarmonyPatch(typeof(SlideFan), "Initialize")] private static void ChangeFanTexture( @@ -251,7 +250,7 @@ private static void ChangeFanTexture( position = ____spriteLines[2 * i].transform.localPosition; ____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z); ____spriteLines[2 * i].color = Color.white; - + ____spriteLines[2 * i + 1].sprite = sprite; position = ____spriteLines[2 * i + 1].transform.localPosition; ____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z); @@ -264,7 +263,7 @@ private static void ChangeFanTexture( position = ____effectSprites[2 * i].transform.localPosition; ____effectSprites[2 * i].transform.localPosition = new Vector3(0, position.y, position.z); ____effectSprites[2 * i].color = Color.white; - + ____effectSprites[2 * i + 1].sprite = sprite; position = ____effectSprites[2 * i + 1].transform.localPosition; ____effectSprites[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z); @@ -283,7 +282,7 @@ private static void ChangeFanTexture( position = ____spriteLines[2 * i].transform.localPosition; ____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z); ____spriteLines[2 * i].color = Color.white; - + ____spriteLines[2 * i + 1].sprite = sprite; position = ____spriteLines[2 * i + 1].transform.localPosition; ____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z); @@ -302,7 +301,7 @@ private static void ChangeFanTexture( position = ____spriteLines[2 * i].transform.localPosition; ____spriteLines[2 * i].transform.localPosition = new Vector3(0, position.y, position.z); ____spriteLines[2 * i].color = Color.white; - + ____spriteLines[2 * i + 1].sprite = sprite; position = ____spriteLines[2 * i + 1].transform.localPosition; ____spriteLines[2 * i + 1].transform.localPosition = new Vector3(0, position.y, position.z); @@ -311,4 +310,4 @@ private static void ChangeFanTexture( } } } -} \ No newline at end of file +} diff --git a/AquaMai/RenderTweak/TrackStartProcessTweak.cs b/AquaMai/UX/TrackStartProcessTweak.cs similarity index 99% rename from AquaMai/RenderTweak/TrackStartProcessTweak.cs rename to AquaMai/UX/TrackStartProcessTweak.cs index d547f595..a16655d4 100644 --- a/AquaMai/RenderTweak/TrackStartProcessTweak.cs +++ b/AquaMai/UX/TrackStartProcessTweak.cs @@ -4,7 +4,7 @@ using UI; using UnityEngine; -namespace AquaMai.RenderTweak; +namespace AquaMai.UX; public class TrackStartProcessTweak { @@ -80,4 +80,4 @@ private static void DisableTabs( ____musicTabObj[1].gameObject.SetActive(false); ____musicTabObj[2].gameObject.SetActive(false); } -} \ No newline at end of file +}