Tastudio - refactor TasStateManager GetStateClosestToFrame() to return a KeyValuePair (frame number and savestate data) so the calling code has a clue which savestate was returned, reset counters if a savestate-anchored movie's "anchor" was loaded

This commit is contained in:
adelikat 2014-10-26 23:26:43 +00:00
parent fa9971022b
commit 59494767f5
2 changed files with 12 additions and 8 deletions

View File

@ -240,13 +240,13 @@ namespace BizHawk.Client.Common
} }
} }
public byte[] GetStateClosestToFrame(int frame) public KeyValuePair<int, byte[]> GetStateClosestToFrame(int frame)
{ {
var s = States.LastOrDefault(state => state.Key < frame).Value; var s = States.LastOrDefault(state => state.Key < frame);
if (s == null && _movie.StartsFromSavestate) if (s.Value == null && _movie.StartsFromSavestate)
{ {
return _movie.BinarySavestate; return new KeyValuePair<int, byte[]>(0, _movie.BinarySavestate);
} }
return s; return s;

View File

@ -300,11 +300,15 @@ namespace BizHawk.Client.EmuHawk
private void StartAtNearestFrameAndEmulate(int frame) private void StartAtNearestFrameAndEmulate(int frame)
{ {
CurrentTasMovie.SwitchToPlay(); CurrentTasMovie.SwitchToPlay();
var closestState = CurrentTasMovie.TasStateManager.GetStateClosestToFrame(frame); KeyValuePair<int, byte[]> closestState = CurrentTasMovie.TasStateManager.GetStateClosestToFrame(frame);
if (closestState != null) if (closestState.Value != null)
{ {
LoadState(closestState.ToArray()); LoadState(closestState.Value.ToArray());
if (closestState.Key == 0 && CurrentTasMovie.StartsFromSavestate)
{
Global.Emulator.ResetCounters();
}
} }
GlobalWin.MainForm.PauseOnFrame = frame; GlobalWin.MainForm.PauseOnFrame = frame;