diff --git a/AquaMai/UX/SelectionDetail.cs b/AquaMai/UX/SelectionDetail.cs index 6dd794fe..87325ca2 100644 --- a/AquaMai/UX/SelectionDetail.cs +++ b/AquaMai/UX/SelectionDetail.cs @@ -14,52 +14,87 @@ namespace AquaMai.UX; public class SelectionDetail { - private static Window window; - public static MusicSelectProcess.MusicSelectData SelectData { get; private set; } - public static int Difficulty { get; private set; } + private static readonly Window[] window = new Window[2]; + private static MusicSelectProcess.MusicSelectData SelectData { get; set; } + private static readonly int[] difficulty = new int[2]; [HarmonyPostfix] [HarmonyPatch(typeof(MusicSelectMonitor), "UpdateRivalScore")] public static void ScrollUpdate(MusicSelectProcess ____musicSelect, MusicSelectMonitor __instance) { - if (__instance != ____musicSelect.MonitorArray[0]) return; - if (window != null) + int player; + if (__instance == ____musicSelect.MonitorArray[0]) { - window.Close(); + player = 0; } + else if (__instance == ____musicSelect.MonitorArray[1]) + { + player = 1; + } + else + { + return; + } + + if (window[player] != null) + { + window[player].Close(); + } + + var userData = Singleton.Instance.GetUserData(player); + if (!userData.IsEntry) return; if (____musicSelect.IsRandomIndex()) return; SelectData = ____musicSelect.GetMusic(0); if (SelectData == null) return; - Difficulty = ____musicSelect.GetDifficulty(0); + difficulty[player] = ____musicSelect.GetDifficulty(player); - window = __instance.gameObject.AddComponent(); + window[player] = player == 0 ? __instance.gameObject.AddComponent() : __instance.gameObject.AddComponent(); } - public class Window : MonoBehaviour + private class P1Window : Window + { + protected override int player => 0; + } + + private class P2Window : Window + { + protected override int player => 1; + } + + private abstract class Window : MonoBehaviour { private GUIWindow window; + protected abstract int player { get; } - private void Start() + public void Start() { - window = GUIWindow.Begin($"ID: {SelectData.MusicData.name.id}", Screen.width / 2f - 100, Screen.height * 0.87f, 200, 50, 10, 22, 5, true, true, true); + var x = Screen.width / 2f - 100; + if (!AquaMai.AppConfig.UX.SinglePlayer) + { + var halfPlayerWidth = Screen.height / 1920f * 1080 / 2; + x += halfPlayerWidth * (player == 0 ? -1 : 1); + } + + window = GUIWindow.Begin($"ID: {SelectData.MusicData.name.id}", x, Screen.height * 0.87f, 200, 50, 10, 22, 5, true, true, true); window.Label(MusicDirHelper.LookupPath(SelectData.MusicData.name.id).Split('/').Reverse().ToArray()[3]); window.Label(SelectData.MusicData.genreName?.str); window.Label(SelectData.MusicData.AddVersion?.str); - window.Label($"{SelectData.MusicData.notesData[Difficulty]?.level}.{SelectData.MusicData.notesData[Difficulty]?.levelDecimal}"); + var notesData = SelectData.MusicData.notesData[difficulty[player]]; + window.Label($"{notesData?.level}.{notesData?.levelDecimal}"); - var rate = CalcB50(SelectData.MusicData); + var rate = CalcB50(SelectData.MusicData, difficulty[player]); if (rate > 0) { window.Label($"SSS+ => DXRating += {rate}"); } } - private uint CalcB50(MusicData musicData) + private uint CalcB50(MusicData musicData, int difficulty) { - var newRate = new UserRate(musicData.name.id, Difficulty, 1010000, (uint)musicData.version); - var user = Singleton.Instance.GetUserData(0); + var newRate = new UserRate(musicData.name.id, difficulty, 1010000, (uint)musicData.version); + var user = Singleton.Instance.GetUserData(player); var userLowRate = (newRate.OldFlag ? user.RatingList.RatingList : user.RatingList.NewRatingList).Last(); if (newRate.SingleRate > userLowRate.SingleRate) @@ -72,7 +107,7 @@ public class SelectionDetail private void OnGUI() { - window.Draw(); + window?.Draw(); } public void Close()