-- Copyright (C) 2025 snoutie -- Authors: snoutie (copyright@achtarmig.org) -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as published -- by the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . local M = {} M.file = "" M.isPaused = false M.fps = 0.0 local function getFileStream() if not be then return end return be:getFileStream() end function M.togglePause() if not M.isPaused then core_replay.toggleRecording(true, false); simTimeAuthority.pause(false); M.file = core_replay.getLoadedFile() extensions.core_jobsystem.create( function(job) job.sleep(M.fps * 2.5); --This should give enough time to sample 1 frame simTimeAuthority.pause(true); core_replay.toggleRecording(true, false); local stream = getFileStream() if not stream then return end stream:setPaused(true); stream:stepFrames(1); end) M.isPaused = true else core_replay.stop(); simTimeAuthority.pause(false); FS:removeFile(M.file) M.isPaused = false end end function M.onUpdate(dt) M.fps = dt end return M