summaryrefslogtreecommitdiff
path: root/src/sim/lib/marching_squares.rs
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-22 16:49:56 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-22 16:49:56 -0700
commitbdad89910dcf3a56790dba60ed1f0db679432323 (patch)
tree19e65e2d0e9fa4a6227abc71ef28a6dd622161f0 /src/sim/lib/marching_squares.rs
parent1a515237afb7ad09353a65f5fbc6e98a7c29ce8e (diff)
refactor entities
Diffstat (limited to 'src/sim/lib/marching_squares.rs')
-rw-r--r--src/sim/lib/marching_squares.rs17
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;