From 2f63d5aaec42c55ce0870f7fe5c9c6956342dd59 Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 14 Jun 2022 20:54:52 -0400 Subject: [PATCH] feat(spatial): get spatial parent and get transform pose functions --- src/nodes/field.rs | 8 ++++---- src/nodes/spatial.rs | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/nodes/field.rs b/src/nodes/field.rs index 0a6ab03..4a17e08 100644 --- a/src/nodes/field.rs +++ b/src/nodes/field.rs @@ -1,5 +1,5 @@ use super::core::Node; -use super::spatial::{get_spatial_parent, Spatial}; +use super::spatial::{get_spatial_parent_flex, Spatial}; use crate::core::client::Client; use anyhow::{anyhow, ensure, Result}; use glam::{swizzles::*, vec2, vec3, vec3a, Mat4, Vec3, Vec3A}; @@ -329,7 +329,7 @@ pub fn create_box_field_flex(_node: &Node, calling_client: Rc, data: &[u let root = flexbuffers::Reader::get_root(data)?; let flex_vec = root.get_vector()?; let node = Node::create("/field", flex_vec.idx(0).get_str()?, true); - let parent = get_spatial_parent(&calling_client, flex_vec.idx(1).get_str()?)?; + let parent = get_spatial_parent_flex(&calling_client, flex_vec.idx(1).get_str()?)?; let transform = Mat4::from_rotation_translation( flex_to_quat!(flex_vec.idx(3)) .ok_or_else(|| anyhow!("Rotation not found"))? @@ -353,7 +353,7 @@ pub fn create_cylinder_field_flex( let root = flexbuffers::Reader::get_root(data)?; let flex_vec = root.get_vector()?; let node = Node::create("/field", flex_vec.idx(0).get_str()?, true); - let parent = get_spatial_parent(&calling_client, flex_vec.idx(1).get_str()?)?; + let parent = get_spatial_parent_flex(&calling_client, flex_vec.idx(1).get_str()?)?; let transform = Mat4::from_rotation_translation( flex_to_quat!(flex_vec.idx(3)) .ok_or_else(|| anyhow!("Rotation not found"))? @@ -378,7 +378,7 @@ pub fn create_sphere_field_flex( let root = flexbuffers::Reader::get_root(data)?; let flex_vec = root.get_vector()?; let node = Node::create("/field", flex_vec.idx(0).get_str()?, true); - let parent = get_spatial_parent(&calling_client, flex_vec.idx(1).get_str()?)?; + let parent = get_spatial_parent_flex(&calling_client, flex_vec.idx(1).get_str()?)?; let transform = Mat4::from_translation( flex_to_vec3!(flex_vec.idx(2)) .ok_or_else(|| anyhow!("Position not found"))? diff --git a/src/nodes/spatial.rs b/src/nodes/spatial.rs index 7352cae..ea53ec6 100644 --- a/src/nodes/spatial.rs +++ b/src/nodes/spatial.rs @@ -151,7 +151,10 @@ impl Spatial { } } -pub fn get_spatial_parent(calling_client: &Rc, node_path: &str) -> Result> { +pub fn get_spatial_parent_flex( + calling_client: &Rc, + node_path: &str, +) -> Result> { Ok(calling_client .scenegraph .get_node(node_path) @@ -161,6 +164,19 @@ pub fn get_spatial_parent(calling_client: &Rc, node_path: &str) -> Resul .ok_or_else(|| anyhow!("Spatial parent node is not a spatial"))? .clone()) } +pub fn get_transform_pose_flex( + translation: &flexbuffers::Reader, + rotation: &flexbuffers::Reader, +) -> Result { + Ok(Mat4::from_rotation_translation( + flex_to_quat!(rotation) + .ok_or_else(|| anyhow!("Rotation not found"))? + .into(), + flex_to_vec3!(translation) + .ok_or_else(|| anyhow!("Position not found"))? + .into(), + )) +} pub fn create_interface(client: &Rc) { let node = Node::create("", "spatial", false); @@ -172,7 +188,7 @@ pub fn create_spatial_flex(_node: &Node, calling_client: Rc, data: &[u8] let root = flexbuffers::Reader::get_root(data)?; let flex_vec = root.get_vector()?; let spatial = Node::create("/spatial/spatial", flex_vec.idx(0).get_str()?, true); - let parent = get_spatial_parent(&calling_client, flex_vec.idx(1).get_str()?)?; + let parent = get_spatial_parent_flex(&calling_client, flex_vec.idx(1).get_str()?)?; let transform = Mat4::from_scale_rotation_translation( flex_to_vec3!(flex_vec.idx(4)) .ok_or_else(|| anyhow!("Scale not found"))?