diff --git a/AttractVideoPlayer/AttractVideoPlayer.csproj b/AttractVideoPlayer/AttractVideoPlayer.csproj new file mode 100644 index 0000000..8343204 --- /dev/null +++ b/AttractVideoPlayer/AttractVideoPlayer.csproj @@ -0,0 +1,7 @@ + + + Assembly-CSharp.AttractVideoPlayer.mm + Control attract video + + + \ No newline at end of file diff --git a/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs b/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs new file mode 100644 index 0000000..96b64e1 --- /dev/null +++ b/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.ObjectModel; +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; + + ~patch_OperationManager() { + try { + File.WriteAllText(_fname, _movieIndex.ToString()); + } catch(Exception) {} + } + public int MovieIndex { + set { + _movieIndex = (value + _movieDataList.Count) % _movieDataList.Count; + } + get { + return _movieIndex; + } + } + public new MovieData movieData { + get { + if(_movieDataList.Count > 0) { + return _movieDataList[_movieIndex]; + } + return null; + } + } + + public extern void orig_initialize(); + + public new void initialize() { + orig_initialize(); + try { + _movieIndex = Math.Max(0, int.Parse(File.ReadAllText(_fname))); + } catch(Exception) { + _movieIndex = 0; + } + + } +} \ No newline at end of file diff --git a/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs b/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs new file mode 100644 index 0000000..ed96a89 --- /dev/null +++ b/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs @@ -0,0 +1,20 @@ +using MU3.Util; + +namespace MU3.Sequence; + +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) + || instance.getTriggerOn(UIInput.Key.MenuRight)) { + return true; + } + return false; + } +} \ No newline at end of file diff --git a/AttractVideoPlayer/MU3/patch_AdvManager.cs b/AttractVideoPlayer/MU3/patch_AdvManager.cs new file mode 100644 index 0000000..67708c5 --- /dev/null +++ b/AttractVideoPlayer/MU3/patch_AdvManager.cs @@ -0,0 +1,35 @@ +using MU3.Operation; +using MU3.Util; +using UnityEngine; + +namespace MU3; + +class patch_AdvManager: AdvManager { + private GameObject objMovie; + private CriManaMovieMaterial movieController; + + private extern bool orig_exec(); + public new bool exec() { + if(movieController?.player?.status == CriMana.Player.Status.Playing) { + if(Singleton.instance.getTriggerOn(UIInput.Key.Service)) { + movieController.player.Pause(!movieController.player.IsPaused()); + } else if(Singleton.instance.getTriggerOn(UIInput.Key.L2)) { + addMovieOffset(-1); + } else if(Singleton.instance.getTriggerOn(UIInput.Key.L3)) { + addMovieOffset(1); + } + } + + return orig_exec(); + } + public void addMovieOffset(int offset) { + var om = (patch_OperationManager)Singleton.instance; + om.MovieIndex += offset; + + movieController.Stop(); + Utility.destroyGameObject(ref movieController); + Utility.destroyGameObject(ref objMovie); + + initMovie(); + } +} \ No newline at end of file diff --git a/Mu3Mods.sln b/Mu3Mods.sln index 1e8bb06..9c71b3d 100644 --- a/Mu3Mods.sln +++ b/Mu3Mods.sln @@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockMemoryChapters", "Unl EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatinumTiming", "PlatinumTiming\PlatinumTiming.csproj", "{099AD6AF-181A-4745-88C4-1D0466BECCB1}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AttractVideoPlayer", "AttractVideoPlayer\AttractVideoPlayer.csproj", "{6889330F-2E7E-4778-ADFF-70AF036F1BD5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -117,6 +119,10 @@ Global {099AD6AF-181A-4745-88C4-1D0466BECCB1}.Debug|x64.Build.0 = Debug|x64 {099AD6AF-181A-4745-88C4-1D0466BECCB1}.Release|x64.ActiveCfg = Release|x64 {099AD6AF-181A-4745-88C4-1D0466BECCB1}.Release|x64.Build.0 = Release|x64 + {6889330F-2E7E-4778-ADFF-70AF036F1BD5}.Debug|x64.ActiveCfg = Debug|x64 + {6889330F-2E7E-4778-ADFF-70AF036F1BD5}.Debug|x64.Build.0 = Debug|x64 + {6889330F-2E7E-4778-ADFF-70AF036F1BD5}.Release|x64.ActiveCfg = Release|x64 + {6889330F-2E7E-4778-ADFF-70AF036F1BD5}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE