refactor: compiles!

Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
Schmarni
2024-12-16 19:17:02 +01:00
parent 93d074d4b0
commit 4e706f6c55
5 changed files with 269 additions and 267 deletions

View File

@@ -113,7 +113,7 @@ impl Client {
drawable::create_interface(&client)?; drawable::create_interface(&client)?;
audio::create_interface(&client)?; audio::create_interface(&client)?;
input::create_interface(&client)?; input::create_interface(&client)?;
items::camera::create_interface(&client)?; // items::camera::create_interface(&client)?;
items::panel::create_interface(&client)?; items::panel::create_interface(&client)?;
let _ = client.state.set(state.apply_to(&client)); let _ = client.state.set(state.apply_to(&client));

View File

@@ -4,7 +4,6 @@ mod core;
mod nodes; mod nodes;
mod objects; mod objects;
pub mod oxr_render_plugin; pub mod oxr_render_plugin;
pub mod oxr_sync_actionset;
mod session; mod session;
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
mod wayland; mod wayland;
@@ -17,6 +16,7 @@ use bevy::app::{App, PluginGroup, Startup, Update};
use bevy::asset::{AssetServer, Handle}; use bevy::asset::{AssetServer, Handle};
use bevy::core_pipeline::Skybox; use bevy::core_pipeline::Skybox;
use bevy::image::Image; use bevy::image::Image;
use bevy::log::LogPlugin;
use bevy::pbr::StandardMaterial; use bevy::pbr::StandardMaterial;
use bevy::prelude::{ use bevy::prelude::{
on_event, resource_added, Camera3d, ClearColor, Commands, Entity, EventReader, on_event, resource_added, Camera3d, ClearColor, Commands, Entity, EventReader,
@@ -24,6 +24,8 @@ use bevy::prelude::{
}; };
use bevy::render::pipelined_rendering::PipelinedRenderingPlugin; use bevy::render::pipelined_rendering::PipelinedRenderingPlugin;
use bevy::time::Time; use bevy::time::Time;
use bevy::utils::default;
use bevy::winit::{WakeUp, WinitPlugin};
use bevy::DefaultPlugins; use bevy::DefaultPlugins;
use bevy_mod_openxr::action_set_syncing::{OxrActionSyncingPlugin, OxrSyncActionSet}; use bevy_mod_openxr::action_set_syncing::{OxrActionSyncingPlugin, OxrSyncActionSet};
use bevy_mod_openxr::exts::OxrExtensions; use bevy_mod_openxr::exts::OxrExtensions;
@@ -217,7 +219,13 @@ fn stereokit_loop(
let mut bevy_app = App::new(); let mut bevy_app = App::new();
let base = (DefaultPlugins) let base = (DefaultPlugins)
.build() .build()
.disable::<PipelinedRenderingPlugin>(); .disable::<PipelinedRenderingPlugin>()
.disable::<LogPlugin>()
.set({
let mut plugin = WinitPlugin::<WakeUp>::default();
plugin.run_on_any_thread = true;
plugin
});
if args.flatscreen { if args.flatscreen {
bevy_app.add_plugins(base); bevy_app.add_plugins(base);
} else { } else {
@@ -245,7 +253,7 @@ fn stereokit_loop(
}) })
.disable::<OxrRenderPlugin>() .disable::<OxrRenderPlugin>()
.disable::<OxrActionSyncingPlugin>() .disable::<OxrActionSyncingPlugin>()
.add_after::<XrSessionPlugin>(StardustOxrRenderPlugin), .add_after::<OxrInitPlugin>(StardustOxrRenderPlugin),
); );
if let Some(priority) = args.overlay_priority { if let Some(priority) = args.overlay_priority {
bevy_app.insert_resource(OxrOverlaySettings { bevy_app.insert_resource(OxrOverlaySettings {

View File

@@ -1,3 +1,4 @@
use super::{MaterialParameter, ModelAspect, ModelPartAspect, MODEL_PART_ASPECT_ALIAS_INFO};
use crate::bail; use crate::bail;
use crate::bevy_plugin::MainWorldEntity; use crate::bevy_plugin::MainWorldEntity;
use crate::core::client::Client; use crate::core::client::Client;
@@ -6,10 +7,9 @@ use crate::core::registry::Registry;
use crate::core::resource::get_resource_file; use crate::core::resource::get_resource_file;
use crate::nodes::alias::{Alias, AliasList}; use crate::nodes::alias::{Alias, AliasList};
use crate::nodes::spatial::Spatial; use crate::nodes::spatial::Spatial;
use crate::nodes::{Aspect, Node}; use crate::nodes::Node;
use crate::DefaultMaterial; use crate::DefaultMaterial;
use bevy::app::{Plugin, PostUpdate}; use bevy::app::{Plugin, PostUpdate};
use bevy::asset::Handle;
use bevy::asset::{AssetServer, Assets}; use bevy::asset::{AssetServer, Assets};
use bevy::color::{Alpha, Color, LinearRgba, Srgba}; use bevy::color::{Alpha, Color, LinearRgba, Srgba};
use bevy::core::Name; use bevy::core::Name;
@@ -230,10 +230,6 @@ fn update_model_parts(
} }
mat.0 = mats.add(new_material); mat.0 = mats.add(new_material);
} }
let shared_material =
MATERIAL_REGISTRY.add_or_get(Arc::new(MaterialWrapper(new_material)));
part.material(&shared_material.0);
} }
} }
} }
@@ -303,7 +299,6 @@ fn create_model_parts_for_loaded_models(
pending_material_replacement: Mutex::new(None), pending_material_replacement: Mutex::new(None),
aliases: AliasList::default(), aliases: AliasList::default(),
}); });
<ModelPart as ModelPartAspect>::add_node_members(&node);
node.add_aspect_raw(model_part.clone()); node.add_aspect_raw(model_part.clone());
parts.push(model_part.clone()); parts.push(model_part.clone());
} }

