From 2640f91e36558650bb988dcc82b5148ee71f3eb0 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Tue, 18 Aug 2026 22:22:27 -0700 Subject: optimize with settlement counter --- src/sim/cell/materials/mod.rs | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'src/sim/cell/materials/mod.rs') 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 ()>, } -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, ]; -- cgit v1.3.1