From 2dba0d5d60c099d5930812102f471f7824858aa2 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sat, 8 Aug 2026 20:13:44 +0300 Subject: [PATCH] Add lifetime for decals --- godot/scenes/player/blood_decal.tscn | 3 ++- godot/scenes/weapons/bullet_hole_decal.tscn | 3 ++- rust/src/map/decal.rs | 22 +++++++++++++++++++++ rust/src/map/mod.rs | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 rust/src/map/decal.rs diff --git a/godot/scenes/player/blood_decal.tscn b/godot/scenes/player/blood_decal.tscn index 4af0a27..a0ed8b8 100644 --- a/godot/scenes/player/blood_decal.tscn +++ b/godot/scenes/player/blood_decal.tscn @@ -2,7 +2,8 @@ [ext_resource type="Texture2D" uid="uid://cnahou6bg32pu" path="res://raw_assets/blood_splat.png" id="1_1rw23"] -[node name="bullet_hole_decal" type="Node3D" unique_id=18163478] +[node name="blood_decal" type="MapDecal" unique_id=810489252] +lifetime = 90.0 [node name="decal" type="Decal" parent="." unique_id=1515351623] size = Vector3(1, 1, 1) diff --git a/godot/scenes/weapons/bullet_hole_decal.tscn b/godot/scenes/weapons/bullet_hole_decal.tscn index 7bfb11b..e69eebf 100644 --- a/godot/scenes/weapons/bullet_hole_decal.tscn +++ b/godot/scenes/weapons/bullet_hole_decal.tscn @@ -2,7 +2,8 @@ [ext_resource type="Texture2D" uid="uid://sxfd2davklia" path="res://raw_assets/bullet_hole.png" id="1_lf0rx"] -[node name="bullet_hole_decal" type="Node3D" unique_id=18163478] +[node name="bullet_hole_decal" type="MapDecal" unique_id=371158487] +lifetime = 90.0 [node name="decal" type="Decal" parent="." unique_id=1515351623] size = Vector3(0.5, 0.5, 0.5) diff --git a/rust/src/map/decal.rs b/rust/src/map/decal.rs new file mode 100644 index 0000000..e44e080 --- /dev/null +++ b/rust/src/map/decal.rs @@ -0,0 +1,22 @@ +use godot::prelude::*; + +#[derive(GodotClass)] +#[class(base=Node3D, init)] +pub struct MapDecal { + #[export] + lifetime: f64, + + alive_for: f64, + + base: Base, +} + +#[godot_api] +impl INode3D for MapDecal { + fn process(&mut self, delta: f64) { + self.alive_for += delta; + if self.alive_for >= self.lifetime { + self.base_mut().queue_free(); + } + } +} diff --git a/rust/src/map/mod.rs b/rust/src/map/mod.rs index 3c6dfc7..4a262ea 100644 --- a/rust/src/map/mod.rs +++ b/rust/src/map/mod.rs @@ -13,6 +13,7 @@ use crate::{ replay::{ReplayPlayer, ReplayPlayerState, StandaloneReplayManager}, }; +pub mod decal; pub mod footstep_box; pub mod goal; pub mod killbox;