From 137e6f7a810840fd4fd509762135088d9eac40d0 Mon Sep 17 00:00:00 2001 From: Eddio0141 Date: Sat, 24 Jun 2023 08:48:40 +0100 Subject: [PATCH] movie can run while one is running already --- .../Runner/MovieAlreadyRunningException.cs | 8 ---- .../Runner/MovieAlreadySettingUpException.cs | 8 ++++ .../Implementations/Movie/MovieRunner.cs | 46 +++++++++---------- 3 files changed, 31 insertions(+), 31 deletions(-) delete mode 100644 UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadyRunningException.cs create mode 100644 UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadySettingUpException.cs diff --git a/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadyRunningException.cs b/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadyRunningException.cs deleted file mode 100644 index 6c7f598c..00000000 --- a/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadyRunningException.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace UniTAS.Patcher.Exceptions.Movie.Runner; - -public class MovieAlreadyRunningException : MovieRunnerException -{ - public MovieAlreadyRunningException() : base("Movie is already running") - { - } -} \ No newline at end of file diff --git a/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadySettingUpException.cs b/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadySettingUpException.cs new file mode 100644 index 00000000..f918b8f7 --- /dev/null +++ b/UniTAS/Patcher/Exceptions/Movie/Runner/MovieAlreadySettingUpException.cs @@ -0,0 +1,8 @@ +namespace UniTAS.Patcher.Exceptions.Movie.Runner; + +public class MovieAlreadySettingUpException : MovieRunnerException +{ + public MovieAlreadySettingUpException() : base("Movie is already running") + { + } +} \ No newline at end of file diff --git a/UniTAS/Patcher/Implementations/Movie/MovieRunner.cs b/UniTAS/Patcher/Implementations/Movie/MovieRunner.cs index 50ae585c..9fb42c17 100644 --- a/UniTAS/Patcher/Implementations/Movie/MovieRunner.cs +++ b/UniTAS/Patcher/Implementations/Movie/MovieRunner.cs @@ -1,9 +1,12 @@ using System; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using UniTAS.Patcher.Exceptions.Movie.Runner; +using UniTAS.Patcher.Interfaces.Coroutine; using UniTAS.Patcher.Interfaces.DependencyInjection; using UniTAS.Patcher.Interfaces.Events.MonoBehaviourEvents.DontRunIfPaused; using UniTAS.Patcher.Interfaces.Events.Movie; +using UniTAS.Patcher.Models.Coroutine; using UniTAS.Patcher.Models.DependencyInjection; using UniTAS.Patcher.Models.Movie; using UniTAS.Patcher.Services; @@ -21,7 +24,6 @@ public class MovieRunner : IMovieRunner, IOnInputUpdateActual, IMovieRunnerEvent private readonly IGameRestart _gameRestart; public bool MovieEnd { get; private set; } = true; - private bool _cleanUp; private bool _setup; private readonly IMovieParser _parser; @@ -35,13 +37,14 @@ public class MovieRunner : IMovieRunner, IOnInputUpdateActual, IMovieRunnerEvent private readonly IVirtualEnvController _virtualEnvController; private readonly ITimeEnv _timeEnv; private readonly IRandomEnv _randomEnv; + private readonly ICoroutine _coroutine; public UpdateType UpdateType { get; set; } public MovieRunner(IGameRestart gameRestart, IMovieParser parser, IMovieLogger movieLogger, IOnMovieRunningStatusChange[] onMovieRunningStatusChange, IVirtualEnvController virtualEnvController, ITimeEnv timeEnv, IRandomEnv randomEnv, ILogger logger, - IOnMovieUpdate[] onMovieUpdates) + IOnMovieUpdate[] onMovieUpdates, ICoroutine coroutine) { _gameRestart = gameRestart; _parser = parser; @@ -52,16 +55,21 @@ public MovieRunner(IGameRestart gameRestart, IMovieParser parser, IMovieLogger m _randomEnv = randomEnv; _logger = logger; _onMovieUpdates = onMovieUpdates; + _coroutine = coroutine; _gameRestart.OnGameRestartResume += OnGameRestartResume; } public void RunFromInput(string input) { - if (!MovieEnd || _setup) throw new MovieAlreadyRunningException(); - + if (_setup) throw new MovieAlreadySettingUpException(); _setup = true; + if (!MovieEnd) + { + MovieRunningStatusChange(false); + } + Tuple parsed; try { @@ -71,7 +79,7 @@ public void RunFromInput(string input) { MovieRunningStatusChange(false); _setup = false; - _movieLogger.LogError($"Failed to run TAS movie, an exception was thrown!"); + _movieLogger.LogError("Failed to run TAS movie, an exception was thrown!"); _movieLogger.LogError(e.Message); _logger.LogDebug(e); @@ -106,13 +114,6 @@ private void OnGameRestartResume(DateTime startupTime, bool preMonoBehaviourResu public void InputUpdateActual(bool fixedUpdate, bool newInputSystemUpdate) { - if (_cleanUp) - { - _virtualEnvController.RunVirtualEnvironment = false; - _cleanUp = false; - return; - } - if (MovieEnd) return; // skip if update type doesn't match current update type @@ -130,7 +131,10 @@ public void InputUpdateActual(bool fixedUpdate, bool newInputSystemUpdate) if (_engine.Finished) { - AtMovieEnd(); + _timeEnv.FrameTime = 0; + MovieRunningStatusChange(false); + _coroutine.Start(FinishMovieCleanup()); + _movieLogger.LogInfo("movie end"); } } @@ -142,16 +146,6 @@ private void RunUpdateEvents(bool fixedUpdate) } } - private void AtMovieEnd() - { - _timeEnv.FrameTime = 0; - _cleanUp = true; - _setup = false; - MovieRunningStatusChange(false); - - _movieLogger.LogInfo("movie end"); - } - private void MovieRunningStatusChange(bool running) { if (running) @@ -170,6 +164,12 @@ private void MovieRunningStatusChange(bool running) } } + private IEnumerator FinishMovieCleanup() + { + yield return new WaitForUpdateUnconditional(); + _virtualEnvController.RunVirtualEnvironment = false; + } + public event Action OnMovieStart; public event Action OnMovieEnd; } \ No newline at end of file