use godot::{ classes::{AudioStreamPlayer3D, GpuParticles3D}, prelude::*, }; #[derive(GodotClass)] #[class(base=Node3D, init)] pub struct PlayerEffects { #[export] splorch: Option>, #[export] hit_sound: Option>, #[export] walk_sound: Option>, #[export] walk_sfx_cd: f64, walk_sfx_cd_remaining: f64, base: Base, } #[godot_api] impl INode3D for PlayerEffects { fn process(&mut self, delta: f64) { self.walk_sfx_cd_remaining -= delta; } } impl PlayerEffects { pub fn death(&mut self) { if let Some(splorch) = &mut self.splorch { splorch.set_emitting(true); } if let Some(sfx) = &mut self.hit_sound { sfx.play(); } } pub fn hit(&mut self) { if let Some(sfx) = &mut self.hit_sound { sfx.play(); } } pub fn walk(&mut self) { if self.walk_sfx_cd_remaining > 0. { return; } if let Some(walk) = &mut self.walk_sound { walk.play(); } self.walk_sfx_cd_remaining = self.walk_sfx_cd; } pub fn jump(&mut self) { if let Some(walk) = &mut self.walk_sound { walk.play(); } self.walk_sfx_cd_remaining = 0.; } }