diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2026-08-18 22:22:27 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2026-08-18 22:22:27 -0700 |
| commit | 2640f91e36558650bb988dcc82b5148ee71f3eb0 (patch) | |
| tree | 5f67c648569109c84736b11b39cb6d2cd6b67e4d /src/sim/cell/materials/mod.rs | |
| parent | 92dd02d7cc4d9fc930760d26d81edbe2197a3fc0 (diff) | |
optimize with settlement counter
Diffstat (limited to 'src/sim/cell/materials/mod.rs')
| -rw-r--r-- | src/sim/cell/materials/mod.rs | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/sim/cell/materials/mod.rs b/src/sim/cell/materials/mod.rs index 0d19696..9bcf5e4 100644 --- a/src/sim/cell/materials/mod.rs +++ b/src/sim/cell/materials/mod.rs @@ -2,9 +2,8 @@ use crate::sim::cell_sim::sim::UpdateCtx; mod fire; mod gas; -mod sand; -mod smoke; -mod water; +mod liquid; +mod powder; #[repr(u8)] #[derive(Clone, Copy, PartialEq, Eq, Debug)] @@ -13,71 +12,82 @@ pub enum MaterialId { Sand, Wood, Water, - Gas, Fire, Smoke, } +#[repr(u8)] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum MaterialForm { + Void, + Gas, + Liquid, + Powder, + Solid, +} + pub struct MaterialDef { pub name: &'static str, pub color: (u8, u8, u8, u8), pub density: u8, + pub form: MaterialForm, pub sim_update: Option<fn(ctx: &mut UpdateCtx) -> ()>, } -static MATERIALS: [MaterialDef; 7] = [ +static MATERIALS: [MaterialDef; 6] = [ MaterialDef { name: "Void", color: (0x00, 0x00, 0x00, 0x00), density: 0, + // form usually but not always determines the update fn + form: MaterialForm::Void, sim_update: None, }, MaterialDef { name: "Sand", color: (0xDE, 0xCB, 0x85, 0xFF), density: 50, - sim_update: Some(sand::sim_update), + form: MaterialForm::Powder, + sim_update: Some(powder::sim_update), }, MaterialDef { name: "Wood", color: (0x85, 0x56, 0x1D, 0xFF), density: 50, + form: MaterialForm::Solid, 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), + form: MaterialForm::Liquid, + sim_update: Some(liquid::sim_update), }, + // TODO this is not a material MaterialDef { name: "Fire", color: (0xFC, 0x66, 0x00, 0xAA), // for now this matches wood density: 50, + form: MaterialForm::Gas, sim_update: Some(fire::sim_update), }, MaterialDef { name: "Smoke", color: (0x32, 0x35, 0x36, 0xAA), density: 15, - sim_update: Some(smoke::sim_update), + form: MaterialForm::Gas, + sim_update: Some(gas::sim_update), }, ]; impl MaterialId { - pub const ALL: [MaterialId; 7] = [ + pub const ALL: [MaterialId; 6] = [ MaterialId::Void, MaterialId::Sand, MaterialId::Wood, MaterialId::Water, - MaterialId::Gas, MaterialId::Fire, MaterialId::Smoke, ]; |
