Pass MovieSession to APIs via ctor
This commit is contained in:
parent
c203edba17
commit
3de87af5de
|
@ -24,7 +24,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private static readonly Type[] _ctorParamTypesB = { typeof(Action<string>), typeof(IMainFormForApi) };
|
||||
|
||||
private static readonly Type[] _ctorParamTypesC = { typeof(Action<string>), typeof(IMainFormForApi), typeof(DisplayManager), typeof(InputManager), typeof(Config), typeof(IEmulator), typeof(IGameInfo) };
|
||||
private static readonly Type[] _ctorParamTypesC = { typeof(Action<string>), typeof(IMovieSession) };
|
||||
|
||||
private static readonly Type[] _ctorParamTypesD = { typeof(Action<string>), typeof(IMainFormForApi), typeof(DisplayManager), typeof(InputManager), typeof(Config), typeof(IEmulator), typeof(IGameInfo) };
|
||||
|
||||
private static readonly Type[] _ctorParamTypesTools = { typeof(ToolManager) };
|
||||
|
||||
|
@ -39,6 +41,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
IMainFormForApi mainForm,
|
||||
DisplayManager displayManager,
|
||||
InputManager inputManager,
|
||||
IMovieSession movieSession,
|
||||
ToolManager toolManager,
|
||||
Config config,
|
||||
IEmulator emulator,
|
||||
|
@ -48,7 +51,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
.ToDictionary(
|
||||
t => _apiTypes[t],
|
||||
t => (IExternalApi) (
|
||||
t.GetConstructor(_ctorParamTypesC)?.Invoke(new object[] { logCallback, mainForm, displayManager, inputManager, config, emulator, game })
|
||||
t.GetConstructor(_ctorParamTypesD)?.Invoke(new object[] { logCallback, mainForm, displayManager, inputManager, config, emulator, game })
|
||||
?? t.GetConstructor(_ctorParamTypesC)?.Invoke(new object[] { logCallback, movieSession })
|
||||
?? t.GetConstructor(_ctorParamTypesB)?.Invoke(new object[] { logCallback, mainForm })
|
||||
?? t.GetConstructor(_ctorParamTypesA)?.Invoke(new object[] { logCallback })
|
||||
?? t.GetConstructor(_ctorParamTypesTools)?.Invoke(new object[] { toolManager })
|
||||
|
@ -64,12 +68,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
IMainFormForApi mainForm,
|
||||
DisplayManager displayManager,
|
||||
InputManager inputManager,
|
||||
IMovieSession movieSession,
|
||||
ToolManager toolManager,
|
||||
Config config,
|
||||
IEmulator emulator,
|
||||
IGameInfo game)
|
||||
{
|
||||
_container = Register(serviceProvider, Console.WriteLine, mainForm, displayManager, inputManager, toolManager, config, emulator, game);
|
||||
_container = Register(serviceProvider, Console.WriteLine, mainForm, displayManager, inputManager, movieSession, toolManager, config, emulator, game);
|
||||
ClientApi.EmuClient = _container.EmuClient;
|
||||
return new BasicApiProvider(_container);
|
||||
}
|
||||
|
@ -80,10 +85,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
IMainFormForApi mainForm,
|
||||
DisplayManager displayManager,
|
||||
InputManager inputManager,
|
||||
IMovieSession movieSession,
|
||||
ToolManager toolManager,
|
||||
Config config,
|
||||
IEmulator emulator,
|
||||
IGameInfo game
|
||||
) => _luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, toolManager, config, emulator, game);
|
||||
) => _luaContainer = Register(serviceProvider, logCallback, mainForm, displayManager, inputManager, movieSession, toolManager, config, emulator, game);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,9 +7,15 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public sealed class JoypadApi : IJoypadApi
|
||||
{
|
||||
private readonly IMovieSession _movieSession;
|
||||
|
||||
private readonly Action<string> LogCallback;
|
||||
|
||||
public JoypadApi(Action<string> logCallback) => LogCallback = logCallback;
|
||||
public JoypadApi(Action<string> logCallback, IMovieSession movieSession)
|
||||
{
|
||||
LogCallback = logCallback;
|
||||
_movieSession = movieSession;
|
||||
}
|
||||
|
||||
public IDictionary<string, object> Get(int? controller = null)
|
||||
{
|
||||
|
@ -23,7 +29,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public void SetFromMnemonicStr(string inputLogEntry)
|
||||
{
|
||||
var controller = GlobalWin.MovieSession.GenerateMovieController();
|
||||
var controller = _movieSession.GenerateMovieController();
|
||||
try
|
||||
{
|
||||
controller.SetFromMnemonic(inputLogEntry);
|
||||
|
|
|
@ -9,22 +9,28 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public sealed class MovieApi : IMovieApi
|
||||
{
|
||||
private readonly IMovieSession _movieSession;
|
||||
|
||||
private readonly Action<string> LogCallback;
|
||||
|
||||
public MovieApi(Action<string> logCallback) => LogCallback = logCallback;
|
||||
public MovieApi(Action<string> logCallback, IMovieSession movieSession)
|
||||
{
|
||||
LogCallback = logCallback;
|
||||
_movieSession = movieSession;
|
||||
}
|
||||
|
||||
public bool StartsFromSavestate() => GlobalWin.MovieSession.Movie.IsActive() && GlobalWin.MovieSession.Movie.StartsFromSavestate;
|
||||
public bool StartsFromSavestate() => _movieSession.Movie.IsActive() && _movieSession.Movie.StartsFromSavestate;
|
||||
|
||||
public bool StartsFromSaveram() => GlobalWin.MovieSession.Movie.IsActive() && GlobalWin.MovieSession.Movie.StartsFromSaveRam;
|
||||
public bool StartsFromSaveram() => _movieSession.Movie.IsActive() && _movieSession.Movie.StartsFromSaveRam;
|
||||
|
||||
public IDictionary<string, object> GetInput(int frame, int? controller = null)
|
||||
{
|
||||
if (GlobalWin.MovieSession.Movie.NotActive())
|
||||
if (_movieSession.Movie.NotActive())
|
||||
{
|
||||
LogCallback("No movie loaded");
|
||||
return null;
|
||||
}
|
||||
var adapter = GlobalWin.MovieSession.Movie.GetInputState(frame);
|
||||
var adapter = _movieSession.Movie.GetInputState(frame);
|
||||
if (adapter == null)
|
||||
{
|
||||
LogCallback("Can't get input of the last frame of the movie. Use the previous frame");
|
||||
|
@ -36,79 +42,79 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public string GetInputAsMnemonic(int frame)
|
||||
{
|
||||
if (GlobalWin.MovieSession.Movie.NotActive() || frame >= GlobalWin.MovieSession.Movie.InputLogLength)
|
||||
if (_movieSession.Movie.NotActive() || frame >= _movieSession.Movie.InputLogLength)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
var lg = GlobalWin.MovieSession.Movie.LogGeneratorInstance(
|
||||
GlobalWin.MovieSession.Movie.GetInputState(frame));
|
||||
var lg = _movieSession.Movie.LogGeneratorInstance(
|
||||
_movieSession.Movie.GetInputState(frame));
|
||||
return lg.GenerateLogEntry();
|
||||
}
|
||||
|
||||
public void Save(string filename = null)
|
||||
{
|
||||
if (GlobalWin.MovieSession.Movie.NotActive())
|
||||
if (_movieSession.Movie.NotActive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(filename))
|
||||
{
|
||||
filename += $".{GlobalWin.MovieSession.Movie.PreferredExtension}";
|
||||
filename += $".{_movieSession.Movie.PreferredExtension}";
|
||||
if (new FileInfo(filename).Exists)
|
||||
{
|
||||
LogCallback($"File {filename} already exists, will not overwrite");
|
||||
return;
|
||||
}
|
||||
GlobalWin.MovieSession.Movie.Filename = filename;
|
||||
_movieSession.Movie.Filename = filename;
|
||||
}
|
||||
GlobalWin.MovieSession.Movie.Save();
|
||||
_movieSession.Movie.Save();
|
||||
}
|
||||
|
||||
public Dictionary<string, string> GetHeader()
|
||||
{
|
||||
var table = new Dictionary<string, string>();
|
||||
if (GlobalWin.MovieSession.Movie.NotActive())
|
||||
if (_movieSession.Movie.NotActive())
|
||||
{
|
||||
return table;
|
||||
}
|
||||
foreach (var kvp in GlobalWin.MovieSession.Movie.HeaderEntries) table[kvp.Key] = kvp.Value;
|
||||
foreach (var kvp in _movieSession.Movie.HeaderEntries) table[kvp.Key] = kvp.Value;
|
||||
return table;
|
||||
}
|
||||
|
||||
public List<string> GetComments() => GlobalWin.MovieSession.Movie.Comments.ToList();
|
||||
public List<string> GetComments() => _movieSession.Movie.Comments.ToList();
|
||||
|
||||
public List<string> GetSubtitles() =>
|
||||
GlobalWin.MovieSession.Movie.Subtitles
|
||||
_movieSession.Movie.Subtitles
|
||||
.Select(s => s.ToString())
|
||||
.ToList();
|
||||
|
||||
public string Filename() => GlobalWin.MovieSession.Movie.Filename;
|
||||
public string Filename() => _movieSession.Movie.Filename;
|
||||
|
||||
public bool GetReadOnly() => GlobalWin.MovieSession.ReadOnly;
|
||||
public bool GetReadOnly() => _movieSession.ReadOnly;
|
||||
|
||||
public ulong GetRerecordCount() => GlobalWin.MovieSession.Movie.Rerecords;
|
||||
public ulong GetRerecordCount() => _movieSession.Movie.Rerecords;
|
||||
|
||||
public bool GetRerecordCounting() => GlobalWin.MovieSession.Movie.IsCountingRerecords;
|
||||
public bool GetRerecordCounting() => _movieSession.Movie.IsCountingRerecords;
|
||||
|
||||
public bool IsLoaded() => GlobalWin.MovieSession.Movie.IsActive();
|
||||
public bool IsLoaded() => _movieSession.Movie.IsActive();
|
||||
|
||||
public int Length() => GlobalWin.MovieSession.Movie.FrameCount;
|
||||
public int Length() => _movieSession.Movie.FrameCount;
|
||||
|
||||
public string Mode() => (GlobalWin.MovieSession.Movie?.Mode ?? MovieMode.Inactive).ToString().ToUpper();
|
||||
public string Mode() => (_movieSession.Movie?.Mode ?? MovieMode.Inactive).ToString().ToUpper();
|
||||
|
||||
public void SetReadOnly(bool readOnly) => GlobalWin.MovieSession.ReadOnly = readOnly;
|
||||
public void SetReadOnly(bool readOnly) => _movieSession.ReadOnly = readOnly;
|
||||
|
||||
public void SetRerecordCount(ulong count) => GlobalWin.MovieSession.Movie.Rerecords = count;
|
||||
public void SetRerecordCount(ulong count) => _movieSession.Movie.Rerecords = count;
|
||||
|
||||
public void SetRerecordCounting(bool counting) => GlobalWin.MovieSession.Movie.IsCountingRerecords = counting;
|
||||
public void SetRerecordCounting(bool counting) => _movieSession.Movie.IsCountingRerecords = counting;
|
||||
|
||||
public void Stop() => GlobalWin.MovieSession.StopMovie();
|
||||
public void Stop() => _movieSession.StopMovie();
|
||||
|
||||
public double GetFps()
|
||||
{
|
||||
var movie = GlobalWin.MovieSession.Movie;
|
||||
var movie = _movieSession.Movie;
|
||||
// Why does it need the movie to be active to know the frame rate?
|
||||
if (movie.NotActive())
|
||||
{
|
||||
|
|
|
@ -5,6 +5,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public sealed class UserDataApi : IUserDataApi
|
||||
{
|
||||
private readonly IMovieSession _movieSession;
|
||||
|
||||
public UserDataApi(Action<string> logCallback, IMovieSession movieSession)
|
||||
{
|
||||
_movieSession = movieSession;
|
||||
}
|
||||
|
||||
/// <exception cref="InvalidOperationException">type of <paramref name="value"/> cannot be used in userdata</exception>
|
||||
public void Set(string name, object value)
|
||||
{
|
||||
|
@ -13,15 +20,15 @@ namespace BizHawk.Client.EmuHawk
|
|||
var t = value.GetType();
|
||||
if (!t.IsPrimitive && t != typeof(string)) throw new InvalidOperationException("Invalid type for userdata");
|
||||
}
|
||||
GlobalWin.MovieSession.UserBag[name] = value;
|
||||
_movieSession.UserBag[name] = value;
|
||||
}
|
||||
|
||||
public object Get(string key) => GlobalWin.MovieSession.UserBag.TryGetValue(key, out var value) ? value : null;
|
||||
public object Get(string key) => _movieSession.UserBag.TryGetValue(key, out var value) ? value : null;
|
||||
|
||||
public void Clear() => GlobalWin.MovieSession.UserBag.Clear();
|
||||
public void Clear() => _movieSession.UserBag.Clear();
|
||||
|
||||
public bool Remove(string key) => GlobalWin.MovieSession.UserBag.Remove(key);
|
||||
public bool Remove(string key) => _movieSession.UserBag.Remove(key);
|
||||
|
||||
public bool ContainsKey(string key) => GlobalWin.MovieSession.UserBag.ContainsKey(key);
|
||||
public bool ContainsKey(string key) => _movieSession.UserBag.ContainsKey(key);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
LuaWait = new AutoResetEvent(false);
|
||||
Docs.Clear();
|
||||
var apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, mainForm, displayManager, inputManager, mainForm.Tools, config, emulator, game);
|
||||
var apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, mainForm, displayManager, inputManager, mainForm.MovieSession, mainForm.Tools, config, emulator, game);
|
||||
|
||||
// Register lua libraries
|
||||
foreach (var lib in Client.Common.ReflectionCache.Types.Concat(EmuHawk.ReflectionCache.Types)
|
||||
|
|
|
@ -57,7 +57,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_emulator = emulator;
|
||||
_movieSession = movieSession;
|
||||
_game = game;
|
||||
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, _displayManager, _inputManager, this, _config, _emulator, _game);
|
||||
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, _displayManager, _inputManager, _movieSession, this, _config, _emulator, _game);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -509,7 +509,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
_emulator = emulator;
|
||||
_game = game;
|
||||
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, _displayManager, _inputManager, this, _config, _emulator, _game);
|
||||
ApiProvider = ApiManager.Restart(_emulator.ServiceProvider, _owner, _displayManager, _inputManager, _movieSession, this, _config, _emulator, _game);
|
||||
// If Cheat tool is loaded, restarting will restart the list too anyway
|
||||
if (!Has<Cheats>())
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue