use ratio from float

This commit is contained in:
2026-02-25 09:01:32 -08:00
parent e4433cf06c
commit 43cc9b6416
2 changed files with 12 additions and 22 deletions

View File

@@ -141,9 +141,9 @@ impl PlaybackHead{
self.head.set_paused(time,paused);
}
#[wasm_bindgen]
pub fn set_scale(&mut self,time:f64,scale_num:i64,scale_den:u64){
pub fn set_scale(&mut self,time:f64,scale:f64){
let time=time::from_float(time).unwrap();
self.head.set_scale(time,strafesnet_common::integer::Ratio64::new(scale_num,scale_den).unwrap());
self.head.set_scale(time,scale.try_into().unwrap());
}
#[wasm_bindgen]
pub fn seek_to(&mut self,time:f64,new_time:f64){

View File

@@ -44,20 +44,11 @@ function elapsed() {
const control_speed = document.getElementById("control_speed");
var paused = false;
var speed = 0;
function set_speed(new_speed) {
speed = new_speed;
var speed_num = null;
var speed_den = null;
if (new_speed < 0) {
speed_num = BigInt(4) ** BigInt(-new_speed);
speed_den = BigInt(5) ** BigInt(-new_speed);
} else {
speed_num = BigInt(5) ** BigInt(new_speed);
speed_den = BigInt(4) ** BigInt(new_speed);
}
playback.set_scale(elapsed(), speed_num, speed_den);
control_speed.value = `${((5 / 4) ** new_speed).toPrecision(3)}x`;
var scale = 1;
function set_scale(new_scale) {
scale = new_scale;
playback.set_scale(elapsed(), scale);
control_speed.value = `${scale.toPrecision(3)}x`;
}
// Controls
@@ -75,25 +66,24 @@ document.getElementById("control_backward").addEventListener("click", (e) => {
playback.seek_backward(2.0);
});
document.getElementById("control_slower").addEventListener("click", (e) => {
set_speed(Math.max(speed - 1, -27));
set_scale((scale * 4) / 5);
});
const regex = new RegExp("^([^x]*)x?$");
control_speed.addEventListener("change", (e) => {
const parsed = regex.exec(e.target.value);
if (!parsed) {
set_speed(0);
set_scale(1);
return;
}
const input = Number(parsed.at(1));
if (Number.isNaN(input)) {
set_speed(0);
set_scale(1);
return;
}
const rounded = Math.round(Math.log(input) / Math.log(5 / 4));
set_speed(Math.max(-27, Math.min(27, rounded)));
set_scale(input);
});
document.getElementById("control_faster").addEventListener("click", (e) => {
set_speed(Math.min(speed + 1, 27));
set_scale((scale * 5) / 4);
});
// Rendering