diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2026-08-23 12:14:19 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2026-08-23 12:14:19 -0700 |
| commit | e6742f59102f2beb305b813d7f0ee1d544bbc3e0 (patch) | |
| tree | a4787655e441b4fb7acebf51373a8f3f7afbd9a4 /src/content/materials | |
| parent | 5f137b41ebeadfca3907221713f85f2c9fe431bf (diff) | |
separate data from cells
Diffstat (limited to 'src/content/materials')
| -rw-r--r-- | src/content/materials/fire.rs | 26 |
1 files changed, 16 insertions, 10 deletions
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 } |
