summaryrefslogtreecommitdiff
path: root/src/sim/sim_manager
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
parentc4c26f03e3eb18a76f9c2756076030dc52a667fa (diff)
input manager
Diffstat (limited to 'src/sim/sim_manager')
-rw-r--r--src/sim/sim_manager/mod.rs19
-rw-r--r--src/sim/sim_manager/utils.rs6
2 files changed, 12 insertions, 13 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;
}
diff --git a/src/sim/sim_manager/utils.rs b/src/sim/sim_manager/utils.rs
index 413e709..506844c 100644
--- a/src/sim/sim_manager/utils.rs
+++ b/src/sim/sim_manager/utils.rs
@@ -9,11 +9,7 @@ fn write_entity_to_world(sim: &mut SimManager, entity_id: EntityId) -> Vec<(u8,
let mut cells_written: Vec<(u8, u8, i32, i32)> = Vec::new();
if let Some(entity) = sim.entities.get(&entity_id)
&& let Some(cells) = &entity.data.cells
- && let Some((pos, (cos, sin))) = entity.data.transform(&super::SimCtx {
- cell_manager: &mut sim.cell_manager,
- rb_manager: &mut sim.rb_manager,
- particle_manager: &mut sim.particle_manager,
- })
+ && let Some((pos, (cos, sin))) = entity.data._transform(&sim.rb_manager)
{
let (half_size_x, half_size_y) = (cells.size.x as f32 / 2.0, cells.size.y as f32 / 2.0);
// half-extent of the rotated grid's axis-aligned bounding box, plus a cell of margin