diff --git a/AttractVideoPlayer/AttractVideoPlayer.csproj b/AttractVideoPlayer/AttractVideoPlayer.csproj new file mode 100644 index 0000000..579a70e --- /dev/null +++ b/AttractVideoPlayer/AttractVideoPlayer.csproj @@ -0,0 +1,13 @@ + + + Assembly-CSharp.AttractVideoPlayer.mm + Control attract video + + + + + 2.0 + {6889330F-2E7E-4778-ADFF-70AF036F1BD5} + + + \ 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..4864ed1 --- /dev/null +++ b/AttractVideoPlayer/MU3.OperationManager/patch_OperationManager.cs @@ -0,0 +1,54 @@ +using MU3.Operation; +using MU3.SceneObject; +using MU3.Sequence; +using MU3.Util; +using System.Collections.ObjectModel; +using UnityEngine; + +namespace MU3.Operation; + +class patch_OperationManager: OperationManager +{ + private static readonly string CurrentSongIndexFilePath = "BepInEx/monomod/AttractVideoPlayer.currentSongIndex.txt"; + private ReadOnlyCollection _movieDataList; + public new MovieData movieData + { + get + { + if (_movieDataList.Count > 0) + { + int currentSongIndex = 0; + try + { + currentSongIndex = int.Parse(System.IO.File.ReadAllText(CurrentSongIndexFilePath)); + } + catch (System.Exception) + { + saveCurrentSongIndex(0); + } + + if (currentSongIndex < 0) + { + currentSongIndex = _movieDataList.Count - 1; + saveCurrentSongIndex(currentSongIndex); + } + + if (currentSongIndex >= _movieDataList.Count) + { + currentSongIndex = 0; + saveCurrentSongIndex(currentSongIndex); + } + + Debug.Log("currentSongIndex: " + currentSongIndex); + + return _movieDataList[currentSongIndex]; + } + return null; + } + } + + private void saveCurrentSongIndex(int currentSongIndex) + { + System.IO.File.WriteAllText(CurrentSongIndexFilePath, currentSongIndex.ToString()); + } +} \ 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..cdac034 --- /dev/null +++ b/AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs @@ -0,0 +1,28 @@ +using Mono.Cecil; +using MU3.AM; +using MU3.Operation; +using MU3.SceneObject; +using MU3.Sequence; +using MU3.Util; +using UnityEngine; + +namespace MU3.Sequence; + +class patch_Advertise : Advertise +{ + private bool checkButtonOrAime() + { + if (SingletonStateMachine.instance.aimeReader.advCheck()) + { + Singleton.instance.loginType = OperationManager.LoginType.Aime; + return true; + } + UIInput instance = Singleton.instance; + if (instance.getTriggerOn(UIInput.Key.Decision) || instance.getTriggerOn(UIInput.Key.OptionBackward) || instance.getTriggerOn(UIInput.Key.OptionForward) || instance.getTriggerOn(UIInput.Key.SkipRight) || instance.getTriggerOn(UIInput.Key.MenuLeft) || instance.getTriggerOn(UIInput.Key.MenuRight)) + { + Singleton.instance.loginType = OperationManager.LoginType.Button; + 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..c2a5fe6 --- /dev/null +++ b/AttractVideoPlayer/MU3/patch_AdvManager.cs @@ -0,0 +1,66 @@ +using Mono.Cecil; +using MU3.Operation; +using MU3.SceneObject; +using MU3.Sequence; +using MU3.Util; +using UnityEngine; + +namespace MU3; + +class patch_AdvManager : AdvManager +{ + private static readonly string CurrentSongIndexFilePath = "BepInEx/monomod/AttractVideoPlayer.currentSongIndex.txt"; + private static readonly float DelayBetweenButtonPress = 0.5f; + private float lastButtonPressedTime = 0f; + + private GameObject objMovie; + private CriManaMovieMaterial movieController; + private extern bool orig_initMovie(); + public new bool initMovie() + { + return orig_initMovie(); + } + + private extern bool orig_exec(); + public new bool exec() + { + if (Time.time - lastButtonPressedTime > DelayBetweenButtonPress) + { + if (Singleton.instance.getStateOn(UIInput.Key.Service)) + { + lastButtonPressedTime = Time.time; + + movieController?.player.Pause(!movieController.player.IsPaused()); + } + else if (Singleton.instance.getStateOn(UIInput.Key.L2)) + { + lastButtonPressedTime = Time.time; + + addOffsetToCurrentSongIndexAndPlayMovie(-1); + } + else if (Singleton.instance.getStateOn(UIInput.Key.L3)) + { + lastButtonPressedTime = Time.time; + + addOffsetToCurrentSongIndexAndPlayMovie(1); + } + } + + return orig_exec(); + } + public void addOffsetToCurrentSongIndexAndPlayMovie(int offset) + { + try + { + int currentSongIndex = int.Parse(System.IO.File.ReadAllText(CurrentSongIndexFilePath)) + offset; + System.IO.File.WriteAllText(CurrentSongIndexFilePath, currentSongIndex.ToString()); + } + catch (System.Exception) { } + + 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