From bdad89910dcf3a56790dba60ed1f0db679432323 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Sat, 22 Aug 2026 16:49:56 -0700 Subject: refactor entities --- src/sim/lib/marching_squares.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/sim/lib/marching_squares.rs') 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 { @@ -52,10 +52,10 @@ pub fn compute_types(marchable: &impl Marchable, w: i32, h: i32) -> Vec { 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> { +pub fn marching_squares_vertex_trace(marchable: &impl Marchable) -> Vec> { + 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; -- cgit v1.3.1