From db21800d9f63221cab68e5b7c81fa0331dd789b1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 10 Jun 2026 12:54:39 +0200 Subject: [PATCH] move rewind check (#1051) * move rewind check * more --- src/device.rs | 1 - src/device/vi.rs | 8 -------- src/savestates.rs | 22 +++++++++++++--------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/device.rs b/src/device.rs index 4cc0947..c58b2e2 100644 --- a/src/device.rs +++ b/src/device.rs @@ -314,7 +314,6 @@ impl Device { savestate: savestates::Savestate { save_state: false, load_state: false, - save_rewind: false, load_rewind: false, last_rewind_saved: 0.0, rewind_pool: std::sync::Arc::new(std::sync::Mutex::new( diff --git a/src/device/vi.rs b/src/device/vi.rs index 0440f39..470498c 100644 --- a/src/device/vi.rs +++ b/src/device/vi.rs @@ -160,14 +160,6 @@ pub fn vertical_interrupt_event(device: &mut device::Device) { retroachievements::do_frame(); - if device.netplay.is_none() - && device.ui.config.emulation.rewind - && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 - { - device.savestate.save_rewind = true; - device.savestate.last_rewind_saved = device.vi.elapsed_time; - } - /* toggle vi field if in interlaced mode */ device.vi.field ^= (device.vi.regs[VI_STATUS_REG] >> 6) & 0x1; diff --git a/src/savestates.rs b/src/savestates.rs index 633b58f..5fca84a 100644 --- a/src/savestates.rs +++ b/src/savestates.rs @@ -74,7 +74,6 @@ where pub struct Savestate { pub save_state: bool, pub load_state: bool, - pub save_rewind: bool, pub load_rewind: bool, pub last_rewind_saved: f64, #[serde(skip)] @@ -96,18 +95,23 @@ static SAVES_CLONE: std::sync::LazyLock> = std::sync::LazyLock::new(|| std::sync::Mutex::new(ui::storage::Saves::default())); pub fn process_savestates(device: &mut device::Device) { - if device.savestate.save_state || device.savestate.save_rewind { - let rewind = device.savestate.save_rewind && !device.savestate.save_state; - if rewind { - device.savestate.save_rewind = false; - } + let save_rewind = if device.netplay.is_none() + && device.ui.config.emulation.rewind + && device.vi.elapsed_time - device.savestate.last_rewind_saved > 1.0 + { + device.savestate.last_rewind_saved = device.vi.elapsed_time; + true + } else { + false + }; + + if device.savestate.save_state || save_rewind { + create_savestate(device, !device.savestate.save_state, None); device.savestate.save_state = false; - create_savestate(device, rewind, None); } else if device.savestate.load_state || device.savestate.load_rewind { + load_savestate(device, device.savestate.load_rewind, None); device.savestate.load_state = false; - let rewind = device.savestate.load_rewind; device.savestate.load_rewind = false; - load_savestate(device, rewind, None); } }