diff --git a/src/nodes/audio.rs b/src/nodes/audio.rs index d195a0b..c20f96f 100644 --- a/src/nodes/audio.rs +++ b/src/nodes/audio.rs @@ -1,5 +1,5 @@ use super::spatial::get_spatial; -use super::{Message, Node}; +use super::Node; use crate::core::client::Client; use crate::core::destroy_queue; use crate::core::registry::Registry; @@ -53,9 +53,8 @@ impl Sound { play: Mutex::new(None), }; let sound_arc = SOUND_REGISTRY.add(sound); - node.add_local_signal("play", Sound::play_flex); - node.add_local_signal("stop", Sound::stop_flex); let _ = node.sound.set(sound_arc.clone()); + ::add_node_members(node); Ok(sound_arc) } @@ -68,7 +67,7 @@ impl Sound { sk.sound_inst_stop(instance); } } - if self.play.lock().is_some() && self.instance.lock().is_none() { + if self.instance.lock().is_none() && self.play.lock().take().is_some() { self.instance.lock().replace(sk.sound_play( sound.as_ref(), vec3(0.0, 0.0, 0.0), @@ -79,38 +78,23 @@ impl Sound { sk.sound_inst_set_pos(*instance, self.space.global_transform().w_axis.xyz()); } } - - fn play_flex(node: Arc, _calling_client: Arc, _message: Message) -> Result<()> { +} +impl SoundAspect for Sound { + fn play(node: Arc, _calling_client: Arc) -> Result<()> { let sound = node.sound.get().unwrap(); sound.play.lock().replace(()); Ok(()) } - - pub fn stop_flex( - node: Arc, - _calling_client: Arc, - _message: Message, - ) -> Result<()> { + fn stop(node: Arc, _calling_client: Arc) -> Result<()> { let sound = node.sound.get().unwrap(); sound.stop.lock().replace(()); Ok(()) } } -impl SoundAspect for Sound { - #[doc = "Play sound effect"] - fn play(_node: Arc, _calling_client: Arc) -> Result<()> { - todo!() - } - - #[doc = "Stop sound effect"] - fn stop(_node: Arc, _calling_client: Arc) -> Result<()> { - todo!() - } -} impl Drop for Sound { fn drop(&mut self) { - if let Some(instance) = self.instance.lock().take() { - destroy_queue::add(instance); + if let Some(sk_sound) = self.sk_sound.take() { + destroy_queue::add(sk_sound); } SOUND_REGISTRY.remove(self); } diff --git a/src/nodes/drawable/model.rs b/src/nodes/drawable/model.rs index 62cabf1..9c746c3 100644 --- a/src/nodes/drawable/model.rs +++ b/src/nodes/drawable/model.rs @@ -1,5 +1,6 @@ use super::{MaterialParameter, ModelAspect, ModelPartAspect, Node}; use crate::core::client::Client; +use crate::core::destroy_queue; use crate::core::node_collections::LifeLinkedNodeMap; use crate::core::registry::Registry; use crate::core::resource::get_resource_file; @@ -332,6 +333,9 @@ impl Model { impl ModelAspect for Model {} impl Drop for Model { fn drop(&mut self) { + if let Some(sk_model) = self.sk_model.take() { + destroy_queue::add(sk_model); + } MODEL_REGISTRY.remove(self); } }