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] } }