diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2026-08-22 16:49:56 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2026-08-22 16:49:56 -0700 |
| commit | bdad89910dcf3a56790dba60ed1f0db679432323 (patch) | |
| tree | 19e65e2d0e9fa4a6227abc71ef28a6dd622161f0 /src/sim/lib/marching_squares.rs | |
| parent | 1a515237afb7ad09353a65f5fbc6e98a7c29ce8e (diff) | |
refactor entities
Diffstat (limited to 'src/sim/lib/marching_squares.rs')
| -rw-r--r-- | src/sim/lib/marching_squares.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/sim/lib/marching_squares.rs b/src/sim/lib/marching_squares.rs index 9df3dfa..ff48fd5 100644 --- a/src/sim/lib/marching_squares.rs +++ b/src/sim/lib/marching_squares.rs @@ -1,4 +1,4 @@ -use glam::Vec2; +use glam::{IVec2, Vec2}; /** 0b(tl)(tr)(br)(bl), 0..=15 @@ -42,8 +42,8 @@ fn derive_type(tl: bool, tr: bool, br: bool, bl: bool) -> usize { } pub trait Marchable { - fn occupied(&self, x: i32, y: i32) -> bool; - fn size(&self) -> (i32, i32); + fn occupied(&self, pos: IVec2) -> bool; + fn size(&self) -> IVec2; } pub fn compute_types(marchable: &impl Marchable, w: i32, h: i32) -> Vec<u8> { @@ -52,10 +52,10 @@ pub fn compute_types(marchable: &impl Marchable, w: i32, h: i32) -> Vec<u8> { for y in -1..h { // TODO precompute per column for x in -1..w { - let tl = marchable.occupied(x, y); - let tr = marchable.occupied(x + 1, y); - let br = marchable.occupied(x + 1, y + 1); - let bl = marchable.occupied(x, y + 1); + let tl = marchable.occupied(IVec2::new(x, y)); + let tr = marchable.occupied(IVec2::new(x + 1, y)); + let br = marchable.occupied(IVec2::new(x + 1, y + 1)); + let bl = marchable.occupied(IVec2::new(x, y + 1)); types.push(derive_type(tl, tr, br, bl) as u8); } } @@ -132,7 +132,8 @@ fn toward_side(x: i32, y: i32, exit: Side) -> (i32, i32, Side) { } // outer is cw, inner ccw -pub fn marching_squares_vertex_trace(marchable: &impl Marchable, w: i32, h: i32) -> Vec<Vec<Vec2>> { +pub fn marching_squares_vertex_trace(marchable: &impl Marchable) -> Vec<Vec<Vec2>> { + let [w, h] = marchable.size().to_array(); let mut visited = vec![0u8; ((w + 1) * (h + 1)) as usize]; let idx = |cx: i32, cy: i32| (((cy + 1) * (w + 1)) + (cx + 1)) as usize; |
