diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2026-08-16 17:29:42 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2026-08-16 17:29:42 -0700 |
| commit | f177cc716c5f2aa5b50b14ccbb421de89e3a7854 (patch) | |
| tree | db06f9f44251d6d90e5e9709d47e6cc4397b9443 /src/sim/cell/materials/mod.rs | |
| parent | 40e9d818195824749293dff3afcfdd5c1432adbe (diff) | |
wip
Diffstat (limited to 'src/sim/cell/materials/mod.rs')
| -rw-r--r-- | src/sim/cell/materials/mod.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/sim/cell/materials/mod.rs b/src/sim/cell/materials/mod.rs new file mode 100644 index 0000000..a55ed51 --- /dev/null +++ b/src/sim/cell/materials/mod.rs @@ -0,0 +1,88 @@ +use crate::sim::cell_sim::sim::UpdateCtx; + +mod fire; +mod gas; +mod sand; +mod smoke; +mod water; + +#[repr(u8)] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum MaterialId { + Void = 0, + Sand, + Wood, + Water, + Gas, + Fire, + Smoke, +} + +pub struct MaterialDef { + pub name: &'static str, + pub color: (u8, u8, u8, u8), + pub density: u8, + pub sim_update: Option<fn(ctx: &mut UpdateCtx) -> ()>, +} + +static MATERIALS: [MaterialDef; 7] = [ + MaterialDef { + name: "Void", + color: (0x00, 0x00, 0x00, 0x00), + 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), + }, + MaterialDef { + name: "Gas", + color: (0xBD, 0xFF, 0xE4, 0xAA), + density: 10, + sim_update: Some(gas::sim_update), + }, + MaterialDef { + name: "Fire", + color: (0xFC, 0x66, 0x00, 0xAA), + // for now this matches wood + density: 50, + sim_update: Some(fire::sim_update), + }, + MaterialDef { + name: "Smoke", + color: (0x32, 0x35, 0x36, 0xAA), + density: 15, + sim_update: Some(smoke::sim_update), + }, +]; + +impl MaterialId { + pub const ALL: [MaterialId; 7] = [ + MaterialId::Void, + MaterialId::Sand, + MaterialId::Wood, + MaterialId::Water, + MaterialId::Gas, + MaterialId::Fire, + MaterialId::Smoke, + ]; + #[inline] + pub fn def(self) -> &'static MaterialDef { + &MATERIALS[self as usize] + } +} |
