From 66de0a2d536891bf2333276360bba438874d123a Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 18 Oct 2022 11:58:33 -0400 Subject: [PATCH] refactor(alias): new fn --- src/nodes/alias.rs | 39 ++++++++++++---------- src/nodes/data.rs | 16 ++++----- src/nodes/hmd.rs | 18 +++++++--- src/nodes/items/mod.rs | 76 ++++++++++++++++++++---------------------- src/nodes/mod.rs | 6 ++-- src/nodes/spatial.rs | 2 +- 6 files changed, 82 insertions(+), 75 deletions(-) diff --git a/src/nodes/alias.rs b/src/nodes/alias.rs index 9a48d5b..69d9088 100644 --- a/src/nodes/alias.rs +++ b/src/nodes/alias.rs @@ -1,35 +1,38 @@ +use crate::core::client::Client; + use super::Node; use std::sync::{Arc, Weak}; +#[derive(Debug, Default, Clone)] +pub struct AliasInfo { + pub(super) local_signals: Vec<&'static str>, + pub(super) local_methods: Vec<&'static str>, + pub(super) remote_signals: Vec<&'static str>, +} + #[allow(dead_code)] pub struct Alias { pub(super) node: Weak, pub original: Weak, - pub(super) local_signals: Vec<&'static str>, - pub(super) local_methods: Vec<&'static str>, - pub(super) remote_signals: Vec<&'static str>, - pub(super) remote_methods: Vec<&'static str>, + pub info: AliasInfo, } impl Alias { - pub fn add_to( - node: &Arc, + pub fn new( + client: &Arc, + parent: &str, + name: &str, original: &Arc, - local_signals: Vec<&'static str>, - local_methods: Vec<&'static str>, - remote_signals: Vec<&'static str>, - remote_methods: Vec<&'static str>, - ) -> Arc { + info: AliasInfo, + ) -> Arc { + let node = Node::create(client, parent, name, true).add_to_scenegraph(); let alias = Alias { - node: Arc::downgrade(node), + node: Arc::downgrade(&node), original: Arc::downgrade(original), - local_signals, - local_methods, - remote_signals, - remote_methods, + info, }; let alias = original.aliases.add(alias); - let _ = node.alias.set(alias.clone()); - alias + let _ = node.alias.set(alias); + node } } diff --git a/src/nodes/data.rs b/src/nodes/data.rs index b463831..e5e9de5 100644 --- a/src/nodes/data.rs +++ b/src/nodes/data.rs @@ -1,3 +1,4 @@ +use super::alias::AliasInfo; use super::fields::Field; use super::spatial::{parse_transform, Spatial}; use super::{Alias, Node}; @@ -128,20 +129,15 @@ impl PulseSender { let uids: Vec = distance_sorted_receivers .into_iter() .map(|(_, receiver)| { - let receiver_alias = Node::create( + let receiver_alias = Alias::new( &calling_client, node.get_path(), receiver.uid.as_str(), - false, - ) - .add_to_scenegraph(); - Alias::add_to( - &receiver_alias, receiver.node.upgrade().as_ref().unwrap(), - vec![], - vec!["sendData"], - vec![], - vec![], + AliasInfo { + local_methods: vec!["sendData"], + ..Default::default() + }, ); sender.aliases.add(Arc::downgrade(&receiver_alias)); diff --git a/src/nodes/hmd.rs b/src/nodes/hmd.rs index 6907aea..b75468a 100644 --- a/src/nodes/hmd.rs +++ b/src/nodes/hmd.rs @@ -1,5 +1,8 @@ use super::{alias::Alias, spatial::Spatial, Node}; -use crate::core::client::{Client, INTERNAL_CLIENT}; +use crate::{ + core::client::{Client, INTERNAL_CLIENT}, + nodes::alias::AliasInfo, +}; use glam::{vec3, Mat4}; use std::sync::Arc; use stereokit::StereoKit; @@ -26,7 +29,14 @@ pub fn frame(sk: &StereoKit) { } pub fn make_alias(client: &Arc) -> Arc { - let node = Node::create(client, "", "hmd", false).add_to_scenegraph(); - Alias::add_to(&node, &HMD, vec!["getTransform"], vec![], vec![], vec![]); - node + Alias::new( + client, + "", + "hmd", + &HMD, + AliasInfo { + local_signals: vec!["getTransform"], + ..Default::default() + }, + ) } diff --git a/src/nodes/items/mod.rs b/src/nodes/items/mod.rs index a5da2dd..393a5c0 100644 --- a/src/nodes/items/mod.rs +++ b/src/nodes/items/mod.rs @@ -7,6 +7,7 @@ use super::{Alias, Node}; use crate::core::client::{Client, INTERNAL_CLIENT}; use crate::core::nodelist::LifeLinkedNodeList; use crate::core::registry::Registry; +use crate::nodes::alias::AliasInfo; use crate::nodes::fields::find_field; use crate::wayland::panel_item::{register_panel_item_ui_flex, PanelItem}; use anyhow::{anyhow, ensure, Result}; @@ -120,31 +121,30 @@ impl Item { item } fn make_alias(&self, client: &Arc, parent: &str) -> (Arc, Arc) { - let node = Node::create(client, parent, &self.uid, true).add_to_scenegraph(); - let alias = Alias::add_to( - &node, + let node = Alias::new( + client, + parent, + &self.uid, &self.node.upgrade().unwrap(), - [ - &self.type_info.aliased_local_signals, - ITEM_ALIAS_LOCAL_SIGNALS.as_slice(), - ] - .concat(), - [ - &self.type_info.aliased_local_methods, - ITEM_ALIAS_LOCAL_METHODS.as_slice(), - ] - .concat(), - [ - &self.type_info.aliased_remote_signals, - ITEM_ALIAS_REMOTE_SIGNALS.as_slice(), - ] - .concat(), - [ - &self.type_info.aliased_remote_methods, - ITEM_ALIAS_REMOTE_METHODS.as_slice(), - ] - .concat(), + AliasInfo { + local_signals: [ + &self.type_info.aliased_local_signals, + ITEM_ALIAS_LOCAL_SIGNALS.as_slice(), + ] + .concat(), + local_methods: [ + &self.type_info.aliased_local_methods, + ITEM_ALIAS_LOCAL_METHODS.as_slice(), + ] + .concat(), + remote_signals: [ + &self.type_info.aliased_remote_signals, + ITEM_ALIAS_REMOTE_SIGNALS.as_slice(), + ] + .concat(), + }, ); + let alias = node.alias.get().unwrap().clone(); (node, alias) } } @@ -273,27 +273,25 @@ impl ItemAcceptor { fn make_aliases(&self, client: &Arc, parent: &str) -> Vec> { let mut aliases = Vec::new(); let acceptor_node = &self.node.upgrade().unwrap(); - let acceptor_alias = - Node::create(client, parent, acceptor_node.uid.as_str(), true).add_to_scenegraph(); - Alias::add_to( - &acceptor_alias, + let acceptor_alias = Alias::new( + client, + parent, + acceptor_node.uid.as_str(), acceptor_node, - vec!["release"], - vec![], - vec![], - vec![], + AliasInfo { + local_signals: vec!["release"], + ..Default::default() + }, ); if let Some(field) = self.field.lock().upgrade() { - let acceptor_field_alias = - Node::create(client, acceptor_alias.get_path(), "field", true).add_to_scenegraph(); - Alias::add_to( - &acceptor_field_alias, + let acceptor_field_alias = Alias::new( + client, + acceptor_alias.get_path(), + "field", &field.spatial_ref().node.upgrade().unwrap(), - vec![], - vec![], - vec![], - vec![], + AliasInfo::default(), ); + aliases.push(acceptor_field_alias); } aliases.push(acceptor_alias); diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index 93c4485..38cd5fa 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -167,7 +167,7 @@ impl Node { data: &[u8], ) -> Result<(), ScenegraphError> { if let Some(alias) = self.alias.get() { - if !alias.local_signals.iter().any(|e| e == &method) { + if !alias.info.local_signals.iter().any(|e| e == &method) { return Err(ScenegraphError::SignalNotFound); } alias @@ -191,7 +191,7 @@ impl Node { data: &[u8], ) -> Result, ScenegraphError> { if let Some(alias) = self.alias.get() { - if !alias.local_methods.iter().any(|e| e == &method) { + if !alias.info.local_methods.iter().any(|e| e == &method) { return Err(ScenegraphError::MethodNotFound); } alias @@ -212,7 +212,7 @@ impl Node { self.aliases .get_valid_contents() .iter() - .filter(|alias| alias.remote_signals.iter().any(|e| e == &method)) + .filter(|alias| alias.info.remote_signals.iter().any(|e| e == &method)) .for_each(|alias| { let _ = alias .node diff --git a/src/nodes/spatial.rs b/src/nodes/spatial.rs index e81fd0d..9d274cf 100644 --- a/src/nodes/spatial.rs +++ b/src/nodes/spatial.rs @@ -283,7 +283,7 @@ pub fn create_spatial_flex(_node: &Node, calling_client: Arc, data: &[u8 } let info: CreateSpatialInfo = deserialize(data)?; let node = Node::create(&calling_client, "/spatial/spatial", info.name, true); - let parent = find_spatial(&calling_client, "Spatial parent", info.parent_path)?; + let parent = find_spatial_parent(&calling_client, info.parent_path)?; let transform = parse_transform(info.transform, true, true, true)?; let node = node.add_to_scenegraph(); Spatial::add_to(&node, Some(parent), transform)?;