public void GoToFrame(int frame, bool fromLua = false, bool fromRewinding = false) { // If seeking to a frame before or at the end of the movie, use StartAtNearestFrameAndEmulate // Otherwise, load the latest state (if not already there) and seek while recording. WasRecording = CurrentTasMovie.IsRecording() || WasRecording; if (frame <= CurrentTasMovie.InputLogLength) { // Get as close as we can then emulate there StartAtNearestFrameAndEmulate(frame, fromLua, fromRewinding); MaybeFollowCursor(); } else // Emulate to a future frame { if (frame == Emulator.Frame + 1) // We are at the end of the movie and advancing one frame, therefore we are recording, simply emulate a frame { bool wasPaused = MainForm.EmulatorPaused; MainForm.FrameAdvance(); if (!wasPaused) { MainForm.UnpauseEmulator(); } } else { TastudioPlayMode(); // Simply getting the last state doesn't work if that state is the frame. // display isn't saved in the state, need to emulate to frame var lastState = CurrentTasMovie.TasStateManager.GetStateClosestToFrame(frame); if (lastState.Key > Emulator.Frame) { LoadState(lastState); } StartSeeking(frame); } } RefreshDialog(); UpdateOtherTools(); }
public void GoToFrame(int frame, bool fromLua = false, bool fromRewinding = false, bool OnLeftMouseDown = false) { // If seeking to a frame before or at the end of the movie, use StartAtNearestFrameAndEmulate // Otherwise, load the latest state (if not already there) and seek while recording. WasRecording = CurrentTasMovie.IsRecording() || WasRecording; if (frame <= CurrentTasMovie.InputLogLength) { // Get as close as we can then emulate there StartAtNearestFrameAndEmulate(frame, fromLua, fromRewinding); if (!OnLeftMouseDown) { MaybeFollowCursor(); } } else // Emulate to a future frame { if (frame == Emulator.Frame + 1) // We are at the end of the movie and advancing one frame, therefore we are recording, simply emulate a frame { bool wasPaused = MainForm.EmulatorPaused; MainForm.FrameAdvance(); if (!wasPaused) { MainForm.UnpauseEmulator(); } } else { TastudioPlayMode(); var lastState = GetPriorStateForFramebuffer(frame); if (lastState.Key > Emulator.Frame) { LoadState(lastState); } StartSeeking(frame); } } }