feat: implement AttractVideoPlayer (#2)
Service Button : Pause the attract video L2/L3 Buttons : Previous/next to cycle through all the attract videos Saving the selected video for future game launches Co-authored-by: akanyan <alicechecker01@proton.me> Reviewed-on: #2 Co-authored-by: jujuforce <jujuforce@noreply.gitea.tendokyu.moe> Co-committed-by: jujuforce <jujuforce@noreply.gitea.tendokyu.moe>
This commit is contained in:
parent
7f5cd6d0d7
commit
8cbc7e8b86
7
AttractVideoPlayer/AttractVideoPlayer.csproj
Normal file
7
AttractVideoPlayer/AttractVideoPlayer.csproj
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<AssemblyName>Assembly-CSharp.AttractVideoPlayer.mm</AssemblyName>
|
||||||
|
<Description>Control attract video</Description>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="..\Mu3Mods.csproj" />
|
||||||
|
</Project>
|
@ -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<MovieData> _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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
20
AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs
Normal file
20
AttractVideoPlayer/MU3.Sequence/patch_Advertise.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using MU3.Util;
|
||||||
|
|
||||||
|
namespace MU3.Sequence;
|
||||||
|
|
||||||
|
class patch_Advertise: Advertise {
|
||||||
|
// Exclude Back/Left/Right
|
||||||
|
private bool anyKeyDown() {
|
||||||
|
UIInput instance = Singleton<UIInput>.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;
|
||||||
|
}
|
||||||
|
}
|
35
AttractVideoPlayer/MU3/patch_AdvManager.cs
Normal file
35
AttractVideoPlayer/MU3/patch_AdvManager.cs
Normal file
@ -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<UIInput>.instance.getTriggerOn(UIInput.Key.Service)) {
|
||||||
|
movieController.player.Pause(!movieController.player.IsPaused());
|
||||||
|
} else if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.L2)) {
|
||||||
|
addMovieOffset(-1);
|
||||||
|
} else if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.L3)) {
|
||||||
|
addMovieOffset(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return orig_exec();
|
||||||
|
}
|
||||||
|
public void addMovieOffset(int offset) {
|
||||||
|
var om = (patch_OperationManager)Singleton<OperationManager>.instance;
|
||||||
|
om.MovieIndex += offset;
|
||||||
|
|
||||||
|
movieController.Stop();
|
||||||
|
Utility.destroyGameObject(ref movieController);
|
||||||
|
Utility.destroyGameObject(ref objMovie);
|
||||||
|
|
||||||
|
initMovie();
|
||||||
|
}
|
||||||
|
}
|
@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnlockMemoryChapters", "Unl
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatinumTiming", "PlatinumTiming\PlatinumTiming.csproj", "{099AD6AF-181A-4745-88C4-1D0466BECCB1}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatinumTiming", "PlatinumTiming\PlatinumTiming.csproj", "{099AD6AF-181A-4745-88C4-1D0466BECCB1}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AttractVideoPlayer", "AttractVideoPlayer\AttractVideoPlayer.csproj", "{6889330F-2E7E-4778-ADFF-70AF036F1BD5}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|x64 = Debug|x64
|
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}.Debug|x64.Build.0 = Debug|x64
|
||||||
{099AD6AF-181A-4745-88C4-1D0466BECCB1}.Release|x64.ActiveCfg = Release|x64
|
{099AD6AF-181A-4745-88C4-1D0466BECCB1}.Release|x64.ActiveCfg = Release|x64
|
||||||
{099AD6AF-181A-4745-88C4-1D0466BECCB1}.Release|x64.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
Loading…
Reference in New Issue
Block a user