void PLAYBACK::ensurePlaybackIsInsideGreenzone(bool executeLua) { // set the Playback cursor to the frame or at least above the frame if (setPlaybackAboveOrToFrame(greenzone.getSize() - 1)) { // since the game state was changed by this jump, we must update possible Lua callbacks and other tools that would normally only update in FCEUI_Emulate if (executeLua) ForceExecuteLuaFrameFunctions(); Update_RAM_Search(); // Update_RAM_Watch() is also called. } // follow the Playback cursor, but in case of seeking don't follow it pianoRoll.followPlaybackCursorIfNeeded(false); }
void systemUpdateListeners() { if (vbaShuttingDown) return; Update_RAM_Search(); // updates RAM search and RAM watch // update viewers etc. if (theApp.updateCount) { POSITION pos = theApp.updateList.GetHeadPosition(); while (pos) { IUpdateListener *up = theApp.updateList.GetNext(pos); if (up) up->update(); } } }
// an interface for sending Playback cursor to any frame void PLAYBACK::jump(int frame, bool forceStateReload, bool executeLua, bool followPauseframe) { if (frame < 0) return; int lastCursor = currFrameCounter; // 1 - set the Playback cursor to the frame or at least above the frame if (setPlaybackAboveOrToFrame(frame, forceStateReload)) { // since the game state was changed by this jump, we must update possible Lua callbacks and other tools that would normally only update in FCEUI_Emulate if (executeLua) ForceExecuteLuaFrameFunctions(); Update_RAM_Search(); // Update_RAM_Watch() is also called. } // 2 - seek from the current frame if we still aren't at the needed frame if (frame > currFrameCounter) { startSeekingToFrame(frame); } else { // the Playback is already at the needed frame if (pauseFrame) // if Playback was seeking, pause emulation right here stopSeeking(); } // follow the Playback cursor, and optionally follow pauseframe (if seeking was launched) pianoRoll.followPlaybackCursorIfNeeded(followPauseframe); // redraw respective Piano Roll lines if needed if (lastCursor != currFrameCounter) { // redraw row where Playback cursor was (in case there's two or more drags before playback.update()) pianoRoll.redrawRow(lastCursor); bookmarks.redrawChangedBookmarks(lastCursor); } }
void UpdateToolWindows() { Update_RAM_Search(); //Update_RAM_Watch() is also called; hotkey.cpp - HK_StateLoadSlot & State_Load also call these functions RefreshAllToolWindows(); }