fix seek when paused
This commit is contained in:
@@ -41,6 +41,9 @@ impl PlaybackHead{
|
|||||||
pub fn time(&self,time:SessionTime)->Time{
|
pub fn time(&self,time:SessionTime)->Time{
|
||||||
self.timer.time(time)
|
self.timer.time(time)
|
||||||
}
|
}
|
||||||
|
pub fn timer(&self)->&Timer<Scaled<SessionTimeInner,TimeInner>>{
|
||||||
|
&self.timer
|
||||||
|
}
|
||||||
pub fn set_paused(&mut self,time:SessionTime,paused:bool){
|
pub fn set_paused(&mut self,time:SessionTime,paused:bool){
|
||||||
_=self.timer.set_paused(time,paused);
|
_=self.timer.set_paused(time,paused);
|
||||||
}
|
}
|
||||||
@@ -60,6 +63,9 @@ impl PlaybackHead{
|
|||||||
self.state=PlaybackState::new();
|
self.state=PlaybackState::new();
|
||||||
self.state.process_head(bot.timelines(),&self.head);
|
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){
|
pub fn set_scale(&mut self,time:SessionTime,new_scale:strafesnet_common::integer::Ratio64){
|
||||||
self.timer.set_scale(time,new_scale);
|
self.timer.set_scale(time,new_scale);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use strafesnet_common::instruction::TimedInstruction;
|
use strafesnet_common::instruction::TimedInstruction;
|
||||||
use strafesnet_common::session::Time as SessionTime;
|
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}};
|
use strafesnet_roblox_bot_player::{bot::CompleteBot,graphics::Graphics,head::{PlaybackHead,Time as PlaybackTime}};
|
||||||
|
|
||||||
pub enum SessionControlInstruction{
|
pub enum SessionControlInstruction{
|
||||||
@@ -57,11 +58,11 @@ impl<'a> PlayerWorker<'a>{
|
|||||||
self.playback_head.set_time(bot,ins.time,PlaybackTime::ZERO);
|
self.playback_head.set_time(bot,ins.time,PlaybackTime::ZERO);
|
||||||
},
|
},
|
||||||
Instruction::SessionControl(SessionControlInstruction::SkipForward)=>if let Some(bot)=&self.bot{
|
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);
|
self.playback_head.set_time(bot,ins.time,head_time);
|
||||||
},
|
},
|
||||||
Instruction::SessionControl(SessionControlInstruction::SkipBack)=>if let Some(bot)=&self.bot{
|
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);
|
self.playback_head.set_time(bot,ins.time,head_time);
|
||||||
},
|
},
|
||||||
Instruction::SessionControl(SessionControlInstruction::DecreaseTimescale)=>{
|
Instruction::SessionControl(SessionControlInstruction::DecreaseTimescale)=>{
|
||||||
|
|||||||
@@ -122,6 +122,11 @@ impl PlaybackHead{
|
|||||||
self.head.set_paused(time,paused);
|
self.head.set_paused(time,paused);
|
||||||
}
|
}
|
||||||
#[wasm_bindgen]
|
#[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){
|
pub fn set_scale(&mut self,time:f64,scale:f64){
|
||||||
let time=time::from_float(time).unwrap();
|
let time=time::from_float(time).unwrap();
|
||||||
self.head.set_scale(time,scale.try_into().unwrap());
|
self.head.set_scale(time,scale.try_into().unwrap());
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ function set_scale(new_scale) {
|
|||||||
control_speed.value = `${scale.toPrecision(3)}x`;
|
control_speed.value = `${scale.toPrecision(3)}x`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SEEK_DURATION = 1.0;
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
document.getElementById("control_reset").addEventListener("click", (e) => {
|
document.getElementById("control_reset").addEventListener("click", (e) => {
|
||||||
playback.set_head_time(bot, elapsed(), 0.0);
|
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) => {
|
document.getElementById("control_forward").addEventListener("click", (e) => {
|
||||||
const time_now = elapsed();
|
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);
|
playback.set_head_time(bot, time_now, playback_time);
|
||||||
});
|
});
|
||||||
document.getElementById("control_backward").addEventListener("click", (e) => {
|
document.getElementById("control_backward").addEventListener("click", (e) => {
|
||||||
const time_now = elapsed();
|
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);
|
playback.set_head_time(bot, time_now, playback_time);
|
||||||
});
|
});
|
||||||
document.getElementById("control_slower").addEventListener("click", (e) => {
|
document.getElementById("control_slower").addEventListener("click", (e) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user