diff options
Diffstat (limited to 'src/sim/sim_manager/mod.rs')
| -rw-r--r-- | src/sim/sim_manager/mod.rs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/sim/sim_manager/mod.rs b/src/sim/sim_manager/mod.rs index 9ae66be..8cb5eb3 100644 --- a/src/sim/sim_manager/mod.rs +++ b/src/sim/sim_manager/mod.rs @@ -18,6 +18,7 @@ use crate::{ process_entity_update_result, read_back_entities_from_world, write_entities_to_world, }, }, + vfx::VfxWriter, }; mod utils; @@ -43,6 +44,7 @@ pub struct SimManager { } pub struct SimCtx<'a> { + pub vfx_writer: &'a mut dyn VfxWriter, pub input_manager: &'a InputManager, pub cell_manager: &'a mut CellManager, pub rb_manager: &'a mut RbManager, @@ -130,7 +132,13 @@ impl SimManager { } } - fn cell_update(&mut self, config: &Config, input_manager: &InputManager, delta_time: f32) { + fn cell_update( + &mut self, + vfx_writer: &mut dyn VfxWriter, + config: &Config, + input_manager: &InputManager, + delta_time: f32, + ) { // before we tick, write all the entities into the sim world let written_entities_scope = write_entities_to_world(self); @@ -187,6 +195,7 @@ impl SimManager { for id in entity_ids { let entity = self.entities.get_mut(&id); let mut ctx = SimCtx { + vfx_writer, input_manager, cell_manager: &mut self.cell_manager, rb_manager: &mut self.rb_manager, @@ -203,11 +212,17 @@ impl SimManager { read_back_entities_from_world(self, written_entities_scope); } - fn physics_update(&mut self, input_manager: &InputManager, delta_time: f32) { + fn physics_update( + &mut self, + vfx_writer: &mut dyn VfxWriter, + input_manager: &InputManager, + delta_time: f32, + ) { let entity_ids: Vec<EntityId> = self.entities.keys().cloned().collect(); for id in entity_ids { let entity = self.entities.get_mut(&id); let mut ctx = SimCtx { + vfx_writer, input_manager, cell_manager: &mut self.cell_manager, rb_manager: &mut self.rb_manager, @@ -243,7 +258,13 @@ impl SimManager { .tick(&mut self.cell_manager, delta_time); } - pub fn update(&mut self, config: &Config, input_manager: &InputManager, delta_time: f32) { + pub fn update( + &mut self, + vfx_writer: &mut dyn VfxWriter, + config: &Config, + input_manager: &InputManager, + delta_time: f32, + ) { // handle sim controls if input_manager.pressed(Input::Pause) { self.paused = !self.paused; @@ -268,14 +289,14 @@ impl SimManager { self.last_cell_update = now; if self.paused && self.ignore_pause_next_tick { - self.cell_update(config, input_manager, delta_time); + self.cell_update(vfx_writer, config, input_manager, delta_time); } else if !self.paused { self.cell_updates_due += secs_since_last_cell_update / expected_secs_since_last_cell_update; let mut cell_updates_done = 0; // don't ever update more than 3 times per frame, or else we can get a pseudo deadlock while self.cell_updates_due >= 1.0 && cell_updates_done < 3 { - self.cell_update(config, input_manager, delta_time); + self.cell_update(vfx_writer, config, input_manager, delta_time); self.cell_updates_due -= 1.0; cell_updates_done += 1; } @@ -288,14 +309,14 @@ impl SimManager { self.last_physics_update = now; if self.paused && self.ignore_pause_next_tick { - self.physics_update(input_manager, PHYSICS_DELTA_TIME); + self.physics_update(vfx_writer, input_manager, PHYSICS_DELTA_TIME); } else if !self.paused { self.physics_updates_due += secs_since_last_physics_update / expected_secs_since_last_physics_update; let mut updates_done = 0; // don't ever update more than 3 times per frame, or else we can get a pseudo deadlock while self.physics_updates_due >= 1.0 && updates_done < 3 { - self.physics_update(input_manager, PHYSICS_DELTA_TIME); + self.physics_update(vfx_writer, input_manager, PHYSICS_DELTA_TIME); self.physics_updates_due -= 1.0; updates_done += 1; } |
