示例#1
0
        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();
        }
示例#2
0
        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);
                }
            }
        }