View File

@@ -9,6 +9,7 @@ use crate::{
Node, OwnedNode, Node, OwnedNode,
}, },
}; };
use bevy::input::keyboard::Key;
use color_eyre::eyre::Result; use color_eyre::eyre::Result;
use glam::{vec3, Mat4, Vec3}; use glam::{vec3, Mat4, Vec3};
use mint::Vector2; use mint::Vector2;
@@ -19,11 +20,7 @@ use stardust_xr::{
values::Datamap, values::Datamap,
}; };
use std::sync::Arc; use std::sync::Arc;
use stereokit_rust::system::{Input, Key}; use zbus::Connection;
use tokio::task::JoinSet;
use tokio::time::{timeout, Duration};
use xkbcommon_rs::{xkb_keymap::CompileFlags, Context, Keymap, KeymapFormat};
use zbus::{names::OwnedInterfaceName, Connection};
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
struct MouseEvent { struct MouseEvent {
@@ -78,13 +75,13 @@ impl MousePointer {
Datamap::from_typed(MouseEvent::default())?, Datamap::from_typed(MouseEvent::default())?,
)?; )?;
let context = Context::new(0).unwrap(); // let context = Context::new(0).unwrap();
let keymap = KEYMAPS.lock().insert( // let keymap = KEYMAPS.lock().insert(
Keymap::new_from_names(context, None, CompileFlags::NO_FLAGS) // Keymap::new_from_names(context, None, CompileFlags::NO_FLAGS)
.unwrap() // .unwrap()
.get_as_string(KeymapFormat::TextV1) // .get_as_string(KeymapFormat::TextV1)
.unwrap(), // .unwrap(),
); // );
Ok(MousePointer { Ok(MousePointer {
node, node,
@@ -92,60 +89,60 @@ impl MousePointer {
pointer, pointer,
capture_manager: CaptureManager::default(), capture_manager: CaptureManager::default(),
mouse_datamap: Default::default(), mouse_datamap: Default::default(),
keymap, keymap: DefaultKey::default(),
}) })
} }
pub fn update(&mut self, dbus_connection: &Connection, object_registry: &ObjectRegistry) { // pub fn update(&mut self, dbus_connection: &Connection, object_registry: &ObjectRegistry) {
let mouse = Input::get_mouse(); // let mouse = Input::get_mouse();
//
// let ray = mouse.get_ray();
// self.spatial.set_local_transform(
// Mat4::look_to_rh(
// Vec3::from(ray.position),
// Vec3::from(ray.direction),
// vec3(0.0, 1.0, 0.0),
// )
// .inverse(),
// );
// {
// // Set pointer input datamap
// self.mouse_datamap = MouseEvent {
// select: Input::key(Key::MouseLeft).is_active() as u32 as f32,
// middle: Input::key(Key::MouseCenter).is_active() as u32 as f32,
// context: Input::key(Key::MouseRight).is_active() as u32 as f32,
// grab: Input::key(Key::MouseBack).is_active() as u32 as f32,
// scroll_continuous: [0.0, mouse.scroll_change / 120.0].into(),
// scroll_discrete: [0.0, mouse.scroll_change / 120.0].into(),
// raw_input_events: vec![],
// };
// *self.pointer.datamap.lock() = Datamap::from_typed(&self.mouse_datamap).unwrap();
// }
// self.target_pointer_input();
// self.send_keyboard_input(dbus_connection, object_registry);
let ray = mouse.get_ray();
self.spatial.set_local_transform(
Mat4::look_to_rh(
Vec3::from(ray.position),
Vec3::from(ray.direction),
vec3(0.0, 1.0, 0.0),
)
.inverse(),
);
{
// Set pointer input datamap
self.mouse_datamap = MouseEvent {
select: Input::key(Key::MouseLeft).is_active() as u32 as f32,
middle: Input::key(Key::MouseCenter).is_active() as u32 as f32,
context: Input::key(Key::MouseRight).is_active() as u32 as f32,
grab: Input::key(Key::MouseBack).is_active() as u32 as f32,
scroll_continuous: [0.0, mouse.scroll_change / 120.0].into(),
scroll_discrete: [0.0, mouse.scroll_change / 120.0].into(),
raw_input_events: vec![],
};
*self.pointer.datamap.lock() = Datamap::from_typed(&self.mouse_datamap).unwrap();
}
self.target_pointer_input();
self.send_keyboard_input(dbus_connection, object_registry);
}
fn target_pointer_input(&mut self) { fn target_pointer_input(&mut self) {
let distance_calculator: DistanceCalculator = |space, data, field| { // let distance_calculator: DistanceCalculator = |space, data, field| {
let result = field.ray_march(Ray { // let result = field.ray_march(Ray {
origin: vec3(0.0, 0.0, 0.0), // origin: vec3(0.0, 0.0, 0.0),
direction: vec3(0.0, 0.0, -1.0), // direction: vec3(0.0, 0.0, -1.0),
space: space.clone(), // space: space.clone(),
}); // });
let valid = // let valid =
result.deepest_point_distance > 0.0 && result.min_distance.is_sign_negative(); // result.deepest_point_distance > 0.0 && result.min_distance.is_sign_negative();
valid.then_some(result.deepest_point_distance) // valid.then_some(result.deepest_point_distance)
}; // };
//
self.capture_manager.update_capture(&self.pointer); // self.capture_manager.update_capture(&self.pointer);
self.capture_manager // self.capture_manager
.set_new_capture(&self.pointer, distance_calculator); // .set_new_capture(&self.pointer, distance_calculator);
self.capture_manager.apply_capture(&self.pointer); // self.capture_manager.apply_capture(&self.pointer);
//
if self.capture_manager.capture.is_some() { // if self.capture_manager.capture.is_some() {
return; // return;
} // }
//
let sorted_handlers = get_sorted_handlers(&self.pointer, distance_calculator); // let sorted_handlers = get_sorted_handlers(&self.pointer, distance_calculator);
self.pointer.set_handler_order(sorted_handlers.iter()); // self.pointer.set_handler_order(sorted_handlers.iter());
} }
pub fn send_keyboard_input( pub fn send_keyboard_input(
@@ -153,193 +150,194 @@ impl MousePointer {
dbus_connection: &Connection, dbus_connection: &Connection,
object_registry: &ObjectRegistry, object_registry: &ObjectRegistry,
) { ) {
let keyboard_handlers = object_registry.get_objects("org.stardustxr.XKBv1"); // let keyboard_handlers = object_registry.get_objects("org.stardustxr.XKBv1");
//
// Spawn async task to handle keyboard input // // Spawn async task to handle keyboard input
tokio::spawn({ // tokio::spawn({
let keyboard_handlers = keyboard_handlers.clone(); // let keyboard_handlers = keyboard_handlers.clone();
let spatial = self.spatial.clone(); // let spatial = self.spatial.clone();
let keymap_id = self.keymap.data().as_ffi(); // let keymap_id = self.keymap.data().as_ffi();
let dbus_connection = dbus_connection.clone(); // let dbus_connection = dbus_connection.clone();
//
async move { // async move {
let mut closest_handler = None; // let mut closest_handler = None;
let mut closest_distance = f32::MAX; // let mut closest_distance = f32::MAX;
//
let mut join_set = JoinSet::new(); // let mut join_set = JoinSet::new();
for handler in &keyboard_handlers { // for handler in &keyboard_handlers {
let handler = handler.clone(); // let handler = handler.clone();
let dbus_connection = dbus_connection.clone(); // let dbus_connection = dbus_connection.clone();
join_set.spawn(async move { // join_set.spawn(async move {
timeout(Duration::from_millis(1), async { // timeout(Duration::from_millis(1), async {
let field_ref = handler // let field_ref = handler
.to_typed_proxy::<FieldRefProxy>(&dbus_connection) // .to_typed_proxy::<FieldRefProxy>(&dbus_connection)
.await // .await
.ok()?; // .ok()?;
let uid = field_ref.uid().await.ok()?; // let uid = field_ref.uid().await.ok()?;
Some((handler, uid)) // Some((handler, uid))
}) // })
.await // .await
.ok() // .ok()
.flatten() // .flatten()
}); // });
} // }
while let Some(Ok(Some((handler, field_ref_id)))) = join_set.join_next().await { // while let Some(Ok(Some((handler, field_ref_id)))) = join_set.join_next().await {
let exported_fields = EXPORTED_FIELDS.lock(); // let exported_fields = EXPORTED_FIELDS.lock();
let Some(field_ref_node) = exported_fields.get(&field_ref_id) else { // let Some(field_ref_node) = exported_fields.get(&field_ref_id) else {
println!("didn't find a thing :("); // println!("didn't find a thing :(");
continue; // continue;
}; // };
// println!("still sendin stuff :)"); // // println!("still sendin stuff :)");
let Ok(field_ref) = field_ref_node.get_aspect::<Field>() else { // let Ok(field_ref) = field_ref_node.get_aspect::<Field>() else {
continue; // continue;
}; // };
drop(exported_fields); // drop(exported_fields);
//
let result = field_ref.ray_march(Ray { // let result = field_ref.ray_march(Ray {
origin: vec3(0.0, 0.0, 0.0), // origin: vec3(0.0, 0.0, 0.0),
direction: vec3(0.0, 0.0, -1.0), // direction: vec3(0.0, 0.0, -1.0),
space: spatial.clone(), // space: spatial.clone(),
}); // });
//
if result.deepest_point_distance > 0.0 // if result.deepest_point_distance > 0.0
&& result.min_distance < 0.05 // && result.min_distance < 0.05
&& result.deepest_point_distance < closest_distance // && result.deepest_point_distance < closest_distance
{ // {
closest_distance = result.deepest_point_distance; // closest_distance = result.deepest_point_distance;
closest_handler = Some(handler); // closest_handler = Some(handler);
} // }
} // }
//
let Some(handler) = closest_handler else { // let Some(handler) = closest_handler else {
return; // return;
}; // };
let Ok(keyboard_handler) = handler // let Ok(keyboard_handler) = handler
.to_typed_proxy::<KeyboardHandlerProxy>(&dbus_connection) // .to_typed_proxy::<KeyboardHandlerProxy>(&dbus_connection)
.await // .await
else { // else {
return; // return;
}; // };
//
// Register keymap first // // Register keymap first
let _ = keyboard_handler.keymap(keymap_id).await; // let _ = keyboard_handler.keymap(keymap_id).await;
//
// Send key states // // Send key states
for i in 8_u32..254 { // for i in 8_u32..254 {
let key = unsafe { std::mem::transmute::<u32, stereokit_rust::system::Key>(i) }; // let key = unsafe { std::mem::transmute::<u32, stereokit_rust::system::Key>(i) };
let Some(mapped_key) = map_key(key) else { // let Some(mapped_key) = map_key(key) else {
continue; // continue;
}; // };
let input_state = Input::key(key); // let input_state = Input::key(key);
if input_state.is_just_active() { // if input_state.is_just_active() {
let _ = keyboard_handler.key_state(mapped_key, true).await; // let _ = keyboard_handler.key_state(mapped_key, true).await;
} else if input_state.is_just_inactive() { // } else if input_state.is_just_inactive() {
let _ = keyboard_handler.key_state(mapped_key, false).await; // let _ = keyboard_handler.key_state(mapped_key, false).await;
} // }
} // }
} // }
}); // });
} }
} }
fn map_key(key: Key) -> Option<u32> { fn map_key(key: ()) -> Option<u32> {
match key { None
Key::Backspace => Some(input_event_codes::KEY_BACKSPACE!()), // match key {
Key::Tab => Some(input_event_codes::KEY_TAB!()), // Key::Backspace => Some(input_event_codes::KEY_BACKSPACE!()),
Key::Return => Some(input_event_codes::KEY_ENTER!()), // Key::Tab => Some(input_event_codes::KEY_TAB!()),
Key::Shift => Some(input_event_codes::KEY_LEFTSHIFT!()), // Key::Enter => Some(input_event_codes::KEY_ENTER!()),
Key::Ctrl => Some(input_event_codes::KEY_LEFTCTRL!()), // Key::Shift => Some(input_event_codes::KEY_LEFTSHIFT!()),
Key::Alt => Some(input_event_codes::KEY_LEFTALT!()), // Key::Control => Some(input_event_codes::KEY_LEFTCTRL!()),
Key::CapsLock => Some(input_event_codes::KEY_CAPSLOCK!()), // Key::Alt => Some(input_event_codes::KEY_LEFTALT!()),
Key::Esc => Some(input_event_codes::KEY_ESC!()), // Key::CapsLock => Some(input_event_codes::KEY_CAPSLOCK!()),
Key::Space => Some(input_event_codes::KEY_SPACE!()), // Key::Escape => Some(input_event_codes::KEY_ESC!()),
Key::End => Some(input_event_codes::KEY_END!()), // Key::Space => Some(input_event_codes::KEY_SPACE!()),
Key::Home => Some(input_event_codes::KEY_HOME!()), // Key::End => Some(input_event_codes::KEY_END!()),
Key::Left => Some(input_event_codes::KEY_LEFT!()), // Key::Home => Some(input_event_codes::KEY_HOME!()),
Key::Right => Some(input_event_codes::KEY_RIGHT!()), // Key::ArrowLeft => Some(input_event_codes::KEY_LEFT!()),
Key::Up => Some(input_event_codes::KEY_UP!()), // Key::ArrowRight => Some(input_event_codes::KEY_RIGHT!()),
Key::Down => Some(input_event_codes::KEY_DOWN!()), // Key::ArrowUp => Some(input_event_codes::KEY_UP!()),
Key::PageUp => Some(input_event_codes::KEY_PAGEUP!()), // Key::ArrowDown => Some(input_event_codes::KEY_DOWN!()),
Key::PageDown => Some(input_event_codes::KEY_PAGEDOWN!()), // Key::PageUp => Some(input_event_codes::KEY_PAGEUP!()),
Key::PrintScreen => Some(input_event_codes::KEY_PRINT!()), // Key::PageDown => Some(input_event_codes::KEY_PAGEDOWN!()),
Key::KeyInsert => Some(input_event_codes::KEY_INSERT!()), // Key::PrintScreen => Some(input_event_codes::KEY_PRINT!()),
Key::Del => Some(input_event_codes::KEY_DELETE!()), // Key::Insert => Some(input_event_codes::KEY_INSERT!()),
Key::Key0 => Some(input_event_codes::KEY_0!()), // Key::Delete => Some(input_event_codes::KEY_DELETE!()),
Key::Key1 => Some(input_event_codes::KEY_1!()), // Key::Num => Some(input_event_codes::KEY_0!()),
Key::Key2 => Some(input_event_codes::KEY_2!()), // Key::Key1 => Some(input_event_codes::KEY_1!()),
Key::Key3 => Some(input_event_codes::KEY_3!()), // Key::Key2 => Some(input_event_codes::KEY_2!()),
Key::Key4 => Some(input_event_codes::KEY_4!()), // Key::Key3 => Some(input_event_codes::KEY_3!()),
Key::Key5 => Some(input_event_codes::KEY_5!()), // Key::Key4 => Some(input_event_codes::KEY_4!()),
Key::Key6 => Some(input_event_codes::KEY_6!()), // Key::Key5 => Some(input_event_codes::KEY_5!()),
Key::Key7 => Some(input_event_codes::KEY_7!()), // Key::Key6 => Some(input_event_codes::KEY_6!()),
Key::Key8 => Some(input_event_codes::KEY_8!()), // Key::Key7 => Some(input_event_codes::KEY_7!()),
Key::Key9 => Some(input_event_codes::KEY_9!()), // Key::Key8 => Some(input_event_codes::KEY_8!()),
Key::A => Some(input_event_codes::KEY_A!()), // Key::Key9 => Some(input_event_codes::KEY_9!()),
Key::B => Some(input_event_codes::KEY_B!()), // Key::A => Some(input_event_codes::KEY_A!()),
Key::C => Some(input_event_codes::KEY_C!()), // Key::B => Some(input_event_codes::KEY_B!()),
Key::D => Some(input_event_codes::KEY_D!()), // Key::C => Some(input_event_codes::KEY_C!()),
Key::E => Some(input_event_codes::KEY_E!()), // Key::D => Some(input_event_codes::KEY_D!()),
Key::F => Some(input_event_codes::KEY_F!()), // Key::E => Some(input_event_codes::KEY_E!()),
Key::G => Some(input_event_codes::KEY_G!()), // Key::F => Some(input_event_codes::KEY_F!()),
Key::H => Some(input_event_codes::KEY_H!()), // Key::G => Some(input_event_codes::KEY_G!()),
Key::I => Some(input_event_codes::KEY_I!()), // Key::H => Some(input_event_codes::KEY_H!()),
Key::J => Some(input_event_codes::KEY_J!()), // Key::I => Some(input_event_codes::KEY_I!()),
Key::K => Some(input_event_codes::KEY_K!()), // Key::J => Some(input_event_codes::KEY_J!()),
Key::L => Some(input_event_codes::KEY_L!()), // Key::K => Some(input_event_codes::KEY_K!()),
Key::M => Some(input_event_codes::KEY_M!()), // Key::L => Some(input_event_codes::KEY_L!()),
Key::N => Some(input_event_codes::KEY_N!()), // Key::M => Some(input_event_codes::KEY_M!()),
Key::O => Some(input_event_codes::KEY_O!()), // Key::N => Some(input_event_codes::KEY_N!()),
Key::P => Some(input_event_codes::KEY_P!()), // Key::O => Some(input_event_codes::KEY_O!()),
Key::Q => Some(input_event_codes::KEY_Q!()), // Key::P => Some(input_event_codes::KEY_P!()),
Key::R => Some(input_event_codes::KEY_R!()), // Key::Q => Some(input_event_codes::KEY_Q!()),
Key::S => Some(input_event_codes::KEY_S!()), // Key::R => Some(input_event_codes::KEY_R!()),
Key::T => Some(input_event_codes::KEY_T!()), // Key::S => Some(input_event_codes::KEY_S!()),
Key::U => Some(input_event_codes::KEY_U!()), // Key::T => Some(input_event_codes::KEY_T!()),
Key::V => Some(input_event_codes::KEY_V!()), // Key::U => Some(input_event_codes::KEY_U!()),
Key::W => Some(input_event_codes::KEY_W!()), // Key::V => Some(input_event_codes::KEY_V!()),
Key::X => Some(input_event_codes::KEY_X!()), // Key::W => Some(input_event_codes::KEY_W!()),
Key::Y => Some(input_event_codes::KEY_Y!()), // Key::X => Some(input_event_codes::KEY_X!()),
Key::Z => Some(input_event_codes::KEY_Z!()), // Key::Y => Some(input_event_codes::KEY_Y!()),
Key::Numpad0 => Some(input_event_codes::KEY_NUMERIC_0!()), // Key::Z => Some(input_event_codes::KEY_Z!()),
Key::Numpad1 => Some(input_event_codes::KEY_NUMERIC_1!()), // Key::Numpad0 => Some(input_event_codes::KEY_NUMERIC_0!()),
Key::Numpad2 => Some(input_event_codes::KEY_NUMERIC_2!()), // Key::Numpad1 => Some(input_event_codes::KEY_NUMERIC_1!()),
Key::Numpad3 => Some(input_event_codes::KEY_NUMERIC_3!()), // Key::Numpad2 => Some(input_event_codes::KEY_NUMERIC_2!()),
Key::Numpad4 => Some(input_event_codes::KEY_NUMERIC_4!()), // Key::Numpad3 => Some(input_event_codes::KEY_NUMERIC_3!()),
Key::Numpad5 => Some(input_event_codes::KEY_NUMERIC_5!()), // Key::Numpad4 => Some(input_event_codes::KEY_NUMERIC_4!()),
Key::Numpad6 => Some(input_event_codes::KEY_NUMERIC_6!()), // Key::Numpad5 => Some(input_event_codes::KEY_NUMERIC_5!()),
Key::Numpad7 => Some(input_event_codes::KEY_NUMERIC_7!()), // Key::Numpad6 => Some(input_event_codes::KEY_NUMERIC_6!()),
Key::Numpad8 => Some(input_event_codes::KEY_NUMERIC_8!()), // Key::Numpad7 => Some(input_event_codes::KEY_NUMERIC_7!()),
Key::Numpad9 => Some(input_event_codes::KEY_NUMERIC_9!()), // Key::Numpad8 => Some(input_event_codes::KEY_NUMERIC_8!()),
Key::F1 => Some(input_event_codes::KEY_F1!()), // Key::Numpad9 => Some(input_event_codes::KEY_NUMERIC_9!()),
Key::F2 => Some(input_event_codes::KEY_F2!()), // Key::F1 => Some(input_event_codes::KEY_F1!()),
Key::F3 => Some(input_event_codes::KEY_F3!()), // Key::F2 => Some(input_event_codes::KEY_F2!()),
Key::F4 => Some(input_event_codes::KEY_F4!()), // Key::F3 => Some(input_event_codes::KEY_F3!()),
Key::F5 => Some(input_event_codes::KEY_F5!()), // Key::F4 => Some(input_event_codes::KEY_F4!()),
// Key::F6 => Some(input_event_codes::KEY_F6!()), // Key::F5 => Some(input_event_codes::KEY_F5!()),
// Key::F7 => Some(input_event_codes::KEY_F7!()), // // Key::F6 => Some(input_event_codes::KEY_F6!()),
// Key::F8 => Some(input_event_codes::KEY_F8!()), // // Key::F7 => Some(input_event_codes::KEY_F7!()),
Key::F9 => Some(input_event_codes::KEY_F9!()), // // Key::F8 => Some(input_event_codes::KEY_F8!()),
Key::F10 => Some(input_event_codes::KEY_F10!()), // Key::F9 => Some(input_event_codes::KEY_F9!()),
Key::F11 => Some(input_event_codes::KEY_F11!()), // Key::F10 => Some(input_event_codes::KEY_F10!()),
Key::F12 => Some(input_event_codes::KEY_F12!()), // Key::F11 => Some(input_event_codes::KEY_F11!()),
Key::Comma => Some(input_event_codes::KEY_COMMA!()), // Key::F12 => Some(input_event_codes::KEY_F12!()),
Key::Period => Some(input_event_codes::KEY_DOT!()), // Key::Comma => Some(input_event_codes::KEY_COMMA!()),
Key::SlashFwd => Some(input_event_codes::KEY_SLASH!()), // Key::Period => Some(input_event_codes::KEY_DOT!()),
Key::SlashBack => Some(input_event_codes::KEY_BACKSLASH!()), // Key::SlashFwd => Some(input_event_codes::KEY_SLASH!()),
Key::Semicolon => Some(input_event_codes::KEY_SEMICOLON!()), // Key::SlashBack => Some(input_event_codes::KEY_BACKSLASH!()),
Key::Apostrophe => Some(input_event_codes::KEY_APOSTROPHE!()), // Key::Semicolon => Some(input_event_codes::KEY_SEMICOLON!()),
Key::BracketOpen => Some(input_event_codes::KEY_LEFTBRACE!()), // Key::Apostrophe => Some(input_event_codes::KEY_APOSTROPHE!()),
Key::BracketClose => Some(input_event_codes::KEY_RIGHTBRACE!()), // Key::BracketOpen => Some(input_event_codes::KEY_LEFTBRACE!()),
Key::Minus => Some(input_event_codes::KEY_MINUS!()), // Key::BracketClose => Some(input_event_codes::KEY_RIGHTBRACE!()),
Key::Equals => Some(input_event_codes::KEY_EQUAL!()), // Key::Minus => Some(input_event_codes::KEY_MINUS!()),
Key::Backtick => Some(input_event_codes::KEY_GRAVE!()), // Key::Equals => Some(input_event_codes::KEY_EQUAL!()),
Key::LCmd => Some(input_event_codes::KEY_LEFTMETA!()), // Key::Backtick => Some(input_event_codes::KEY_GRAVE!()),
Key::RCmd => Some(input_event_codes::KEY_RIGHTMETA!()), // Key::LCmd => Some(input_event_codes::KEY_LEFTMETA!()),
Key::Multiply => Some(input_event_codes::KEY_NUMERIC_STAR!()), // Key::RCmd => Some(input_event_codes::KEY_RIGHTMETA!()),
Key::Add => Some(input_event_codes::KEY_KPPLUS!()), // Key::Multiply => Some(input_event_codes::KEY_NUMERIC_STAR!()),
Key::Subtract => Some(input_event_codes::KEY_MINUS!()), // Key::Add => Some(input_event_codes::KEY_KPPLUS!()),
Key::Decimal => Some(input_event_codes::KEY_DOT!()), // Key::Subtract => Some(input_event_codes::KEY_MINUS!()),
Key::Divide => Some(input_event_codes::KEY_SLASH!()), // Key::Decimal => Some(input_event_codes::KEY_DOT!()),
_ => None, // Key::Divide => Some(input_event_codes::KEY_SLASH!()),
} // _ => None,
// }
} }

