diff --git a/examples/xr.rs b/examples/xr.rs index 05bd81b..faefc7a 100644 --- a/examples/xr.rs +++ b/examples/xr.rs @@ -6,7 +6,7 @@ use bevy_oxr::graphics::XrAppInfo; use bevy_oxr::input::XrInput; use bevy_oxr::resources::{XrFrameState, XrSession}; -use bevy_oxr::xr_init::xr_only; +use bevy_oxr::xr_init::{xr_only, EndXrSession, StartXrSession}; use bevy_oxr::xr_input::actions::XrActionSets; use bevy_oxr::xr_input::hands::common::HandInputDebugRenderer; use bevy_oxr::xr_input::interactions::{ @@ -43,10 +43,22 @@ fn main() { .add_plugins(HandInputDebugRenderer) .add_systems( Update, - draw_interaction_gizmos.after(update_interactable_states).run_if(xr_only()), + draw_interaction_gizmos + .after(update_interactable_states) + .run_if(xr_only()), + ) + .add_systems( + Update, + draw_socket_gizmos + .after(update_interactable_states) + .run_if(xr_only()), + ) + .add_systems( + Update, + interactions + .before(update_interactable_states) + .run_if(xr_only()), ) - .add_systems(Update, draw_socket_gizmos.after(update_interactable_states).run_if(xr_only())) - .add_systems(Update, interactions.before(update_interactable_states).run_if(xr_only())) .add_systems( Update, socket_interactions.before(update_interactable_states), @@ -54,10 +66,24 @@ fn main() { .add_systems(Update, prototype_interaction_input.run_if(xr_only())) .add_systems(Update, update_interactable_states) .add_systems(Update, update_grabbables.after(update_interactable_states)) + .add_systems(Update, start_stop_session) .add_event::() .run(); } +fn start_stop_session( + keyboard: Res>, + mut start: EventWriter, + mut stop: EventWriter, +) { + if keyboard.just_pressed(KeyCode::KeyS) { + start.send_default(); + } + if keyboard.just_pressed(KeyCode::KeyE) { + stop.send_default(); + } +} + /// set up a simple 3D scene fn setup( mut commands: Commands, diff --git a/src/lib.rs b/src/lib.rs index 0f6c8fb..2066452 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ pub mod resource_macros; pub mod resources; pub mod xr_init; pub mod xr_input; +pub mod prelude; use std::sync::atomic::AtomicBool; diff --git a/src/prelude.rs b/src/prelude.rs new file mode 100644 index 0000000..dd68f02 --- /dev/null +++ b/src/prelude.rs @@ -0,0 +1,15 @@ +use bevy::ecs::schedule::{IntoSystemConfigs, SystemConfigs}; + +use crate::xr_init::xr_only; +pub use crate::xr_input::{QuatConv, Vec2Conv, Vec3Conv}; +pub use crate::xr_init::schedules::XrSetup; + +pub trait XrSystems { + fn xr_only(self) -> SystemConfigs; +} + +impl, M> XrSystems for T { + fn xr_only(self) -> SystemConfigs { + self.into_configs().run_if(xr_only()) + } +}