diff options
Diffstat (limited to 'src/sim/sim_manager/mod.rs')
| -rw-r--r-- | src/sim/sim_manager/mod.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/sim/sim_manager/mod.rs b/src/sim/sim_manager/mod.rs index 89ae528..8fab9cf 100644 --- a/src/sim/sim_manager/mod.rs +++ b/src/sim/sim_manager/mod.rs @@ -5,9 +5,10 @@ use fxhash::FxHashMap; use crate::{ Config, InputManager, config::{PHYSICS_DELTA_TIME, PHYSICS_FPS, SIM_FPS}, + input::Input, sim::{ cell_manager::manager::CellManager, - entity::{Entity, EntityDef, EntityId, EntityUpdateResult}, + entity::{Entity, EntityDef, EntityId}, particle_manager::ParticleManager, rb_manager::RbManager, sim_manager::utils::{ @@ -163,6 +164,24 @@ impl SimManager { } pub fn update(&mut self, config: &Config, input_manager: &InputManager, delta_time: f32) { + // handle sim controls + if input_manager.pressed(Input::Pause) { + self.paused = !self.paused; + } + if input_manager.pressed(Input::Step) { + self.ignore_pause_next_tick = true; + } + if input_manager.pressed(Input::ClearGrid) { + self.cell_manager = CellManager::from_default_size(); + } + if input_manager.pressed(Input::ClearEntities) { + let entities: Vec<EntityId> = self.entities.drain().map(|(id, _)| id).collect(); + entities.iter().for_each(|&id| self.destroy_entity(id)); + } + if input_manager.pressed(Input::ClearParticles) { + self.particle_manager.particles = Vec::new(); + } + let now = Instant::now(); let secs_since_last_cell_update = (now - self.last_cell_update).as_secs_f32(); let expected_secs_since_last_cell_update = 1.0 / SIM_FPS as f32; |
