From 4ad595f6c33bd8062bc311b32652f705fa22ecbb Mon Sep 17 00:00:00 2001 From: akanyan Date: Tue, 23 Jul 2024 01:45:36 +0900 Subject: [PATCH] feat: various enhancements * AttractVideoPlayer,LoadBoost: allow setting a cache directory * AttractVideoPlayer: color leds * BetterGiveUp: prevent multiple restarts in a row * use GetTriggerOn in general where applicable --- .../patch_OperationManager.cs | 20 +++-- .../MU3.Sequence/patch_Advertise.cs | 12 +-- AttractVideoPlayer/MU3/patch_AdvManager.cs | 18 +++++ BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs | 10 ++- LoadBoost/MU3.Data/patch_DataManager.cs | 75 ++++++++++--------- LoadBoost/MU3.Data/patch_DataStudioManager.cs | 38 ++++++---- Pause/MU3.Sequence/patch_PlayMusic.cs | 2 +- PlatinumTiming/PlatinumTiming.csproj | 6 -- SkipNotice/MU3/patch_Scene_30_NoticeReward.cs | 2 +- .../MU3.Sequence/patch_PlayMusic.cs | 2 +- 10 files changed, 109 insertions(+), 76 deletions(-) diff --git a/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs b/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs index 96b64e1..5ecafcf 100644 --- a/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs +++ b/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs @@ -5,18 +5,22 @@ using System.IO; namespace MU3.Operation; class patch_OperationManager: OperationManager { - private static readonly string _fname = "data_advert_cache.txt"; private ReadOnlyCollection _movieDataList; private int _movieIndex; + private string _fileName; ~patch_OperationManager() { try { - File.WriteAllText(_fname, _movieIndex.ToString()); - } catch(Exception) {} + File.WriteAllText(_fileName, MovieIndex.ToString()); + } catch(Exception) { } } public int MovieIndex { set { - _movieIndex = (value + _movieDataList.Count) % _movieDataList.Count; + if(_movieDataList.Count > 0) { + _movieIndex = (value + _movieDataList.Count) % _movieDataList.Count; + } else { + _movieIndex = 0; + } } get { return _movieIndex; @@ -25,7 +29,7 @@ class patch_OperationManager: OperationManager { public new MovieData movieData { get { if(_movieDataList.Count > 0) { - return _movieDataList[_movieIndex]; + return _movieDataList[MovieIndex]; } return null; } @@ -35,8 +39,12 @@ class patch_OperationManager: OperationManager { public new void initialize() { orig_initialize(); + + using IniFile iniFile = new("mu3.ini"); + _fileName = Path.Combine(iniFile.getValue("Extra", "CacheDir", "."), "data_advert_cache.txt"); + try { - _movieIndex = Math.Max(0, int.Parse(File.ReadAllText(_fname))); + _movieIndex = Math.Max(0, int.Parse(File.ReadAllText(_fileName))); } catch(Exception) { _movieIndex = 0; } diff --git a/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs b/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs index ed96a89..5b13bcf 100644 --- a/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs +++ b/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs @@ -6,12 +6,12 @@ class patch_Advertise: Advertise { // Exclude Back/Left/Right private bool anyKeyDown() { UIInput instance = Singleton.instance; - if(instance.getTriggerOn(UIInput.Key.Decision) - || instance.getTriggerOn(UIInput.Key.OptionBackward) - || instance.getTriggerOn(UIInput.Key.OptionForward) - || instance.getTriggerOn(UIInput.Key.SkipLeft) - || instance.getTriggerOn(UIInput.Key.SkipRight) - || instance.getTriggerOn(UIInput.Key.MenuLeft) + if(instance.getTriggerOn(UIInput.Key.Decision) + || instance.getTriggerOn(UIInput.Key.OptionBackward) + || instance.getTriggerOn(UIInput.Key.OptionForward) + || instance.getTriggerOn(UIInput.Key.SkipLeft) + || instance.getTriggerOn(UIInput.Key.SkipRight) + || instance.getTriggerOn(UIInput.Key.MenuLeft) || instance.getTriggerOn(UIInput.Key.MenuRight)) { return true; } diff --git a/AttractVideoPlayer/MU3/patch_AdvManager.cs b/AttractVideoPlayer/MU3/patch_AdvManager.cs index 67708c5..cb50e21 100644 --- a/AttractVideoPlayer/MU3/patch_AdvManager.cs +++ b/AttractVideoPlayer/MU3/patch_AdvManager.cs @@ -32,4 +32,22 @@ class patch_AdvManager: AdvManager { initMovie(); } + + public extern bool orig_initMovie(); + public new bool initMovie() { + UIInput instance = Singleton.instance; + instance.setLedColor(UIInput.Key.L2, new Color(0f, 0.7f, 0f)); + instance.setLedColor(UIInput.Key.L3, new Color(0f, 0.7f, 0f)); + + return orig_initMovie(); + } + + public extern void orig_exitMovie(); + public new void exitMovie() { + orig_exitMovie(); + + UIInput instance = Singleton.instance; + instance.setLedColor(UIInput.Key.L2, Color.black); + instance.setLedColor(UIInput.Key.L3, Color.black); + } } \ No newline at end of file diff --git a/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs b/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs index 11faa97..4400e96 100644 --- a/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs +++ b/BetterGiveUp/MU3.Sequence/patch_PlayMusic.cs @@ -13,6 +13,7 @@ class patch_PlayMusic: PlayMusic { public static bool QuickSkip = false; private GameEngine _gameEngine; private SessionInfo _sessionInfo; + private bool _pressedYellow; private bool _isRolling; private float _totalRollingFrame; private DateTime _rollingStartTime; @@ -30,11 +31,13 @@ class patch_PlayMusic: PlayMusic { return min + (max - min) * Math.Pow(progress, 2.0); } - private static bool IsHolding() { - return Singleton.instance.getStateOn(UIInput.Key.MenuLeft) ^ Singleton.instance.getStateOn(UIInput.Key.MenuRight); + private bool IsHolding() { + return Singleton.instance.getStateOn(UIInput.Key.MenuLeft) + ^ (_pressedYellow && Singleton.instance.getStateOn(UIInput.Key.MenuRight)); } private void StartRolling() { + _pressedYellow = false; _isRolling = true; _totalRollingFrame = ntMgr.getCurrentFrame(); _rollingStartTime = CustomDateTime.Now; @@ -60,6 +63,9 @@ class patch_PlayMusic: PlayMusic { } private void Execute_Play() { + if(Singleton.instance.getTriggerOn(UIInput.Key.MenuRight)) { + _pressedYellow = true; + } if(_isRolling) { TimeSpan timeSpan = CustomDateTime.Now - _rollingStartTime; if(timeSpan <= ROLL_DURATION) { diff --git a/LoadBoost/MU3.Data/patch_DataManager.cs b/LoadBoost/MU3.Data/patch_DataManager.cs index 5064ca4..438178b 100644 --- a/LoadBoost/MU3.Data/patch_DataManager.cs +++ b/LoadBoost/MU3.Data/patch_DataManager.cs @@ -7,61 +7,62 @@ namespace MU3.Data; public class patch_DataManager: DataManager { private Dictionary _fumenAnalysisData; + private string _fileName; - private void InitCache() { - if(File.Exists("data_fumen_analysis_cache.bin")) { - System.Console.WriteLine("Loading FumenAnalysisData cache..."); + private void initCache() { + if(File.Exists(_fileName)) { + System.Console.WriteLine("Loading chart analysis cache..."); _fumenAnalysisData = new Dictionary(); - using(FileStream input = File.OpenRead("data_fumen_analysis_cache.bin")) { - using BinaryReader binaryReader = new BinaryReader(input); - while(binaryReader.BaseStream.Position < binaryReader.BaseStream.Length) { - int key = binaryReader.ReadInt32(); - bool isExist = binaryReader.ReadBoolean(); - int bpm = binaryReader.ReadInt32(); - int platinumScoreMax = binaryReader.ReadInt32(); - string notesDesignerName = binaryReader.ReadString(); - _fumenAnalysisData.Add(key, new FumenAnalysisData { - isExist = isExist, - bpm = bpm, - platinumScoreMax = platinumScoreMax, - notesDesignerName = notesDesignerName - }); - } + using FileStream input = File.OpenRead(_fileName); + using BinaryReader binaryReader = new BinaryReader(input); + + while(binaryReader.BaseStream.Position < binaryReader.BaseStream.Length) { + int key = binaryReader.ReadInt32(); + bool isExist = binaryReader.ReadBoolean(); + int bpm = binaryReader.ReadInt32(); + int platinumScoreMax = binaryReader.ReadInt32(); + string notesDesignerName = binaryReader.ReadString(); + _fumenAnalysisData.Add(key, new FumenAnalysisData { + isExist = isExist, + bpm = bpm, + platinumScoreMax = platinumScoreMax, + notesDesignerName = notesDesignerName + }); } - System.Console.WriteLine("Success"); } else { _fumenAnalysisData = new Dictionary(); } } - private void SaveCache() { - System.Console.WriteLine($"Saving FumenAnalysisData cache...{Enumerable.First>((IEnumerable>)_fumenAnalysisData).Key},{Enumerable.First>((IEnumerable>)_fumenAnalysisData).Value.notesDesignerName}"); - if(File.Exists("data_fumen_analysis_cache.bin")) { - File.Delete("data_fumen_analysis_cache.bin"); + private void saveCache() { + System.Console.WriteLine($"Saving chart analysis cache...{Enumerable.First(_fumenAnalysisData).Key},{Enumerable.First(_fumenAnalysisData).Value.notesDesignerName}"); + if(File.Exists(_fileName)) { + File.Delete(_fileName); } - using(FileStream fileStream = File.OpenWrite("data_fumen_analysis_cache.bin")) { - using BinaryWriter binaryWriter = new BinaryWriter(fileStream); - foreach(KeyValuePair fumenAnalysisDatum in _fumenAnalysisData) { - binaryWriter.Write(fumenAnalysisDatum.Key); - binaryWriter.Write(fumenAnalysisDatum.Value.isExist); - binaryWriter.Write(fumenAnalysisDatum.Value.bpm); - binaryWriter.Write(fumenAnalysisDatum.Value.platinumScoreMax); - binaryWriter.Write(fumenAnalysisDatum.Value.notesDesignerName); - } - fileStream.Flush(); + using FileStream fileStream = File.OpenWrite(_fileName); + using BinaryWriter binaryWriter = new BinaryWriter(fileStream); + foreach(KeyValuePair fumenAnalysisDatum in _fumenAnalysisData) { + binaryWriter.Write(fumenAnalysisDatum.Key); + binaryWriter.Write(fumenAnalysisDatum.Value.isExist); + binaryWriter.Write(fumenAnalysisDatum.Value.bpm); + binaryWriter.Write(fumenAnalysisDatum.Value.platinumScoreMax); + binaryWriter.Write(fumenAnalysisDatum.Value.notesDesignerName); } - System.Console.WriteLine("Success"); + fileStream.Flush(); } private extern void orig_makeFumenAnalysisDataList(); private void makeFumenAnalysisDataList() { + using IniFile iniFile = new("mu3.ini"); + _fileName = Path.Combine(iniFile.getValue("Extra", "CacheDir", "."), "data_fumen_analysis_cache.bin"); + try { - if(DataStudioManager.needSave || !File.Exists("data_fumen_analysis_cache.bin")) { + if(patch_DataStudioManager.needSave || !File.Exists(_fileName)) { orig_makeFumenAnalysisDataList(); - SaveCache(); + saveCache(); } else { - InitCache(); + initCache(); } } catch(Exception value) { System.Console.WriteLine(value); diff --git a/LoadBoost/MU3.Data/patch_DataStudioManager.cs b/LoadBoost/MU3.Data/patch_DataStudioManager.cs index e0f670d..9cdc010 100644 --- a/LoadBoost/MU3.Data/patch_DataStudioManager.cs +++ b/LoadBoost/MU3.Data/patch_DataStudioManager.cs @@ -4,40 +4,46 @@ using System.Runtime.Serialization.Formatters.Binary; namespace MU3.Data; -public class DataStudioManager { +public class patch_DataStudioManager: DataStudioManager { public static bool needSave; - + private static string _fileName; private static Dictionary _dataCache; private static extern bool orig_Deserialize(string filePath, out T dsr) where T : new(); - private static void InitCache() { - if(File.Exists("data_cache.bin")) { - System.Console.WriteLine("Loading cache..."); - using FileStream serializationStream = File.OpenRead("data_cache.bin"); + private static void initCache() { + using IniFile iniFile = new("mu3.ini"); + _fileName = Path.Combine(iniFile.getValue("Extra", "CacheDir", "."), "data_cache.bin"); + + if(File.Exists(_fileName)) { + System.Console.WriteLine("Loading data cache..."); + using FileStream serializationStream = File.OpenRead(_fileName); _dataCache = (Dictionary)new BinaryFormatter().Deserialize(serializationStream); return; } - _dataCache = new Dictionary(); + _dataCache = new(); } - private static void SaveCache() { - if(File.Exists("data_cache.bin")) { - File.Delete("data_cache.bin"); + private static void saveCache() { + if(_fileName == "") { + return; } - using FileStream serializationStream = File.OpenWrite("data_cache.bin"); + if(File.Exists(_fileName)) { + File.Delete(_fileName); + } + using FileStream serializationStream = File.OpenWrite(_fileName); new BinaryFormatter().Serialize(serializationStream, _dataCache); } private static bool Deserialize(string filePath, out T dsr) where T : new() { if(_dataCache == null) { - InitCache(); + initCache(); } if(_dataCache.ContainsKey(filePath)) { dsr = (T)_dataCache[filePath]; return true; } - if(orig_Deserialize(filePath, out dsr)) { + if(orig_Deserialize(filePath, out dsr)) { needSave = true; _dataCache.Add(filePath, dsr); return true; @@ -47,11 +53,11 @@ public class DataStudioManager { public extern bool orig_IsLoaded(); - public bool IsLoaded() { + public new bool IsLoaded() { if(orig_IsLoaded()) { if(needSave) { - System.Console.WriteLine("Saving cache..."); - SaveCache(); + System.Console.WriteLine("Saving data cache..."); + saveCache(); } return true; } diff --git a/Pause/MU3.Sequence/patch_PlayMusic.cs b/Pause/MU3.Sequence/patch_PlayMusic.cs index d6a8383..08c1ef9 100644 --- a/Pause/MU3.Sequence/patch_PlayMusic.cs +++ b/Pause/MU3.Sequence/patch_PlayMusic.cs @@ -22,7 +22,7 @@ class patch_PlayMusic: PlayMusic { } public override bool updateState(float deltaTime = -1f) { pauseTimer += deltaTime; - if(Singleton.instance.getStateOn(UIInput.Key.Service) && !Singleton.instance.getStateOn(UIInput.Key.Test)) { + if(Singleton.instance.getTriggerOn(UIInput.Key.Service) && !Singleton.instance.getStateOn(UIInput.Key.Test)) { if((!Paused && pauseTimer >= PAUSE_CD) || (Paused && pauseTimer >= UNPAUSE_CD)) { Paused = !Paused; pgm.pause(Paused); diff --git a/PlatinumTiming/PlatinumTiming.csproj b/PlatinumTiming/PlatinumTiming.csproj index 5710054..6aef898 100644 --- a/PlatinumTiming/PlatinumTiming.csproj +++ b/PlatinumTiming/PlatinumTiming.csproj @@ -4,10 +4,4 @@ Platinum early/late - - - - - - \ No newline at end of file diff --git a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs index 27efb18..054fdfd 100644 --- a/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs +++ b/SkipNotice/MU3/patch_Scene_30_NoticeReward.cs @@ -16,7 +16,7 @@ class patch_Scene_30_NoticeReward: Scene_30_NoticeReward { SingletonMonoBehaviour.instance.Panel.pushState(0, show: true); } private void Update() { - if(_mode.get() < (int)State.FadeOut && Singleton.instance.getStateOn(UIInput.Key.MenuLeft)) { + if(_mode.get() < (int)State.FadeOut && Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { Skipped = true; _mode.set(State.FadeOut); } else { diff --git a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs index 6f8799b..ad65c0b 100644 --- a/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs +++ b/SkipPreMusicRitual/MU3.Sequence/patch_PlayMusic.cs @@ -11,7 +11,7 @@ class patch_PlayMusic: PlayMusic { private void Execute_StartCutscene() { orig_Execute_StartCutscene(); ForceSkipped = false; - if(Singleton.instance.config.isQuickStart || Singleton.instance.getStateOn(UIInput.Key.MenuLeft)) { + if(Singleton.instance.config.isQuickStart || Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { ForceSkipped = true; _gameEngine.skipStartCutscene(); setNextState(EState.Countdown);