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.rs21
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;