diff --git a/BizHawk.Client.Common/Api/Classes/JoypadApi.cs b/BizHawk.Client.Common/Api/Classes/JoypadApi.cs
index da42cea7b4..b1fbf1664b 100644
--- a/BizHawk.Client.Common/Api/Classes/JoypadApi.cs
+++ b/BizHawk.Client.Common/Api/Classes/JoypadApi.cs
@@ -28,7 +28,7 @@ namespace BizHawk.Client.Common
public void SetFromMnemonicStr(string inputLogEntry)
{
- var lg = Global.MovieSession.MovieControllerInstance();
+ var lg = Global.MovieSession.GenerateMovieController(Global.Emulator.ControllerDefinition);
try
{
lg.SetFromMnemonic(inputLogEntry);
diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs
index 443d177fa1..2e8fd51f80 100644
--- a/BizHawk.Client.Common/movie/MovieSession.cs
+++ b/BizHawk.Client.Common/movie/MovieSession.cs
@@ -27,7 +27,7 @@ namespace BizHawk.Client.Common
public bool MovieIsQueued => QueuedMovie != null;
public MultitrackRecorder MultiTrack { get; } = new MultitrackRecorder();
- public IMovieController MovieController { get; set; } = MovieService.DefaultInstance.LogGeneratorInstance().MovieControllerAdapter;
+ public IMovieController MovieController { get; set; } = new Bk2Controller("", NullController.Instance.Definition);
public IMovie Movie { get; set; }
public bool ReadOnly { get; set; } = true;
@@ -52,19 +52,18 @@ namespace BizHawk.Client.Common
MovieController = new Bk2Controller(definition);
}
+ public IMovieController GenerateMovieController(ControllerDefinition definition)
+ {
+ // TODO: expose Movie.LogKey and pass in here
+ return new Bk2Controller("", definition);
+ }
+
///
/// Simply shortens the verbosity necessary otherwise
///
public ILogEntryGenerator LogGeneratorInstance(IController source)
{
- var lg = Movie.LogGeneratorInstance();
- lg.SetSource(source);
- return lg;
- }
-
- public IMovieController MovieControllerInstance()
- {
- return Movie.LogGeneratorInstance().MovieControllerAdapter;
+ return Movie.LogGeneratorInstance(source);
}
// Convenience property that gets the controller state from the movie for the most recent frame
@@ -277,8 +276,7 @@ namespace BizHawk.Client.Common
else if (Global.Config.MoviePlaybackPokeMode)
{
LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
- var lg = Movie.LogGeneratorInstance();
- lg.SetSource(Global.InputManager.MovieOutputHardpoint);
+ var lg = Movie.LogGeneratorInstance(Global.InputManager.MovieOutputHardpoint);
if (!lg.IsEmpty)
{
LatchInputFromPlayer(Global.InputManager.MovieInputSourceAdapter);
diff --git a/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs b/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs
index 814cd1a8fb..3dd2db5365 100644
--- a/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs
+++ b/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs
@@ -6,20 +6,17 @@ using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common
{
- public class Bk2LogEntryGenerator : ILogEntryGenerator
+ internal class Bk2LogEntryGenerator : ILogEntryGenerator
{
- private readonly string _logKey;
- private IController _source = NullController.Instance;
+ private readonly string _systemId;
+ private readonly IController _source;
- public Bk2LogEntryGenerator(string logKey)
+ public Bk2LogEntryGenerator(string systemId, IController source)
{
- _logKey = logKey;
+ _systemId = systemId;
+ _source = source;
}
- public IMovieController MovieControllerAdapter => new Bk2Controller(_logKey, _source.Definition);
-
- public void SetSource(IController source) => _source = source;
-
public string GenerateInputDisplay() => CreateLogEntry(forInputDisplay: true);
public bool IsEmpty => EmptyEntry == GenerateLogEntry();
@@ -38,9 +35,7 @@ namespace BizHawk.Client.Common
sb.Append("#");
foreach (var button in group)
{
- sb
- .Append(button)
- .Append('|');
+ sb.Append(button).Append('|');
}
}
@@ -56,11 +51,11 @@ namespace BizHawk.Client.Common
{
if (_source.Definition.BoolButtons.Contains(button))
{
- dict.Add(button, Bk2MnemonicLookup.Lookup(button, Global.Emulator.SystemId).ToString());
+ dict.Add(button, Bk2MnemonicLookup.Lookup(button, _systemId).ToString());
}
else if (_source.Definition.AxisControls.Contains(button))
{
- dict.Add(button, Bk2MnemonicLookup.LookupAxis(button, Global.Emulator.SystemId));
+ dict.Add(button, Bk2MnemonicLookup.LookupAxis(button, _systemId));
}
}
}
@@ -115,7 +110,9 @@ namespace BizHawk.Client.Common
}
else
{
- sb.Append(_source.IsPressed(button) ? Bk2MnemonicLookup.Lookup(button, Global.Emulator.SystemId) : forInputDisplay ? ' ' : '.');
+ sb.Append(_source.IsPressed(button)
+ ? Bk2MnemonicLookup.Lookup(button, _systemId)
+ : forInputDisplay ? ' ' : '.');
}
}
}
diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs
index e377dc3235..f40538d299 100644
--- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs
+++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.InputLog.cs
@@ -288,9 +288,7 @@ namespace BizHawk.Client.Common
protected void WriteRawInputLog(TextWriter writer)
{
- var lg = new Bk2LogEntryGenerator(LogKey);
- lg.SetSource(Global.InputManager.MovieOutputHardpoint);
-
+ var lg = new Bk2LogEntryGenerator(LogKey, Global.InputManager.MovieOutputHardpoint);
writer.WriteLine(lg.GenerateLogKey());
foreach (var record in Log)
diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs
index d0d85079e3..decb6d8d02 100644
--- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs
+++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.cs
@@ -38,9 +38,10 @@ namespace BizHawk.Client.Common
public virtual bool Changes { get; protected set; }
public bool IsCountingRerecords { get; set; } = true;
- public ILogEntryGenerator LogGeneratorInstance()
+ public ILogEntryGenerator LogGeneratorInstance(IController source)
{
- return new Bk2LogEntryGenerator(LogKey);
+ // TODO: when Bk2 movies have an instance of the core, use that
+ return new Bk2LogEntryGenerator(Global.Emulator.SystemId, source);
}
public double FrameCount
@@ -84,8 +85,7 @@ namespace BizHawk.Client.Common
public void AppendFrame(IController source)
{
- var lg = LogGeneratorInstance();
- lg.SetSource(source);
+ var lg = LogGeneratorInstance(source);
Log.Add(lg.GenerateLogEntry());
Changes = true;
}
@@ -100,8 +100,7 @@ namespace BizHawk.Client.Common
}
}
- var lg = LogGeneratorInstance();
- lg.SetSource(source);
+ var lg = LogGeneratorInstance(source);
SetFrameAt(frame, lg.GenerateLogEntry());
Changes = true;
@@ -154,17 +153,14 @@ namespace BizHawk.Client.Common
public virtual void PokeFrame(int frame, IController source)
{
- var lg = LogGeneratorInstance();
- lg.SetSource(source);
-
- Changes = true;
+ var lg = LogGeneratorInstance(source);
SetFrameAt(frame, lg.GenerateLogEntry());
+ Changes = true;
}
public virtual void ClearFrame(int frame)
{
- var lg = LogGeneratorInstance();
- lg.SetSource(Global.MovieSession.MovieControllerInstance());
+ var lg = LogGeneratorInstance(Global.MovieSession.MovieController);
SetFrameAt(frame, lg.EmptyEntry);
Changes = true;
}
diff --git a/BizHawk.Client.Common/movie/interfaces/ILogEntryGenerator.cs b/BizHawk.Client.Common/movie/interfaces/ILogEntryGenerator.cs
index 37fc502473..c893431d43 100644
--- a/BizHawk.Client.Common/movie/interfaces/ILogEntryGenerator.cs
+++ b/BizHawk.Client.Common/movie/interfaces/ILogEntryGenerator.cs
@@ -1,15 +1,12 @@
using System.Collections.Generic;
-using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common
{
+ ///
+ /// Specifies a class that can take an input source and generate a movie input log entry
+ ///
public interface ILogEntryGenerator
{
- ///
- /// Sets the controller source used to generate an input log entry
- ///
- void SetSource(IController source);
-
///
/// Generates an input log entry for the current state of Source
///
@@ -42,11 +39,5 @@ namespace BizHawk.Client.Common
/// Gets an input log entry that is considered empty. (booleans will be false, floats will be 0)
///
string EmptyEntry { get; }
-
- ///
- /// Gets a movie controller adapter in the same state as the log entry
- ///
- ///
- IMovieController MovieControllerAdapter { get; }
}
-}
+}
\ No newline at end of file
diff --git a/BizHawk.Client.Common/movie/interfaces/IMovie.cs b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
index 2d0b106dfb..00f34eb65f 100644
--- a/BizHawk.Client.Common/movie/interfaces/IMovie.cs
+++ b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
@@ -114,9 +114,9 @@ namespace BizHawk.Client.Common
void SaveBackup();
///
- /// Creates an instance of the Input log entry used to generate the input log
+ /// Creates a log generator using the given input source
///
- ILogEntryGenerator LogGeneratorInstance();
+ ILogEntryGenerator LogGeneratorInstance(IController source);
#endregion
diff --git a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs
index 9a3d37e0ef..5d010104b2 100644
--- a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs
+++ b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs
@@ -8,7 +8,6 @@ namespace BizHawk.Client.Common
IMovie Movie { get; set; }
IMovie QueuedMovie { get; }
IMovieController MovieController { get; }
- IMovieController MovieControllerInstance();
MultitrackRecorder MultiTrack { get; }
IController PreviousFrame { get; }
@@ -16,6 +15,8 @@ namespace BizHawk.Client.Common
void CreateMovieController(ControllerDefinition definition);
+ IMovieController GenerateMovieController(ControllerDefinition definition);
+
bool ReadOnly { get; set; }
bool MovieIsQueued { get; }
diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs
index 89d9612ac3..7598d6d7d8 100644
--- a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs
+++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs
@@ -290,13 +290,11 @@ namespace BizHawk.Client.Common
public void InsertInput(int frame, IEnumerable inputStates)
{
// ChangeLog is done in the InsertInput call.
- var lg = LogGeneratorInstance();
-
var inputLog = new List();
foreach (var input in inputStates)
{
- lg.SetSource(input);
+ var lg = LogGeneratorInstance(input);
inputLog.Add(lg.GenerateLogEntry());
}
@@ -307,7 +305,7 @@ namespace BizHawk.Client.Common
{
int firstChangedFrame = -1;
ChangeLog.BeginNewBatch($"Copy Over Input: {frame}");
- var lg = LogGeneratorInstance();
+
var states = inputStates.ToList();
if (Log.Count < states.Count + frame)
@@ -324,7 +322,7 @@ namespace BizHawk.Client.Common
break;
}
- lg.SetSource(states[i]);
+ var lg = LogGeneratorInstance(states[i]);
var entry = lg.GenerateLogEntry();
if (firstChangedFrame == -1 && Log[frame + i] != entry)
{
@@ -347,8 +345,7 @@ namespace BizHawk.Client.Common
bool endBatch = ChangeLog.BeginNewBatch($"Insert Empty Frame: {frame}", true);
ChangeLog.AddGeneralUndo(frame, InputLogLength + count - 1);
- var lg = LogGeneratorInstance();
- lg.SetSource(Global.MovieSession.MovieControllerInstance());
+ var lg = LogGeneratorInstance(Global.MovieSession.MovieController);
if (frame > Log.Count())
{
@@ -395,8 +392,8 @@ namespace BizHawk.Client.Common
Global.MovieSession.MovieController.SetFromSticky(Global.InputManager.AutofireStickyXorAdapter);
- var lg = LogGeneratorInstance();
- lg.SetSource(Global.InputManager.MovieOutputHardpoint); // account for autohold. needs autohold pattern to be already recorded in the current frame
+ // account for autohold. needs autohold pattern to be already recorded in the current frame
+ var lg = LogGeneratorInstance(Global.InputManager.MovieOutputHardpoint);
for (int i = 0; i < numFrames; i++)
{
@@ -422,8 +419,7 @@ namespace BizHawk.Client.Common
var adapter = GetInputState(frame);
adapter.SetBool(buttonName, !adapter.IsPressed(buttonName));
- var lg = LogGeneratorInstance();
- lg.SetSource(adapter);
+ var lg = LogGeneratorInstance(adapter);
Log[frame] = lg.GenerateLogEntry();
Changes = true;
InvalidateAfter(frame);
@@ -442,8 +438,7 @@ namespace BizHawk.Client.Common
var old = adapter.IsPressed(buttonName);
adapter.SetBool(buttonName, val);
- var lg = LogGeneratorInstance();
- lg.SetSource(adapter);
+ var lg = LogGeneratorInstance(adapter);
Log[frame] = lg.GenerateLogEntry();
if (old != val)
@@ -470,8 +465,7 @@ namespace BizHawk.Client.Common
bool old = adapter.IsPressed(buttonName);
adapter.SetBool(buttonName, val);
- var lg = LogGeneratorInstance();
- lg.SetSource(adapter);
+ var lg = LogGeneratorInstance(adapter);
Log[frame + i] = lg.GenerateLogEntry();
if (changed == -1 && old != val)
@@ -500,8 +494,7 @@ namespace BizHawk.Client.Common
var old = adapter.AxisValue(buttonName);
adapter.SetAxis(buttonName, val);
- var lg = LogGeneratorInstance();
- lg.SetSource(adapter);
+ var lg = LogGeneratorInstance(adapter);
Log[frame] = lg.GenerateLogEntry();
if (old != val)
@@ -528,8 +521,7 @@ namespace BizHawk.Client.Common
float old = adapter.AxisValue(buttonName);
adapter.SetAxis(buttonName, val);
- var lg = LogGeneratorInstance();
- lg.SetSource(adapter);
+ var lg = LogGeneratorInstance(adapter);
Log[frame + i] = lg.GenerateLogEntry();
if (changed == -1 && old != val)
diff --git a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
index b4b772a708..e03763772f 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/OSDManager.cs
@@ -233,7 +233,7 @@ namespace BizHawk.Client.EmuHawk
{
var m = Global.MovieSession.Movie.IsPlayingOrRecording()
? Global.MovieSession.Movie.GetInputState(Global.Emulator.Frame - 1)
- : Global.MovieSession.MovieControllerInstance();
+ : Global.MovieSession.MovieController;
return MakeStringFor(Global.InputManager.AutofireStickyXorAdapter.And(m));
}
diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index f0e7ff1bfe..78593e02e9 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -210,7 +210,6 @@ namespace BizHawk.Client.EmuHawk
MovieSession = new MovieSession
{
Movie = MovieService.DefaultInstance,
- MovieController = MovieService.DefaultInstance.LogGeneratorInstance().MovieControllerAdapter,
MessageCallback = AddOnScreenMessage,
PopupCallback = ShowMessageCoreComm,
AskYesNoCallback = StateErrorAskUser,
diff --git a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs
index 9bbc1d814f..f62a5bcd73 100644
--- a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs
+++ b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs
@@ -779,7 +779,7 @@ namespace BizHawk.Client.EmuHawk
if (index < _bestBotAttempt.Log.Count)
{
var logEntry = _bestBotAttempt.Log[index];
- var lg = Global.MovieSession.MovieControllerInstance();
+ var lg = Global.MovieSession.GenerateMovieController(Emulator.ControllerDefinition);
lg.SetFromMnemonic(logEntry);
foreach (var button in lg.Definition.BoolButtons)
diff --git a/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs b/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs
index d05de07645..1d4a40a80b 100644
--- a/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs
+++ b/BizHawk.Client.EmuHawk/tools/Macros/MovieZone.cs
@@ -20,8 +20,7 @@ namespace BizHawk.Client.EmuHawk
{
_emulator = emulator;
_tools = tools;
- var lg = movie.LogGeneratorInstance();
- lg.SetSource(Global.MovieSession.MovieController);
+ var lg = movie.LogGeneratorInstance(Global.MovieSession.MovieController);
_targetController = new Bk2Controller(_emulator.ControllerDefinition);
_targetController.SetFrom(_targetController); // Reference and create all buttons
@@ -55,8 +54,7 @@ namespace BizHawk.Client.EmuHawk
}
_controller = new Bk2Controller(d);
- var logGenerator = new Bk2LogEntryGenerator("");
- logGenerator.SetSource(_controller);
+ var logGenerator = Global.MovieSession.LogGeneratorInstance(_controller);
logGenerator.GenerateLogEntry(); // Reference and create all buttons.
string movieKey = logGenerator.GenerateLogKey().Replace("LogKey:", "").Replace("#", "");
@@ -109,14 +107,11 @@ namespace BizHawk.Client.EmuHawk
}
var newController = new Bk2Controller(d);
- var logGenerator = new Bk2LogEntryGenerator("");
-
- logGenerator.SetSource(newController);
+ var logGenerator = Global.MovieSession.LogGeneratorInstance(newController);
logGenerator.GenerateLogEntry(); // Reference and create all buttons.
// Reset all buttons in targetController (it may still have buttons that aren't being set here set true)
- var tC = new Bk2LogEntryGenerator("");
- tC.SetSource(_targetController);
+ var tC = Global.MovieSession.LogGeneratorInstance(_targetController);
_targetController.SetFromMnemonic(tC.EmptyEntry);
for (int i = 0; i < Length; i++)
{
diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs
index 50c54b53a1..5273c7fc14 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs
@@ -450,8 +450,7 @@ namespace BizHawk.Client.EmuHawk
}
_tasClipboard.Add(new TasClipboardEntry(index, input));
- var lg = CurrentTasMovie.LogGeneratorInstance();
- lg.SetSource(input);
+ var lg = CurrentTasMovie.LogGeneratorInstance(input);
sb.AppendLine(lg.GenerateLogEntry());
}
@@ -568,8 +567,7 @@ namespace BizHawk.Client.EmuHawk
}
_tasClipboard.Add(new TasClipboardEntry(index, input));
- var lg = CurrentTasMovie.LogGeneratorInstance();
- lg.SetSource(input);
+ var lg = CurrentTasMovie.LogGeneratorInstance(input);
sb.AppendLine(lg.GenerateLogEntry());
}
diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
index 9bf9295f4d..62ad1ba3e9 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
@@ -580,12 +580,10 @@ namespace BizHawk.Client.EmuHawk
{
get
{
- var lg = CurrentTasMovie.LogGeneratorInstance();
- lg.SetSource(Global.MovieSession.MovieControllerInstance());
+ var lg = CurrentTasMovie.LogGeneratorInstance(Global.MovieSession.MovieController);
var empty = lg.EmptyEntry;
foreach (var row in TasView.SelectedRows)
{
-
if (CurrentTasMovie[row].LogEntry != empty)
{
return row;
@@ -599,7 +597,9 @@ namespace BizHawk.Client.EmuHawk
private void AddColumn(RollColumn column)
{
if (TasView.AllColumns[column.Name] == null)
+ {
TasView.AllColumns.Add(column);
+ }
}
private void EngageTastudio()
diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudioClipboard.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudioClipboard.cs
index be6181e49d..84ca02c4b3 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudioClipboard.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudioClipboard.cs
@@ -19,7 +19,7 @@ namespace BizHawk.Client.EmuHawk
public override string ToString()
{
- var lg = Global.MovieSession.Movie.LogGeneratorInstance();
+ var lg = Global.MovieSession.Movie.LogGeneratorInstance(ControllerState);
return lg.GenerateLogEntry();
}
@@ -27,7 +27,7 @@ namespace BizHawk.Client.EmuHawk
{
try
{
- var lg = Global.MovieSession.MovieControllerInstance();
+ var lg = Global.MovieSession.GenerateMovieController(Global.Emulator.ControllerDefinition);
lg.SetFromMnemonic(inputLogEntry);
foreach (var button in lg.Definition.BoolButtons)