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 ()>, } 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] } }