summaryrefslogtreecommitdiff
path: root/src/sim/sim_manager/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/sim_manager/mod.rs')
-rw-r--r--src/sim/sim_manager/mod.rs35
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;
}