Set inputdisplay correctly on LoadState (#3747)

* Set inputdisplay correctly on LoadState

* Add explanatory comment for future generations
This commit is contained in:
Moritz Bender 2023-08-19 14:22:55 -07:00 committed by GitHub
parent ebf1950873
commit c57657bbd4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 3 deletions

View File

@ -154,7 +154,9 @@ namespace BizHawk.Client.Common
}
else if (Movie.IsPlayingOrFinished())
{
LatchInputToLog();
// set the controller state to the previous frame for input display purposes
int previousFrame = Movie.Emulator.Frame - 1;
Movie.Session.MovieController.SetFrom(Movie.GetInputState(previousFrame));
}
else if (Movie.IsFinished())
{

View File

@ -92,10 +92,10 @@ namespace BizHawk.Client.Common
public IMovieController GetInputState(int frame)
{
if (frame < FrameCount && frame >= 0)
if (frame < FrameCount && frame >= -1)
{
_adapter ??= new Bk2Controller(LogKey, Session.MovieController.Definition);
_adapter.SetFromMnemonic(Log[frame]);
_adapter.SetFromMnemonic(frame >= 0 ? Log[frame] : Session.Movie.LogGeneratorInstance(Session.MovieController).EmptyEntry);
return _adapter;
}

View File

@ -219,6 +219,10 @@ namespace BizHawk.Client.EmuHawk
Movie.LoadBranch(branch);
Tastudio.LoadState(new(branch.Frame, new MemoryStream(branch.CoreData, false)));
// set the controller state to the previous frame for input display purposes
int previousFrame = Movie.Emulator.Frame - 1;
Tastudio.MovieSession.MovieController.SetFrom(Movie.GetInputState(previousFrame));
Movie.TasStateManager.Capture(Tastudio.Emulator.Frame, Tastudio.Emulator.AsStatable());
QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider);