From c9d90f2d12c0a543eec8d74d357e86d9f3eb9c7c Mon Sep 17 00:00:00 2001 From: akanyan Date: Sun, 5 Jan 2025 01:21:59 +0000 Subject: [PATCH] fix(SkipCutscenes): a better way --- .../MU3.Sequence/patch_PlayMusic.cs | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/Extras/SkipCutscenes/MU3.Sequence/patch_PlayMusic.cs b/Extras/SkipCutscenes/MU3.Sequence/patch_PlayMusic.cs index 3226c7d..d0e5eeb 100644 --- a/Extras/SkipCutscenes/MU3.Sequence/patch_PlayMusic.cs +++ b/Extras/SkipCutscenes/MU3.Sequence/patch_PlayMusic.cs @@ -1,22 +1,18 @@ using MonoMod; using MU3.Battle; -using MU3.Game; using MU3.Util; +using System.Collections; +using UnityEngine; namespace MU3.Sequence; class patch_PlayMusic: PlayMusic { private GameEngine _gameEngine; - private SessionInfo _sessionInfo; - private bool _nuclearSkip = false; private bool _quickStart = false; [MonoModIgnore] private extern bool isPartyPlay(); - [MonoModIgnore] - private extern void Enter_ShowBonusStart(); - private void Leave_LoadScene() { using IniFile iniFile = new("mu3.ini"); _quickStart = iniFile.getValue("Sequence", "QuickStart", false); @@ -25,6 +21,7 @@ class patch_PlayMusic: PlayMusic { private extern void orig_Execute_StartCutscene(); private void Execute_StartCutscene() { orig_Execute_StartCutscene(); + Singleton.instance.SkipEntry = false; if(_quickStart || Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { Singleton.instance.SkipEntry = true; @@ -37,28 +34,33 @@ class patch_PlayMusic: PlayMusic { } } - public extern bool orig_updateState(float deltaTime); - public override bool updateState(float deltaTime = -1f) { - var state = getCurrentState(); - if(state >= EState.PlayEnd && Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { - if(!isPartyPlay() || state > EState.CalcResult) { - _nuclearSkip = true; - } + private void Leave_DispCombo() { + if(!_gameEngine.sessionInfo.isTutorial) { + _gameEngine.StartCoroutine(nuclearSkip()); } - if(_nuclearSkip) { - bool isTutorial = SingletonMonoBehaviour.instance.sessionInfo.isTutorial; - if(!isTutorial) { + } + + private IEnumerator nuclearSkip() { + bool enabled = false; + EState state; + while((state = getCurrentState()) < EState.End) { + if(state >= EState.PlayEnd && Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { + if(!isPartyPlay() || state > EState.CalcResult) { + enabled = true; + } + } + if(enabled) { Singleton.instance.SkipItemFrame = true; if(state < EState.CalcResult) { setNextState(EState.CalcResult); } - if(state > EState.CalcResult) { - Enter_ShowBonusStart(); + if(state > EState.ShowBonusStart) { SingletonMonoBehaviour.instance.destroySkipButton(true); setNextState(EState.End); + yield break; } } + yield return new WaitForEndOfFrame(); } - return orig_updateState(deltaTime); } } \ No newline at end of file