From c0fde42a0c60b0c2718d3ab6738ac497986faeb7 Mon Sep 17 00:00:00 2001 From: adelikat Date: Tue, 14 Apr 2020 21:35:44 -0500 Subject: [PATCH] don't expose Bk2Controller, clients need to depend on an interface and rely on the Movie (well, MovieSession currently) to generate an IMovieController instance, since different implementations of IMovie need to be able to create their own controller implementations --- .../inputAdapters/InputManager.cs | 2 +- BizHawk.Client.Common/movie/MovieSession.cs | 6 +++--- BizHawk.Client.Common/movie/bk2/Bk2Controller.cs | 2 +- .../movie/interfaces/IMovieSession.cs | 7 +++++-- .../tools/Lua/Libraries/TAStudioLuaLibrary.cs | 12 ++++++------ BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs | 14 +++++++------- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/BizHawk.Client.Common/inputAdapters/InputManager.cs b/BizHawk.Client.Common/inputAdapters/InputManager.cs index 728a3c0019..77c812a47e 100644 --- a/BizHawk.Client.Common/inputAdapters/InputManager.cs +++ b/BizHawk.Client.Common/inputAdapters/InputManager.cs @@ -65,7 +65,7 @@ namespace BizHawk.Client.Common MovieInputSourceAdapter.Source = MultitrackRewiringAdapter; ControllerOutput.Source = MovieOutputHardpoint; - Global.MovieSession.CreateMovieController(MovieInputSourceAdapter.Definition); + Global.MovieSession.RecreateMovieController(MovieInputSourceAdapter.Definition); // connect the movie session before MovieOutputHardpoint if it is doing anything // otherwise connect the MovieInputSourceAdapter to it, effectively bypassing the movie session diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs index c40254f368..7b36d6208d 100644 --- a/BizHawk.Client.Common/movie/MovieSession.cs +++ b/BizHawk.Client.Common/movie/MovieSession.cs @@ -47,15 +47,15 @@ namespace BizHawk.Client.Common /// public Action ModeChangedCallback { get; set; } - public void CreateMovieController(ControllerDefinition definition) + public void RecreateMovieController(ControllerDefinition definition) { MovieController = new Bk2Controller(definition); } - public IMovieController GenerateMovieController() + public IMovieController GenerateMovieController(ControllerDefinition definition = null) { // TODO: expose Movie.LogKey and pass in here - return new Bk2Controller("", MovieController.Definition); + return new Bk2Controller("", definition ?? MovieController.Definition); } // Convenience property that gets the controller state from the movie for the most recent frame diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Controller.cs b/BizHawk.Client.Common/movie/bk2/Bk2Controller.cs index bd21957c67..8eab537d6c 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Controller.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Controller.cs @@ -7,7 +7,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - public class Bk2Controller : IMovieController + internal class Bk2Controller : IMovieController { private readonly WorkingDictionary _myBoolButtons = new WorkingDictionary(); private readonly WorkingDictionary _myAxisControls = new WorkingDictionary(); diff --git a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs index 87b6c3f591..f88ed0c739 100644 --- a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs +++ b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs @@ -15,14 +15,17 @@ namespace BizHawk.Client.Common /// /// Recreates MovieController with the given controller definition + /// with an empty controller state /// - void CreateMovieController(ControllerDefinition definition); + void RecreateMovieController(ControllerDefinition definition); /// /// Creates a instance based on the + /// given button definition if provided else the /// current button definition + /// will be used /// - IMovieController GenerateMovieController(); + IMovieController GenerateMovieController(ControllerDefinition definition = null); bool ReadOnly { get; set; } bool MovieIsQueued { get; } diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs index 86614b98ce..32ad9fcd6f 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs @@ -375,17 +375,17 @@ namespace BizHawk.Client.EmuHawk var branch = Tastudio.CurrentTasMovie.Branches.FirstOrDefault(b => b.UniqueIdentifier.ToString() == branchId); if (branch != null && frame < branch.InputLog.Count) { - var adapter = new Bk2Controller(Global.MovieSession.MovieController.Definition); - adapter.SetFromMnemonic(branch.InputLog[frame]); + var controller = Global.MovieSession.GenerateMovieController(); + controller.SetFromMnemonic(branch.InputLog[frame]); - foreach (var button in adapter.Definition.BoolButtons) + foreach (var button in controller.Definition.BoolButtons) { - table[button] = adapter.IsPressed(button); + table[button] = controller.IsPressed(button); } - foreach (var button in adapter.Definition.AxisControls) + foreach (var button in controller.Definition.AxisControls) { - table[button] = adapter.AxisValue(button); + table[button] = controller.AxisValue(button); } } } diff --git a/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs b/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs index 5b5f0297e5..8aa992b286 100644 --- a/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs +++ b/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs @@ -12,16 +12,16 @@ namespace BizHawk.Client.EmuHawk private readonly IEmulator _emulator; private readonly ToolManager _tools; private readonly string[] _log; - private readonly Bk2Controller _targetController; + private readonly IMovieController _targetController; private string _inputKey; - private Bk2Controller _controller; + private IMovieController _controller; public MovieZone(IMovie movie, IEmulator emulator, ToolManager tools, int start, int length, string key = "") { _emulator = emulator; _tools = tools; var lg = movie.LogGeneratorInstance(Global.MovieSession.MovieController); - _targetController = new Bk2Controller(_emulator.ControllerDefinition); + _targetController = Global.MovieSession.GenerateMovieController(); _targetController.SetFrom(_targetController); // Reference and create all buttons if (key == "") @@ -53,7 +53,7 @@ namespace BizHawk.Client.EmuHawk } } - _controller = new Bk2Controller(d); + _controller = Global.MovieSession.GenerateMovieController(d); var logGenerator = Global.MovieSession.Movie.LogGeneratorInstance(_controller); logGenerator.GenerateLogEntry(); // Reference and create all buttons. @@ -106,7 +106,7 @@ namespace BizHawk.Client.EmuHawk } } - var newController = new Bk2Controller(d); + var newController = Global.MovieSession.GenerateMovieController(d); var logGenerator = Global.MovieSession.Movie.LogGeneratorInstance(newController); logGenerator.GenerateLogEntry(); // Reference and create all buttons. @@ -252,7 +252,7 @@ namespace BizHawk.Client.EmuHawk Name = Path.GetFileNameWithoutExtension(fileName); // Adapters - _targetController = new Bk2Controller(_emulator.ControllerDefinition); + _targetController = Global.MovieSession.GenerateMovieController(); _targetController.SetFrom(_targetController); // Reference and create all buttons string[] keys = _inputKey.Split('|'); var d = new ControllerDefinition(_emulator.ControllerDefinition); @@ -268,7 +268,7 @@ namespace BizHawk.Client.EmuHawk } } - _controller = new Bk2Controller(d); + _controller = Global.MovieSession.GenerateMovieController(d); } #region Custom Latch