summaryrefslogtreecommitdiff
path: root/src/content/materials/fire.rs
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-23 12:14:19 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-23 12:14:19 -0700
commite6742f59102f2beb305b813d7f0ee1d544bbc3e0 (patch)
treea4787655e441b4fb7acebf51373a8f3f7afbd9a4 /src/content/materials/fire.rs
parent5f137b41ebeadfca3907221713f85f2c9fe431bf (diff)
separate data from cells
Diffstat (limited to 'src/content/materials/fire.rs')
-rw-r--r--src/content/materials/fire.rs26
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
}