summaryrefslogtreecommitdiff
path: root/src/sim/sim_manager/mod.rs
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-23 22:48:38 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-23 22:48:38 -0700
commit820e4d00837376bc63b614a382809469a719ed0b (patch)
tree79d3fff7b76777c6f241183d4fd9f5479d709cbe /src/sim/sim_manager/mod.rs
parent3c5b52c742a86dfb86238bad3bfc375bf12fc518 (diff)
entity partitioning
Diffstat (limited to 'src/sim/sim_manager/mod.rs')
-rw-r--r--src/sim/sim_manager/mod.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/sim/sim_manager/mod.rs b/src/sim/sim_manager/mod.rs
index 8fab9cf..b2441ef 100644
--- a/src/sim/sim_manager/mod.rs
+++ b/src/sim/sim_manager/mod.rs
@@ -1,12 +1,14 @@
use std::time::Instant;
use fxhash::FxHashMap;
+use rand::random_range;
use crate::{
Config, InputManager,
config::{PHYSICS_DELTA_TIME, PHYSICS_FPS, SIM_FPS},
input::Input,
sim::{
+ cell::Cell,
cell_manager::manager::CellManager,
entity::{Entity, EntityDef, EntityId},
particle_manager::ParticleManager,
@@ -99,6 +101,41 @@ impl SimManager {
// before we tick, write all the entities into the sim world
let cells_written_by_entity = write_entities_to_world(self);
+ // --TEST DRAWING--
+ if input_manager.lmb_held || input_manager.rmb_held {
+ // start with the bounding box of the drawing brush circle + some margin
+ // clamp the bounding box to the board sie
+ let bb_xl = (input_manager.world_mouse_pos.x - config.brush_radius).round() as i32;
+ let bb_xu = (input_manager.world_mouse_pos.x + config.brush_radius).round() as i32;
+ let bb_yl = (input_manager.world_mouse_pos.y - config.brush_radius).round() as i32;
+ let bb_yu = (input_manager.world_mouse_pos.y + config.brush_radius).round() as i32;
+
+ // for each point, check if the distance is less than the brush size and write the pixel
+ for x in bb_xl..bb_xu {
+ for y in bb_yl..bb_yu {
+ let r = random_range(0.0..1.0);
+ if ((x - input_manager.world_mouse_pos.x.round() as i32).pow(2)
+ + (y - input_manager.world_mouse_pos.y.round() as i32).pow(2))
+ < (config.brush_radius as i32).pow(2)
+ && r > 0.9
+ {
+ let cell = if input_manager.lmb_held {
+ let mut cell = Cell::from_material(config.brush_material);
+ // ensure we simulate on the first tick
+ cell.match_parity(self.cell_manager.seqno);
+ cell
+ } else {
+ Cell::void()
+ };
+
+ self.cell_manager.set_cell_from_game_position(
+ x, y, cell, false, // wake the chunk
+ )
+ }
+ }
+ }
+ }
+
// tick
self.cell_manager.tick(config.use_threading);