use manifest_dir_macros::directory_relative_path; use stardust_xr_fusion::{ client::Client, core::values::Color, drawable::{Line, LinePoint, Lines}, spatial::Transform }; #[tokio::main] async fn main() { let (client, event_loop) = Client::connect_with_async_loop().await.unwrap(); client.set_base_prefixes(&[directory_relative_path!("res")]); // stardust_xr_fusion::drawable::Model // pub fn create(spatial_parent: &impl SpatialAspect, transform: Transform, model: &ResourceID) -> NodeResult // let _model = Model::create( // client.get_root(), // Transform::identity(), // &ResourceID::new_namespaced( // "color_cube", // "color_cube" // ), // ).unwrap(); let thickness = 0.03; // stardust_xr_fusion::drawable::Lines // pub fn create(spatial_parent: &impl SpatialAspect, transform: Transform, lines: &[Line]) -> NodeResult let back_points = vec![ LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x000000FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFF0000FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFFFF00FF), }, LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x00FF00FF), }, ]; let back_line = Line { points: back_points, cyclic: true, }; let _back_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[back_line] ).unwrap(); let front_points = vec![ LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x0000FFFF), }, LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFF00FFFF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFFFFFFFF), }, LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x00FFFFFF), }, ]; let front_line = Line { points: front_points, cyclic: true, }; let _front_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[front_line] ).unwrap(); let left_points = vec![ LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x000000FF), }, LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x0000FFFF), }, LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x00FFFFFF), }, LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x00FF00FF), }, ]; let left_line = Line { points: left_points, cyclic: true, }; let _left_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[left_line] ).unwrap(); let right_points = vec![ LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFF0000FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFF00FFFF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFFFFFFFF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFFFF00FF), }, ]; let right_line = Line { points: right_points, cyclic: true, }; let _right_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[right_line] ).unwrap(); let bottom_points = vec![ LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x000000FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFF0000FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFF00FFFF), }, LinePoint { point: mint::Vector3 { x:-1.0, y:-1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x0000FFFF), }, ]; let bottom_line = Line { points: bottom_points, cyclic: true, }; let _bottom_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[bottom_line] ).unwrap(); let top_points = vec![ LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0x00FF00FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z:-1.0, }, thickness: thickness, color: Color::from_hex(0xFFFF00FF), }, LinePoint { point: mint::Vector3 { x: 1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0xFFFFFFFF), }, LinePoint { point: mint::Vector3 { x:-1.0, y: 1.0, z: 1.0, }, thickness: thickness, color: Color::from_hex(0x00FFFFFF), }, ]; let top_line = Line { points: top_points, cyclic: true, }; let _top_lines = Lines::create( client.get_root(), Transform::from_scale( mint::Vector3 { x: 0.1, y: 0.1, z: 0.1, } ), &[top_line] ).unwrap(); tokio::select! { _ = tokio::signal::ctrl_c() => (), _ = event_loop => panic!("server crashed"), } }