use rapier2d::prelude; use crate::sim::{ cell::{cell::Cell, materials::MaterialId}, lib::marching_squares::Marchable, }; pub struct RbEntity { pub id: u32, pub width: i32, pub height: i32, pub cells: Vec, pub rb: prelude::RigidBodyHandle, pub collider: Option, } impl RbEntity { #[inline] pub fn get_cell_at_local_position(&self, x: u8, y: u8) -> Cell { self.cells[x as usize + y as usize * self.width as usize] } #[inline] pub fn set_cell_at_local_position(&mut self, x: u8, y: u8, cell: Cell) { self.cells[x as usize + y as usize * self.width as usize] = cell; } } impl Marchable for RbEntity { fn occupied(&self, x: i32, y: i32) -> bool { if x < 0 || x >= self.width || y < 0 || y >= self.height { false } else { self.get_cell_at_local_position(x as u8, y as u8).material != MaterialId::Void } } fn size(&self) -> (i32, i32) { (self.width, self.height) } }