From a4c4f20bad7b52261c1df5cece50478e565996fd Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Fri, 27 Feb 2026 08:10:16 -0800 Subject: [PATCH] fix seek when paused --- lib/src/head.rs | 6 ++++++ native-player/src/player.rs | 5 +++-- wasm-module/src/lib.rs | 5 +++++ web-demo/player.js | 6 ++++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/src/head.rs b/lib/src/head.rs index 2a61b0f..2a99ff1 100644 --- a/lib/src/head.rs +++ b/lib/src/head.rs @@ -41,6 +41,9 @@ impl PlaybackHead{ pub fn time(&self,time:SessionTime)->Time{ self.timer.time(time) } + pub fn timer(&self)->&Timer>{ + &self.timer + } pub fn set_paused(&mut self,time:SessionTime,paused:bool){ _=self.timer.set_paused(time,paused); } @@ -60,6 +63,9 @@ impl PlaybackHead{ self.state=PlaybackState::new(); self.state.process_head(bot.timelines(),&self.head); } + pub fn get_scale(&self)->strafesnet_common::integer::Ratio64{ + self.timer.get_scale() + } pub fn set_scale(&mut self,time:SessionTime,new_scale:strafesnet_common::integer::Ratio64){ self.timer.set_scale(time,new_scale); } diff --git a/native-player/src/player.rs b/native-player/src/player.rs index 088883d..89d373c 100644 --- a/native-player/src/player.rs +++ b/native-player/src/player.rs @@ -1,5 +1,6 @@ use strafesnet_common::instruction::TimedInstruction; use strafesnet_common::session::Time as SessionTime; +use strafesnet_common::timer::TimerState; use strafesnet_roblox_bot_player::{bot::CompleteBot,graphics::Graphics,head::{PlaybackHead,Time as PlaybackTime}}; pub enum SessionControlInstruction{ @@ -57,11 +58,11 @@ impl<'a> PlayerWorker<'a>{ self.playback_head.set_time(bot,ins.time,PlaybackTime::ZERO); }, Instruction::SessionControl(SessionControlInstruction::SkipForward)=>if let Some(bot)=&self.bot{ - let head_time=self.playback_head.time(ins.time+SessionTime::from_secs(2)); + let head_time=self.playback_head.timer().clone().into_state().0.get_time(ins.time+SessionTime::from_secs(2)); self.playback_head.set_time(bot,ins.time,head_time); }, Instruction::SessionControl(SessionControlInstruction::SkipBack)=>if let Some(bot)=&self.bot{ - let head_time=self.playback_head.time(ins.time-SessionTime::from_secs(2)); + let head_time=self.playback_head.timer().clone().into_state().0.get_time(ins.time-SessionTime::from_secs(2)); self.playback_head.set_time(bot,ins.time,head_time); }, Instruction::SessionControl(SessionControlInstruction::DecreaseTimescale)=>{ diff --git a/wasm-module/src/lib.rs b/wasm-module/src/lib.rs index 57cc981..138698b 100644 --- a/wasm-module/src/lib.rs +++ b/wasm-module/src/lib.rs @@ -122,6 +122,11 @@ impl PlaybackHead{ self.head.set_paused(time,paused); } #[wasm_bindgen] + pub fn get_scale(&mut self)->f64{ + let scale=self.head.get_scale(); + scale.num() as f64/scale.den() as f64 + } + #[wasm_bindgen] pub fn set_scale(&mut self,time:f64,scale:f64){ let time=time::from_float(time).unwrap(); self.head.set_scale(time,scale.try_into().unwrap()); diff --git a/web-demo/player.js b/web-demo/player.js index 6c2581c..f18a0b1 100644 --- a/web-demo/player.js +++ b/web-demo/player.js @@ -54,6 +54,8 @@ function set_scale(new_scale) { control_speed.value = `${scale.toPrecision(3)}x`; } +const SEEK_DURATION = 1.0; + // Controls document.getElementById("control_reset").addEventListener("click", (e) => { playback.set_head_time(bot, elapsed(), 0.0); @@ -64,12 +66,12 @@ document.getElementById("control_pause").addEventListener("click", (e) => { }); document.getElementById("control_forward").addEventListener("click", (e) => { const time_now = elapsed(); - const playback_time = playback.get_head_time(time_now + 2.0); + const playback_time = playback.get_head_time(time_now) + playback.get_scale() * SEEK_DURATION; playback.set_head_time(bot, time_now, playback_time); }); document.getElementById("control_backward").addEventListener("click", (e) => { const time_now = elapsed(); - const playback_time = playback.get_head_time(time_now - 2.0); + const playback_time = playback.get_head_time(time_now) + playback.get_scale() * SEEK_DURATION; playback.set_head_time(bot, time_now, playback_time); }); document.getElementById("control_slower").addEventListener("click", (e) => {