From 6dc2e9e04b7a34de37119574184b91e43cd9d149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Mary=C5=84czak?= Date: Tue, 6 Feb 2024 19:49:34 +0100 Subject: [PATCH] Cleanup update logic (#143) --- neothesia/src/scene/playing_scene/mod.rs | 56 ++++++++++---------- neothesia/src/scene/playing_scene/top_bar.rs | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/neothesia/src/scene/playing_scene/mod.rs b/neothesia/src/scene/playing_scene/mod.rs index b691ab17..6d932a88 100644 --- a/neothesia/src/scene/playing_scene/mod.rs +++ b/neothesia/src/scene/playing_scene/mod.rs @@ -29,13 +29,13 @@ mod top_bar; pub struct PlayingScene { keyboard: Keyboard, - notes: WaterfallRenderer, + waterfall: WaterfallRenderer, guidelines: GuidelineRenderer, player: MidiPlayer, rewind_controler: RewindController, bg_quad_pipeline: QuadPipeline, - quad_pipeline: QuadPipeline, + fg_quad_pipeline: QuadPipeline, toast_manager: ToastManager, top_bar: TopBar, @@ -63,7 +63,7 @@ impl PlayingScene { .map(|t| t.track_id) .collect(); - let mut notes = WaterfallRenderer::new( + let mut waterfall = WaterfallRenderer::new( &target.gpu, &song.file.tracks, &hidden_tracks, @@ -77,21 +77,31 @@ impl PlayingScene { song, keyboard_layout.range.clone(), ); - notes.update(&target.gpu.queue, player.time_without_lead_in()); + waterfall.update(&target.gpu.queue, player.time_without_lead_in()); Self { keyboard, guidelines, - notes, + waterfall, player, rewind_controler: RewindController::new(), bg_quad_pipeline: QuadPipeline::new(&target.gpu, &target.transform), - quad_pipeline: QuadPipeline::new(&target.gpu, &target.transform), + fg_quad_pipeline: QuadPipeline::new(&target.gpu, &target.transform), toast_manager: ToastManager::default(), top_bar: TopBar::default(), } } + + fn update_midi_player(&mut self, target: &Target, delta: Duration) -> f32 { + if self.player.play_along().are_required_keys_pressed() { + let delta = (delta / 10) * (target.config.speed_multiplier * 10.0) as u32; + let midi_events = self.player.update(delta); + self.keyboard.file_midi_events(&target.config, &midi_events); + } + + self.player.time_without_lead_in() + target.config.playback_offset + } } impl Scene for PlayingScene { @@ -101,7 +111,7 @@ impl Scene for PlayingScene { self.guidelines.set_layout(self.keyboard.layout().clone()); self.guidelines.set_pos(*self.keyboard.pos()); - self.notes.resize( + self.waterfall.resize( &target.gpu.queue, &target.config, self.keyboard.layout().clone(), @@ -109,36 +119,26 @@ impl Scene for PlayingScene { } fn update(&mut self, target: &mut Target, delta: Duration) { - self.rewind_controler.update(&mut self.player, target); - - if self.player.play_along().are_required_keys_pressed() { - let delta = (delta / 10) * (target.config.speed_multiplier * 10.0) as u32; - let midi_events = self.player.update(delta); - self.keyboard.file_midi_events(&target.config, &midi_events); - } + self.bg_quad_pipeline.clear(); + self.fg_quad_pipeline.clear(); + self.rewind_controler.update(&mut self.player, target); self.toast_manager.update(&mut target.text_renderer); - let time = self.player.time_without_lead_in() + target.config.playback_offset; - - self.bg_quad_pipeline.clear(); + let time = self.update_midi_player(target, delta); + self.waterfall.update(&target.gpu.queue, time); self.guidelines.update( &mut self.bg_quad_pipeline, target.config.animation_speed, time, ); - self.bg_quad_pipeline.prepare(&target.gpu.queue); - - self.notes.update(&target.gpu.queue, time); - - self.quad_pipeline.clear(); - self.keyboard - .update(&mut self.quad_pipeline, &mut target.text_renderer); + .update(&mut self.fg_quad_pipeline, &mut target.text_renderer); TopBar::update(self, &target.window_state); - self.quad_pipeline.prepare(&target.gpu.queue); + self.bg_quad_pipeline.prepare(&target.gpu.queue); + self.fg_quad_pipeline.prepare(&target.gpu.queue); } fn render<'pass>( @@ -147,8 +147,8 @@ impl Scene for PlayingScene { rpass: &mut wgpu::RenderPass<'pass>, ) { self.bg_quad_pipeline.render(transform, rpass); - self.notes.render(transform, rpass); - self.quad_pipeline.render(transform, rpass); + self.waterfall.render(transform, rpass); + self.fg_quad_pipeline.render(transform, rpass); } fn window_event(&mut self, target: &mut Target, event: &WindowEvent) { @@ -161,7 +161,7 @@ impl Scene for PlayingScene { handle_back_button(target, event); handle_pause_button(&mut self.player, event); - handle_settings_input(target, &mut self.toast_manager, &mut self.notes, event); + handle_settings_input(target, &mut self.toast_manager, &mut self.waterfall, event); } fn midi_event(&mut self, _target: &mut Target, _channel: u8, message: &MidiMessage) { diff --git a/neothesia/src/scene/playing_scene/top_bar.rs b/neothesia/src/scene/playing_scene/top_bar.rs index 693a1289..18a2397c 100644 --- a/neothesia/src/scene/playing_scene/top_bar.rs +++ b/neothesia/src/scene/playing_scene/top_bar.rs @@ -24,7 +24,7 @@ const DARK_MEASURE: Color = Color::new(0.4, 0.4, 0.4, 1.0); impl TopBar { pub fn update(scene: &mut PlayingScene, window_state: &WindowState) { let top_bar = &mut scene.top_bar; - let quad_pipeline = &mut scene.quad_pipeline; + let quad_pipeline = &mut scene.fg_quad_pipeline; let player = &scene.player; let rewind_controler = &scene.rewind_controler;