From 7ce9781f86c56f932dabc3bc84b8d21d7be8fecc Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Tue, 11 Aug 2026 20:41:41 -0700 Subject: refactor sim loop --- src/sim/materials/mod.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/sim/materials/mod.rs (limited to 'src/sim/materials/mod.rs') diff --git a/src/sim/materials/mod.rs b/src/sim/materials/mod.rs new file mode 100644 index 0000000..410236d --- /dev/null +++ b/src/sim/materials/mod.rs @@ -0,0 +1,60 @@ +use crate::sim::sim::UpdateCtx; + +mod sand; +mod water; + +#[repr(u8)] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum MaterialId { + Void = 0, + Sand, + Wood, + Water, +} + +pub struct MaterialDef { + pub name: &'static str, + pub color: [u8; 4], + pub density: u8, + pub sim_update: Option ()>, +} + +static MATERIALS: [MaterialDef; 4] = [ + MaterialDef { + name: "Void", + color: [0x00, 0x00, 0x00, 0xFF], + density: 0, + sim_update: None, + }, + MaterialDef { + name: "Sand", + color: [0xDE, 0xCB, 0x85, 0xFF], + density: 50, + sim_update: Some(sand::sim_update), + }, + MaterialDef { + name: "Wood", + color: [0x85, 0x56, 0x1D, 0xFF], + density: 50, + sim_update: None, + }, + MaterialDef { + name: "Water", + color: [0x38, 0xA9, 0xFF, 0xFF], + density: 40, + sim_update: Some(water::sim_update), + }, +]; + +impl MaterialId { + pub const ALL: [MaterialId; 4] = [ + MaterialId::Void, + MaterialId::Sand, + MaterialId::Wood, + MaterialId::Water, + ]; + #[inline] + pub fn def(self) -> &'static MaterialDef { + &MATERIALS[self as usize] + } +} -- cgit v1.3.1