feat(objects/controller): color signifier

This commit is contained in:
Nova
2024-06-27 17:06:27 -04:00
parent e5d0906d73
commit 0b9f79158c

View File

@@ -13,9 +13,11 @@ use serde::{Deserialize, Serialize};
use stardust_xr::values::Datamap; use stardust_xr::values::Datamap;
use std::sync::Arc; use std::sync::Arc;
use stereokit_rust::{ use stereokit_rust::{
material::Material,
model::Model, model::Model,
sk::MainThreadToken, sk::MainThreadToken,
system::{Handed, Input}, system::{Handed, Input},
util::Color128,
}; };
#[derive(Default, Deserialize, Serialize)] #[derive(Default, Deserialize, Serialize)]
@@ -30,6 +32,7 @@ pub struct SkController {
input: Arc<InputMethod>, input: Arc<InputMethod>,
handed: Handed, handed: Handed,
model: Model, model: Model,
material: Material,
capture: Option<Arc<InputHandler>>, capture: Option<Arc<InputHandler>>,
datamap: ControllerDatamap, datamap: ControllerDatamap,
} }
@@ -37,7 +40,15 @@ impl SkController {
pub fn new(handed: Handed) -> Result<Self> { pub fn new(handed: Handed) -> Result<Self> {
let _node = Node::generate(&INTERNAL_CLIENT, false).add_to_scenegraph()?; let _node = Node::generate(&INTERNAL_CLIENT, false).add_to_scenegraph()?;
Spatial::add_to(&_node, None, Mat4::IDENTITY, false); Spatial::add_to(&_node, None, Mat4::IDENTITY, false);
let model = Model::from_memory("cursor.glb", include_bytes!("cursor.glb"), None)?; let model = Model::copy(Model::from_memory(
"cursor.glb",
include_bytes!("cursor.glb"),
None,
)?);
let model_nodes = model.get_nodes();
let mut model_node = model_nodes.visuals().next().unwrap();
let material = Material::copy(model_node.get_material().unwrap());
model_node.material(&material);
let tip = InputDataType::Tip(Tip::default()); let tip = InputDataType::Tip(Tip::default());
let input = InputMethod::add_to( let input = InputMethod::add_to(
&_node, &_node,
@@ -49,6 +60,7 @@ impl SkController {
input, input,
handed, handed,
model, model,
material,
capture: None, capture: None,
datamap: Default::default(), datamap: Default::default(),
}) })
@@ -62,6 +74,11 @@ impl SkController {
controller.aim.orientation.into(), controller.aim.orientation.into(),
controller.aim.position.into(), controller.aim.position.into(),
); );
self.material.color_tint(if self.capture.is_none() {
Color128::new_rgb(1.0, 1.0, 1.0)
} else {
Color128::new_rgb(0.0, 1.0, 0.75)
});
self.model.draw( self.model.draw(
token, token,
world_transform * Mat4::from_scale(Vec3::ONE * 0.02), world_transform * Mat4::from_scale(Vec3::ONE * 0.02),