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()) 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()) else if (Movie.IsFinished())
{ {

View File

@ -92,10 +92,10 @@ namespace BizHawk.Client.Common
public IMovieController GetInputState(int frame) public IMovieController GetInputState(int frame)
{ {
if (frame < FrameCount && frame >= 0) if (frame < FrameCount && frame >= -1)
{ {
_adapter ??= new Bk2Controller(LogKey, Session.MovieController.Definition); _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; return _adapter;
} }

View File

@ -219,6 +219,10 @@ namespace BizHawk.Client.EmuHawk
Movie.LoadBranch(branch); Movie.LoadBranch(branch);
Tastudio.LoadState(new(branch.Frame, new MemoryStream(branch.CoreData, false))); 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()); Movie.TasStateManager.Capture(Tastudio.Emulator.Frame, Tastudio.Emulator.AsStatable());
QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider); QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), Tastudio.VideoProvider);