summaryrefslogtreecommitdiff
path: root/src/sim/sim_manager/mod.rs
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-23 14:33:23 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-23 14:33:23 -0700
commitda45c5a7dbb017c8e579d0ab66a2259a70b28f40 (patch)
tree938c0be6bd6b938cb8788456ce759b784ee74f5c /src/sim/sim_manager/mod.rs
parentc4c26f03e3eb18a76f9c2756076030dc52a667fa (diff)
input manager
Diffstat (limited to 'src/sim/sim_manager/mod.rs')
-rw-r--r--src/sim/sim_manager/mod.rs19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/sim/sim_manager/mod.rs b/src/sim/sim_manager/mod.rs
index 74c21fa..be75eeb 100644
--- a/src/sim/sim_manager/mod.rs
+++ b/src/sim/sim_manager/mod.rs
@@ -3,7 +3,7 @@ use std::time::Instant;
use fxhash::FxHashMap;
use crate::{
- Config,
+ Config, InputManager,
config::{PHYSICS_DELTA_TIME, PHYSICS_FPS, SIM_FPS},
sim::{
cell_manager::manager::CellManager,
@@ -37,6 +37,7 @@ pub struct SimManager {
}
pub struct SimCtx<'a> {
+ pub input_manager: &'a InputManager,
pub cell_manager: &'a mut CellManager,
pub rb_manager: &'a mut RbManager,
pub particle_manager: &'a mut ParticleManager,
@@ -91,7 +92,7 @@ impl SimManager {
}
}
- fn cell_update(&mut self, config: &Config, delta_time: f32) {
+ fn cell_update(&mut self, config: &Config, input_manager: &InputManager, delta_time: f32) {
// before we tick, write all the entities into the sim world
let cells_written_by_entity = write_entities_to_world(self);
@@ -103,6 +104,7 @@ impl SimManager {
for id in entity_ids {
let entity = self.entities.get_mut(&id);
let mut ctx = SimCtx {
+ input_manager,
cell_manager: &mut self.cell_manager,
rb_manager: &mut self.rb_manager,
particle_manager: &mut self.particle_manager,
@@ -121,11 +123,12 @@ impl SimManager {
read_back_entities_from_world(self, cells_written_by_entity);
}
- fn physics_update(&mut self, delta_time: f32) {
+ fn physics_update(&mut self, 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 {
+ input_manager,
cell_manager: &mut self.cell_manager,
rb_manager: &mut self.rb_manager,
particle_manager: &mut self.particle_manager,
@@ -162,21 +165,21 @@ impl SimManager {
.tick(&mut self.cell_manager, delta_time);
}
- pub fn update(&mut self, config: &Config, delta_time: f32) {
+ pub fn update(&mut self, config: &Config, input_manager: &InputManager, delta_time: f32) {
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;
self.last_cell_update = now;
if self.paused && self.ignore_pause_next_tick {
- self.cell_update(config, delta_time);
+ self.cell_update(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, delta_time);
+ self.cell_update(config, input_manager, delta_time);
self.cell_updates_due -= 1.0;
cell_updates_done += 1;
}
@@ -189,14 +192,14 @@ impl SimManager {
self.last_physics_update = now;
if self.paused && self.ignore_pause_next_tick {
- self.physics_update(PHYSICS_DELTA_TIME);
+ self.physics_update(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(PHYSICS_DELTA_TIME);
+ self.physics_update(input_manager, PHYSICS_DELTA_TIME);
self.physics_updates_due -= 1.0;
updates_done += 1;
}