This commit is contained in:
Robin Appelman 2022-04-03 17:23:13 +02:00
commit 50afa29952

View file

@ -141,6 +141,8 @@ pub struct DemoCamera {
playback_start_time: f64, playback_start_time: f64,
ui_tick: u32, ui_tick: u32,
last_ui_tick: u32, last_ui_tick: u32,
speed: f64,
last_speed: f64,
force_update: bool, force_update: bool,
} }
@ -202,16 +204,16 @@ impl Control for DemoCamera {
fn ui(&mut self, ui: &mut Ui) { fn ui(&mut self, ui: &mut Ui) {
ui.label("Playback"); ui.label("Playback");
self.last_ui_tick = self.ui_tick; self.last_ui_tick = self.ui_tick;
self.last_speed = self.speed;
let range = self.tick_range(); let range = self.tick_range();
ui.add(Slider::new(&mut self.ui_tick, range).text("tick")); ui.add(Slider::new(&mut self.ui_tick, range).text("tick"));
ui.add(Slider::new(&mut self.speed, 0.1..=10.0).text("speed"));
} }
fn post_ui(&mut self, time: f64) { fn post_ui(&mut self, time: f64) {
if self.ui_tick != self.last_ui_tick {
let tick = self.ui_tick.saturating_sub(self.demo.start_tick); let tick = self.ui_tick.saturating_sub(self.demo.start_tick);
self.start_tick = tick as f64; if self.ui_tick != self.last_ui_tick || self.speed != self.last_speed {
self.playback_start_time = time; self.set_tick(tick, time);
self.force_update = true;
} }
} }
} }
@ -224,6 +226,8 @@ impl DemoCamera {
start_tick: 0.0, start_tick: 0.0,
playback_start_time: 0.0, playback_start_time: 0.0,
ui_tick: 0, ui_tick: 0,
speed: 1.0,
last_speed: 1.0,
last_ui_tick: 0, last_ui_tick: 0,
force_update: true, force_update: true,
} }
@ -231,7 +235,7 @@ impl DemoCamera {
fn demo_tick(&self, time: f64) -> f64 { fn demo_tick(&self, time: f64) -> f64 {
let playback_time = (time - self.playback_start_time) / 1000.0; let playback_time = (time - self.playback_start_time) / 1000.0;
self.start_tick + playback_time / self.demo.time_per_tick self.start_tick + playback_time / self.demo.time_per_tick * self.speed
} }
fn apply_view(&self, camera: &mut Camera, position: Vec3, yaw: f32, pitch: f32) { fn apply_view(&self, camera: &mut Camera, position: Vec3, yaw: f32, pitch: f32) {
@ -246,6 +250,12 @@ impl DemoCamera {
fn tick_range(&self) -> RangeInclusive<u32> { fn tick_range(&self) -> RangeInclusive<u32> {
self.demo.start_tick..=self.demo.positions.len() as u32 + self.demo.start_tick self.demo.start_tick..=self.demo.positions.len() as u32 + self.demo.start_tick
} }
fn set_tick(&mut self, tick: u32, time: f64) {
self.start_tick = tick as f64;
self.playback_start_time = time;
self.force_update = true;
}
} }
fn apply_camera_action( fn apply_camera_action(