View File

@@ -1,4 +1,3 @@
use stereokit_rust::system::World;
use zbus::{interface, Connection, ObjectServer}; use zbus::{interface, Connection, ObjectServer};
pub struct PlaySpaceBounds; pub struct PlaySpaceBounds;
@@ -13,14 +12,16 @@ impl PlaySpaceBounds {
} }
#[interface(name = "org.stardustxr.PlaySpace")] #[interface(name = "org.stardustxr.PlaySpace")]
impl PlaySpaceBounds { impl PlaySpaceBounds {
// TODO: reimplement under bevy
#[zbus(property)] #[zbus(property)]
fn bounds(&self) -> Vec<(f64, f64)> { fn bounds(&self) -> Vec<(f64, f64)> {
let bounds = World::get_bounds_size(); // let bounds = World::get_bounds_size();
vec![ // vec![
((bounds.x).into(), (bounds.y).into()), // ((bounds.x).into(), (bounds.y).into()),
((bounds.x).into(), (-bounds.y).into()), // ((bounds.x).into(), (-bounds.y).into()),
((-bounds.x).into(), (-bounds.y).into()), // ((-bounds.x).into(), (-bounds.y).into()),
((-bounds.x).into(), (bounds.y).into()), // ((-bounds.x).into(), (bounds.y).into()),
] // ]
vec![]
} }
} }