forked from akanyan/mu3-mods
fix(BetterGiveUp): a better way
This commit is contained in:
@ -9,18 +9,26 @@ using UnityEngine;
|
|||||||
namespace MU3.Sequence;
|
namespace MU3.Sequence;
|
||||||
|
|
||||||
class patch_PlayMusic: PlayMusic {
|
class patch_PlayMusic: PlayMusic {
|
||||||
private static readonly TimeSpan HOLD_DURATION = TimeSpan.FromSeconds(1.0f);
|
private static readonly TimeSpan HOLD_DURATION = TimeSpan.FromSeconds(0.67f);
|
||||||
private static readonly TimeSpan ROLL_DURATION = TimeSpan.FromSeconds(0.5f);
|
private static readonly TimeSpan ROLL_DURATION = TimeSpan.FromSeconds(0.5f);
|
||||||
|
|
||||||
|
private double fadeOut(double progress, double min, double max)
|
||||||
|
=> min + (max - min) * (1.0 - Math.Pow(1.0 - progress, 2.0));
|
||||||
|
private double fadeIn(double progress, double min, double max)
|
||||||
|
=> min + (max - min) * Math.Pow(progress, 2.0);
|
||||||
|
private bool isHolding
|
||||||
|
=> Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuLeft)
|
||||||
|
|| Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight);
|
||||||
|
private patch_NotesManager ntMgr => (patch_NotesManager)_gameEngine?.notesManager;
|
||||||
|
|
||||||
private GameEngine _gameEngine;
|
private GameEngine _gameEngine;
|
||||||
private SessionInfo _sessionInfo;
|
private SessionInfo _sessionInfo;
|
||||||
private patch_NotesManager ntMgr => (patch_NotesManager)_gameEngine?.notesManager;
|
private bool _isForceEndBattle;
|
||||||
|
|
||||||
private bool _pressedYellow;
|
|
||||||
private bool _isRolling;
|
private bool _isRolling;
|
||||||
|
private bool _isHoldingAck;
|
||||||
private float _totalRollingFrame;
|
private float _totalRollingFrame;
|
||||||
private DateTime _rollingStartTime;
|
private DateTime _rollingStartTime;
|
||||||
private bool _isHoldingAck;
|
|
||||||
private DateTime _holdingStartTime;
|
private DateTime _holdingStartTime;
|
||||||
private float _enemyPosX;
|
private float _enemyPosX;
|
||||||
|
|
||||||
@ -34,9 +42,6 @@ class patch_PlayMusic: PlayMusic {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.MenuRight)) {
|
|
||||||
_pressedYellow = true;
|
|
||||||
}
|
|
||||||
if(_isRolling) {
|
if(_isRolling) {
|
||||||
TimeSpan timeSpan = CustomDateTime.Now - _rollingStartTime;
|
TimeSpan timeSpan = CustomDateTime.Now - _rollingStartTime;
|
||||||
if(timeSpan <= ROLL_DURATION) {
|
if(timeSpan <= ROLL_DURATION) {
|
||||||
@ -49,7 +54,7 @@ class patch_PlayMusic: PlayMusic {
|
|||||||
} else {
|
} else {
|
||||||
endRolling();
|
endRolling();
|
||||||
}
|
}
|
||||||
} else if(isHolding()) {
|
} else if(isHolding) {
|
||||||
if(!_isHoldingAck) {
|
if(!_isHoldingAck) {
|
||||||
_holdingStartTime = CustomDateTime.Now;
|
_holdingStartTime = CustomDateTime.Now;
|
||||||
_isHoldingAck = true;
|
_isHoldingAck = true;
|
||||||
@ -58,12 +63,78 @@ class patch_PlayMusic: PlayMusic {
|
|||||||
TimeSpan ts = CustomDateTime.Now - _holdingStartTime;
|
TimeSpan ts = CustomDateTime.Now - _holdingStartTime;
|
||||||
if(ts > HOLD_DURATION) {
|
if(ts > HOLD_DURATION) {
|
||||||
if(Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight)) {
|
if(Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight)) {
|
||||||
if(ntMgr.retireResult != RetireResult.None) {
|
|
||||||
hardReset();
|
|
||||||
} else {
|
|
||||||
startRolling();
|
startRolling();
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
skipPlay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orig_Execute_Play();
|
||||||
|
} else {
|
||||||
|
_isHoldingAck = false;
|
||||||
|
orig_Execute_Play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extern void orig_Execute_DispCombo();
|
||||||
|
private void Execute_DispCombo() {
|
||||||
|
orig_Execute_DispCombo();
|
||||||
|
|
||||||
|
if(Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight) && ntMgr.retireResult != RetireResult.None && !isPartyPlay()) {
|
||||||
|
startRolling();
|
||||||
|
endRolling();
|
||||||
|
_gameEngine.battleUI.skipDispRetireResult();
|
||||||
|
setNextState(EState.Play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extern void orig_Execute_DispFinish();
|
||||||
|
private void Execute_DispFinish() {
|
||||||
|
orig_Execute_DispFinish();
|
||||||
|
|
||||||
|
if(Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight) && ntMgr.retireResult != RetireResult.None && !isPartyPlay()) {
|
||||||
|
ntMgr.stopPlay();
|
||||||
|
ntMgr.setPause(false);
|
||||||
|
_gameEngine.reset();
|
||||||
|
Singleton<GameSound>.instance.gameBGM.stop();
|
||||||
|
setNextState(EState.Init);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startRolling() {
|
||||||
|
_isRolling = true;
|
||||||
|
_totalRollingFrame = ntMgr.getCurrentFrame();
|
||||||
|
_rollingStartTime = CustomDateTime.Now;
|
||||||
|
_enemyPosX = ntMgr.getEnemyPos().x;
|
||||||
|
_gameEngine.destroyAllies();
|
||||||
|
ntMgr.forceRecover(recover: 100);
|
||||||
|
Singleton<GameSound>.instance.gameBGM.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void endRolling() {
|
||||||
|
_isRolling = false;
|
||||||
|
_isForceEndBattle = false;
|
||||||
|
|
||||||
|
ntMgr.stopPlay();
|
||||||
|
ntMgr.setPause(false);
|
||||||
|
ntMgr.reset();
|
||||||
|
|
||||||
|
// This has to go first or otherwise enemies will shrink
|
||||||
|
_gameEngine.createPlayers();
|
||||||
|
|
||||||
|
_gameEngine.counters.reset();
|
||||||
|
_gameEngine.enemyManager.destroy();
|
||||||
|
|
||||||
|
ntMgr.reloadScore(_gameEngine.IsStageDazzling);
|
||||||
|
_gameEngine.battleReward.initialize(_sessionInfo);
|
||||||
|
_gameEngine.enemyManager.initialize();
|
||||||
|
_gameEngine.reset();
|
||||||
|
|
||||||
|
ntMgr.startPlay(0.0f);
|
||||||
|
ntMgr.led.setGameColor(true);
|
||||||
|
Singleton<GameSound>.instance.gameBGM.playMusic(_sessionInfo.musicData, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void skipPlay() {
|
||||||
Singleton<Mod.State>.instance.SkipPlay = true;
|
Singleton<Mod.State>.instance.SkipPlay = true;
|
||||||
setNextState(EState.End);
|
setNextState(EState.End);
|
||||||
destroy();
|
destroy();
|
||||||
@ -73,78 +144,3 @@ class patch_PlayMusic: PlayMusic {
|
|||||||
_gameEngine.playFinish();
|
_gameEngine.playFinish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
_isHoldingAck = false;
|
|
||||||
orig_Execute_Play();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static double fadeOut(double progress, double min, double max) {
|
|
||||||
return min + (max - min) * (1.0 - Math.Pow(1.0 - progress, 2.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static double fadeIn(double progress, double min, double max) {
|
|
||||||
return min + (max - min) * Math.Pow(progress, 2.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool isHolding() {
|
|
||||||
return Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuLeft)
|
|
||||||
^ (_pressedYellow && Singleton<UIInput>.instance.getStateOn(UIInput.Key.MenuRight));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hardReset() {
|
|
||||||
ntMgr.stopPlay();
|
|
||||||
ntMgr.setPause(false);
|
|
||||||
_gameEngine.reset();
|
|
||||||
Singleton<GameSound>.instance.gameBGM.stop();
|
|
||||||
setNextState(EState.Init);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void startRolling() {
|
|
||||||
_pressedYellow = false;
|
|
||||||
_isRolling = true;
|
|
||||||
_totalRollingFrame = ntMgr.getCurrentFrame();
|
|
||||||
_rollingStartTime = CustomDateTime.Now;
|
|
||||||
_enemyPosX = ntMgr.getEnemyPos().x;
|
|
||||||
ntMgr.forceRecover(recover: 100);
|
|
||||||
Singleton<GameSound>.instance.gameBGM.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void endRolling() {
|
|
||||||
_isRolling = false;
|
|
||||||
|
|
||||||
ntMgr.stopPlay();
|
|
||||||
ntMgr.setPause(false);
|
|
||||||
ntMgr.reset();
|
|
||||||
_gameEngine.counters.reset();
|
|
||||||
_gameEngine.enemyManager.destroy();
|
|
||||||
|
|
||||||
ntMgr.reloadScore(_gameEngine.IsStageDazzling);
|
|
||||||
_gameEngine.battleReward.initialize(_sessionInfo);
|
|
||||||
_gameEngine.enemyManager.initialize();
|
|
||||||
_gameEngine.reset();
|
|
||||||
ntMgr.startPlay(0.0f);
|
|
||||||
ntMgr.led.setGameColor(true);
|
|
||||||
Singleton<GameSound>.instance.gameBGM.playMusic(_sessionInfo.musicData, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void listenForPanicRestart() {
|
|
||||||
if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.MenuRight) && ntMgr.retireResult != RetireResult.None && !isPartyPlay()) {
|
|
||||||
hardReset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private extern void orig_Execute_DispCombo();
|
|
||||||
private void Execute_DispCombo() {
|
|
||||||
orig_Execute_DispCombo();
|
|
||||||
|
|
||||||
listenForPanicRestart();
|
|
||||||
}
|
|
||||||
|
|
||||||
private extern void orig_Execute_DispFinish();
|
|
||||||
private void Execute_DispFinish() {
|
|
||||||
orig_Execute_DispFinish();
|
|
||||||
|
|
||||||
listenForPanicRestart();
|
|
||||||
}
|
|
||||||
}
|
|
@ -127,7 +127,7 @@ class TestModePageModConfig: TestModePage {
|
|||||||
"QuickStart",
|
"QuickStart",
|
||||||
_onOff,
|
_onOff,
|
||||||
0,
|
0,
|
||||||
typeof(Sequence.PlayMusic).GetMethod("orig_updateState") != null,
|
typeof(Notes.NotesManager).GetMethod("orig_reset") != null,
|
||||||
"Sequence"
|
"Sequence"
|
||||||
));
|
));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user