From 59494767f5cddf0de9f25e2ab328f3f61360c5d9 Mon Sep 17 00:00:00 2001 From: adelikat Date: Sun, 26 Oct 2014 23:26:43 +0000 Subject: [PATCH] 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 --- .../movie/tasproj/TasStateManager.cs | 8 ++++---- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs | 12 ++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 872d972e41..956436f6af 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -240,13 +240,13 @@ namespace BizHawk.Client.Common } } - public byte[] GetStateClosestToFrame(int frame) + public KeyValuePair 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(0, _movie.BinarySavestate); } return s; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 5f82b54a2f..40a60b6bb1 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -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 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;