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;

View File

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