From e6742f59102f2beb305b813d7f0ee1d544bbc3e0 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Sun, 23 Aug 2026 12:14:19 -0700 Subject: separate data from cells --- src/content/materials/fire.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/content/materials') diff --git a/src/content/materials/fire.rs b/src/content/materials/fire.rs index 2e5ef2f..5e5b29a 100644 --- a/src/content/materials/fire.rs +++ b/src/content/materials/fire.rs @@ -8,19 +8,25 @@ use crate::{ }, }; +pub trait FireCtxView { + fn get_ticks_lived(&self, x: i32, y: i32) -> u16; + fn set_ticks_lived(&mut self, x: i32, y: i32, ticks: u16) -> (); +} + +impl FireCtxView for UpdateCtx<'_, '_, '_> { + fn get_ticks_lived(&self, x: i32, y: i32) -> u16 { + self.get_cell_data(x, y).unwrap_or(0) + } + fn set_ticks_lived(&mut self, x: i32, y: i32, ticks: u16) { + self.set_cell_data(x, y, ticks); + } +} + pub trait FireCellView { - fn get_ticks_lived(self) -> u16; - fn set_ticks_lived(&mut self, ticks: u16) -> (); fn is_flammable(self) -> bool; } impl FireCellView for Cell { - fn get_ticks_lived(self) -> u16 { - self.data - } - fn set_ticks_lived(&mut self, ticks: u16) { - self.data = ticks; - } // this could be a property of the material def, I think it's better here for now fn is_flammable(self) -> bool { [MaterialId::Wood].contains(&self.material) @@ -31,7 +37,7 @@ impl FireCellView for Cell { // TODO wtf is fire #[inline] pub fn sim_update(ctx: &mut UpdateCtx) -> PostUpdateAction { - let ticks_lived = ctx.cell.get_ticks_lived(); + let ticks_lived = ctx.get_ticks_lived(0, 0); // 2 seconds if ticks_lived > 240 { // we have a chance to live longer--roughly ?% chance of living an extra second @@ -74,7 +80,7 @@ pub fn sim_update(ctx: &mut UpdateCtx) -> PostUpdateAction { } } - ctx.cell.set_ticks_lived(ticks_lived + 1); + ctx.set_ticks_lived(0, 0, ticks_lived + 1); // apply our new lifespan PostUpdateAction::Apply } -- cgit v1.3.1