feat(input): create tip input

This commit is contained in:
Nova
2022-10-14 23:57:00 -04:00
parent e0be6ecea9
commit a0e05b11af
2 changed files with 49 additions and 2 deletions

View File

@@ -16,7 +16,14 @@ use std::sync::Arc;
pub struct Tip {
pub radius: f32,
}
impl Tip {
fn set_radius(node: &Node, _calling_client: Arc<Client>, data: &[u8]) -> Result<()> {
if let InputType::Tip(tip) = &mut *node.input_method.get().unwrap().specialization.lock() {
tip.radius = deserialize(data)?;
}
Ok(())
}
}
impl InputSpecialization for Tip {
fn distance(&self, space: &Arc<Spatial>, field: &Field) -> f32 {
field.distance(space, vec3a(0.0, 0.0, 0.0))
@@ -33,5 +40,31 @@ impl InputSpecialization for Tip {
radius: self.radius,
})
}
}
}
pub fn create_tip_flex(_node: &Node, calling_client: Arc<Client>, data: &[u8]) -> Result<()> {
#[derive(Deserialize)]
struct CreateTipInfo<'a> {
name: &'a str,
parent_path: &'a str,
transform: Transform,
radius: f32,
datamap: Option<Vec<u8>>,
}
let info: CreateTipInfo = deserialize(data)?;
let node = Node::create(&calling_client, "/input/method/tip", info.name, true);
let parent = get_spatial_parent_flex(&calling_client, info.parent_path)?;
let transform = parse_transform(info.transform, true, true, false)?;
let node = node.add_to_scenegraph();
Spatial::add_to(&node, Some(parent), transform)?;
InputMethod::add_to(
&node,
InputType::Tip(Tip {
radius: info.radius,
}),
info.datamap.and_then(|datamap| Datamap::new(datamap).ok()),
)?;
node.add_local_signal("setRadius", Tip::set_radius);
Ok(())
}