feat: update to bevy 0.17 and use individual bevy crates
Signed-off-by: Schmarni <marnistromer@gmail.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
use std::{any::TypeId, marker::PhantomData};
|
||||
|
||||
use bevy::app::{App, Plugin};
|
||||
use bevy::math::Vec2;
|
||||
use bevy::prelude::Resource;
|
||||
use bevy_app::{App, Plugin};
|
||||
use bevy_ecs::resource::Resource;
|
||||
use bevy_math::Vec2;
|
||||
|
||||
pub struct ActionPlugin<A: Action>(PhantomData<A>);
|
||||
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
use core::panic;
|
||||
|
||||
use bevy::app::{App, Plugin};
|
||||
use bevy::core_pipeline::core_3d::Camera3d;
|
||||
use bevy::ecs::component::Component;
|
||||
use bevy::math::{Mat4, Vec3A, Vec4};
|
||||
use bevy::prelude::SystemSet;
|
||||
use bevy::reflect::std_traits::ReflectDefault;
|
||||
use bevy::reflect::Reflect;
|
||||
use bevy::render::camera::CameraProjection;
|
||||
use bevy::render::extract_component::{ExtractComponent, ExtractComponentPlugin};
|
||||
use bevy_app::{App, Plugin};
|
||||
use bevy_camera::{Camera3d, CameraProjection};
|
||||
use bevy_ecs::{component::Component, schedule::SystemSet};
|
||||
use bevy_math::{Mat4, Vec3A, Vec4};
|
||||
// use bevy::prelude::SystemSet;
|
||||
#[cfg(feature = "reflect")]
|
||||
use bevy_reflect::std_traits::ReflectDefault;
|
||||
#[cfg(feature = "reflect")]
|
||||
use bevy_reflect::Reflect;
|
||||
use bevy_render::extract_component::{ExtractComponent, ExtractComponentPlugin};
|
||||
|
||||
use crate::session::XrTracker;
|
||||
|
||||
@@ -23,8 +24,9 @@ impl Plugin for XrCameraPlugin {
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, SystemSet)]
|
||||
pub struct XrViewInit;
|
||||
|
||||
#[derive(Debug, Clone, Reflect)]
|
||||
#[reflect(Default)]
|
||||
#[derive(Debug, Clone)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
#[cfg_attr(feature = "reflect", reflect(Default))]
|
||||
pub struct XrProjection {
|
||||
pub projection_matrix: Mat4,
|
||||
pub near: f32,
|
||||
@@ -83,7 +85,7 @@ impl CameraProjection for XrProjection {
|
||||
self.projection_matrix
|
||||
}
|
||||
|
||||
fn get_clip_from_view_for_sub(&self, _sub_view: &bevy::render::camera::SubCameraView) -> Mat4 {
|
||||
fn get_clip_from_view_for_sub(&self, _sub_view: &bevy_camera::SubCameraView) -> Mat4 {
|
||||
panic!("sub view not supported for xr camera");
|
||||
}
|
||||
}
|
||||
@@ -194,11 +196,8 @@ pub fn calculate_projection(near_z: f32, fov: Fov) -> Mat4 {
|
||||
mod tests {
|
||||
use std::f32::{self, consts::PI};
|
||||
|
||||
use bevy::{
|
||||
math::{Mat4, Vec3A},
|
||||
render::camera::{CameraProjection, PerspectiveProjection},
|
||||
utils::default,
|
||||
};
|
||||
use bevy_math::{Mat4,Vec3A};
|
||||
use bevy_camera::{CameraProjection, PerspectiveProjection};
|
||||
|
||||
const TEST_VALUES: &[(f32, f32)] = &[(0.5, 100.0), (50.0, 200.0)];
|
||||
|
||||
@@ -230,7 +229,7 @@ mod tests {
|
||||
fn test_get_frustum_corners_symmetrical() {
|
||||
let control_proj = PerspectiveProjection {
|
||||
near: 0.1,
|
||||
..default()
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let projection = XrProjection {
|
||||
@@ -252,7 +251,7 @@ mod tests {
|
||||
fn test_get_frustum_corners_symmetrical_far_plane() {
|
||||
let control_proj = PerspectiveProjection {
|
||||
near: 0.1,
|
||||
..default()
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let projection = XrProjection {
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
use crate::hands::{HandBone, XrHandBoneRadius};
|
||||
use crate::spaces::XrSpaceLocationFlags;
|
||||
use bevy::color::palettes::css;
|
||||
use bevy::{prelude::*, transform::TransformSystem};
|
||||
use bevy_app::{App, Plugin, PostUpdate};
|
||||
use bevy_color::palettes::css;
|
||||
use bevy_color::Srgba;
|
||||
use bevy_ecs::schedule::IntoScheduleConfigs as _;
|
||||
use bevy_ecs::system::Query;
|
||||
use bevy_gizmos::gizmos::Gizmos;
|
||||
use bevy_math::Isometry3d;
|
||||
use bevy_transform::TransformSystems;
|
||||
use bevy_transform::components::GlobalTransform;
|
||||
|
||||
pub struct HandGizmosPlugin;
|
||||
impl Plugin for HandGizmosPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(
|
||||
PostUpdate,
|
||||
draw_hand_gizmos.after(TransformSystem::TransformPropagate),
|
||||
draw_hand_gizmos.after(TransformSystems::Propagate),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
use bevy::{
|
||||
ecs::{component::Component, entity::Entity},
|
||||
log::warn,
|
||||
math::bool,
|
||||
prelude::{Bundle, Command, Commands, Deref, DerefMut, Resource, Transform, Visibility, World},
|
||||
};
|
||||
use crate::{session::XrTracker, spaces::XrSpaceLocationFlags};
|
||||
use bevy_camera::visibility::Visibility;
|
||||
use bevy_derive::{Deref, DerefMut};
|
||||
use bevy_ecs::{bundle::Bundle, component::Component, entity::Entity, resource::Resource, system::{Command, Commands}, world::World};
|
||||
use bevy_log::warn;
|
||||
use bevy_math::bool;
|
||||
use bevy_transform::components::Transform;
|
||||
|
||||
pub const HAND_JOINT_COUNT: usize = 26;
|
||||
|
||||
pub fn spawn_hand_bones<T: Bundle>(
|
||||
|
||||
@@ -5,4 +5,3 @@ pub mod hand_debug_gizmos;
|
||||
pub mod hands;
|
||||
pub mod session;
|
||||
pub mod spaces;
|
||||
pub mod types;
|
||||
|
||||
@@ -2,30 +2,45 @@ use std::convert::identity;
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::sync::Arc;
|
||||
|
||||
use bevy::app::{AppExit, MainScheduleOrder};
|
||||
use bevy::ecs::component::HookContext;
|
||||
use bevy::ecs::schedule::ScheduleLabel;
|
||||
use bevy::ecs::world::DeferredWorld;
|
||||
use bevy::prelude::*;
|
||||
use bevy::render::extract_resource::{ExtractResource, ExtractResourcePlugin};
|
||||
use bevy::render::{Render, RenderApp, RenderSet};
|
||||
use bevy_app::{App, AppExit, MainScheduleOrder, Plugin, PostUpdate, PreUpdate};
|
||||
use bevy_camera::visibility::Visibility;
|
||||
use bevy_derive::Deref;
|
||||
use bevy_ecs::component::Component;
|
||||
use bevy_ecs::entity::Entity;
|
||||
use bevy_ecs::hierarchy::Children;
|
||||
use bevy_ecs::lifecycle::HookContext;
|
||||
use bevy_ecs::message::{Message, MessageReader, MessageWriter};
|
||||
use bevy_ecs::query::{Has, With};
|
||||
use bevy_ecs::resource::Resource;
|
||||
use bevy_ecs::schedule::common_conditions::on_message;
|
||||
use bevy_ecs::schedule::{
|
||||
ExecutorKind, IntoScheduleConfigs as _, Schedule, ScheduleLabel, SystemCondition as _, SystemSet
|
||||
};
|
||||
use bevy_ecs::system::{Local, Query, Res, ResMut};
|
||||
use bevy_ecs::world::DeferredWorld;
|
||||
use bevy_render::extract_resource::{ExtractResource, ExtractResourcePlugin};
|
||||
use bevy_render::{Render, RenderApp, RenderSystems};
|
||||
use bevy_transform::components::{GlobalTransform, Transform};
|
||||
use bevy_transform::TransformSystems;
|
||||
#[cfg(feature="reflect")]
|
||||
use bevy_reflect::Reflect;
|
||||
|
||||
/// Event sent to instruct backends to create an XR session. Only works when the [`XrState`] is [`Available`](XrState::Available).
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrCreateSessionEvent;
|
||||
/// Message sent to instruct backends to create an XR session. Only works when the [`XrState`] is [`Available`](XrState::Available).
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrCreateSessionMessage;
|
||||
|
||||
/// A schedule thats ran whenever an [`XrCreateSessionEvent`] is recieved while the [`XrState`] is [`Available`](XrState::Available)
|
||||
/// A schedule thats ran whenever an [`XrCreateSessionMessage`] is recieved while the [`XrState`] is [`Available`](XrState::Available)
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, ScheduleLabel)]
|
||||
pub struct XrSessionCreated;
|
||||
|
||||
/// Event sent after the XrSession was created.
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrSessionCreatedEvent;
|
||||
/// Message sent after the XrSession was created.
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrSessionCreatedMessage;
|
||||
|
||||
/// Event sent to instruct backends to destroy an XR session. Only works when the [`XrState`] is [`Exiting`](XrState::Exiting).
|
||||
/// If you would like to request that a running session be destroyed, send the [`XrRequestExitEvent`] instead.
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrDestroySessionEvent;
|
||||
/// Message sent to instruct backends to destroy an XR session. Only works when the [`XrState`] is [`Exiting`](XrState::Exiting).
|
||||
/// If you would like to request that a running session be destroyed, send the [`XrRequestExitMessage`] instead.
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrDestroySessionMessage;
|
||||
|
||||
/// Resource flag thats inserted into the world and extracted to the render world to inform any session resources in the render world to drop.
|
||||
#[derive(Resource, Clone, Default)]
|
||||
@@ -35,29 +50,29 @@ pub struct XrDestroySessionRender(pub Arc<AtomicBool>);
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, ScheduleLabel)]
|
||||
pub struct XrPreDestroySession;
|
||||
|
||||
/// Event sent to instruct backends to begin an XR session. Only works when the [`XrState`] is [`Ready`](XrState::Ready).
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrBeginSessionEvent;
|
||||
/// Message sent to instruct backends to begin an XR session. Only works when the [`XrState`] is [`Ready`](XrState::Ready).
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrBeginSessionMessage;
|
||||
|
||||
/// Schedule thats ran when the XrSession has begun.
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, ScheduleLabel)]
|
||||
pub struct XrPostSessionBegin;
|
||||
|
||||
/// Event sent to backends to end an XR session. Only works when the [`XrState`] is [`Stopping`](XrState::Stopping).
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrEndSessionEvent;
|
||||
/// Message sent to backends to end an XR session. Only works when the [`XrState`] is [`Stopping`](XrState::Stopping).
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrEndSessionMessage;
|
||||
|
||||
/// Schedule thats ran whenever the XrSession is about to end
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, ScheduleLabel)]
|
||||
pub struct XrPreSessionEnd;
|
||||
|
||||
/// Event that is emitted when the XrSession is fully destroyed
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, Event)]
|
||||
pub struct XrSessionDestroyedEvent;
|
||||
/// Message that is emitted when the XrSession is fully destroyed
|
||||
#[derive(Message, Clone, Copy, Default, PartialEq, Eq, Debug, Hash)]
|
||||
pub struct XrSessionDestroyedMessage;
|
||||
|
||||
/// Event sent to backends to request the [`XrState`] proceed to [`Exiting`](XrState::Exiting) and for the session to be exited. Can be called at any time a session exists.
|
||||
#[derive(Event, Clone, Copy, Default)]
|
||||
pub struct XrRequestExitEvent;
|
||||
/// Message sent to backends to request the [`XrState`] proceed to [`Exiting`](XrState::Exiting) and for the session to be exited. Can be called at any time a session exists.
|
||||
#[derive(Message, Clone, Copy, Default)]
|
||||
pub struct XrRequestExitMessage;
|
||||
|
||||
/// Schedule ran before [`First`] to handle XR events.
|
||||
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug, Hash, ScheduleLabel)]
|
||||
@@ -75,13 +90,13 @@ pub enum XrHandleEvents {
|
||||
|
||||
/// System sets ran in the render world for XR.
|
||||
#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy, SystemSet)]
|
||||
pub enum XrRenderSet {
|
||||
/// Ran before [`XrRenderSet::PreRender`] but after [`RenderSet::ExtractCommands`].
|
||||
pub enum XrRenderSystems {
|
||||
/// Ran before [`XrRenderSet::PreRender`] but after [`RenderSystems::ExtractCommands`].
|
||||
HandleEvents,
|
||||
/// For any XR systems needing to be ran before rendering begins.
|
||||
/// Ran after [`XrRenderSet::HandleEvents`] but before every render set except [`RenderSet::ExtractCommands`].
|
||||
/// Ran after [`XrRenderSet::HandleEvents`] but before every render set except [`RenderSystems::ExtractCommands`].
|
||||
PreRender,
|
||||
/// For any XR systems needing to be ran after [`RenderSet::Render`] but before [`RenderSet::Cleanup`].
|
||||
/// For any XR systems needing to be ran after [`RenderSystems::Render`] but before [`RenderSystems::Cleanup`].
|
||||
PostRender,
|
||||
}
|
||||
|
||||
@@ -97,7 +112,8 @@ pub struct XrTrackingRoot;
|
||||
struct TrackingRootRes(Entity);
|
||||
|
||||
/// Makes the entity a child of the XrTrackingRoot if the entity has no parent
|
||||
#[derive(Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Default, Component)]
|
||||
#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Default, Component)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
#[component(on_add = on_tracker_add)]
|
||||
pub struct XrTracker;
|
||||
fn on_tracker_add(mut world: DeferredWorld, HookContext { entity, .. }: HookContext) {
|
||||
@@ -122,15 +138,15 @@ impl Plugin for XrSessionPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.init_resource::<XrDestroySessionRender>();
|
||||
let mut xr_first = Schedule::new(XrFirst);
|
||||
xr_first.set_executor_kind(bevy::ecs::schedule::ExecutorKind::Simple);
|
||||
app.add_event::<XrCreateSessionEvent>()
|
||||
.add_event::<XrDestroySessionEvent>()
|
||||
.add_event::<XrBeginSessionEvent>()
|
||||
.add_event::<XrEndSessionEvent>()
|
||||
.add_event::<XrRequestExitEvent>()
|
||||
.add_event::<XrStateChanged>()
|
||||
.add_event::<XrSessionCreatedEvent>()
|
||||
.add_event::<XrSessionDestroyedEvent>()
|
||||
xr_first.set_executor_kind(ExecutorKind::SingleThreaded);
|
||||
app.add_message::<XrCreateSessionMessage>()
|
||||
.add_message::<XrDestroySessionMessage>()
|
||||
.add_message::<XrBeginSessionMessage>()
|
||||
.add_message::<XrEndSessionMessage>()
|
||||
.add_message::<XrRequestExitMessage>()
|
||||
.add_message::<XrStateChanged>()
|
||||
.add_message::<XrSessionCreatedMessage>()
|
||||
.add_message::<XrSessionDestroyedMessage>()
|
||||
.init_schedule(XrSessionCreated)
|
||||
.init_schedule(XrPreDestroySession)
|
||||
.init_schedule(XrPostSessionBegin)
|
||||
@@ -150,7 +166,7 @@ impl Plugin for XrSessionPlugin {
|
||||
.add_systems(
|
||||
XrFirst,
|
||||
exits_session_on_app_exit
|
||||
.run_if(on_event::<AppExit>)
|
||||
.run_if(on_message::<AppExit>)
|
||||
.run_if(session_created)
|
||||
.in_set(XrHandleEvents::ExitEvents),
|
||||
);
|
||||
@@ -178,13 +194,13 @@ impl Plugin for XrSessionPlugin {
|
||||
.init_resource::<XrRootTransform>()
|
||||
.add_systems(
|
||||
PostUpdate,
|
||||
update_root_transform.after(TransformSystem::TransformPropagate),
|
||||
update_root_transform.after(TransformSystems::Propagate),
|
||||
)
|
||||
.add_systems(
|
||||
XrFirst,
|
||||
exits_session_on_app_exit
|
||||
.before(XrHandleEvents::ExitEvents)
|
||||
.run_if(on_event::<AppExit>.and(session_running)),
|
||||
.run_if(on_message::<AppExit>.and(session_running)),
|
||||
);
|
||||
|
||||
let render_app = app.sub_app_mut(RenderApp);
|
||||
@@ -194,33 +210,33 @@ impl Plugin for XrSessionPlugin {
|
||||
// .init_resource::<XrRootTransform>()
|
||||
.configure_sets(
|
||||
Render,
|
||||
(XrRenderSet::HandleEvents, XrRenderSet::PreRender).chain(),
|
||||
(XrRenderSystems::HandleEvents, XrRenderSystems::PreRender).chain(),
|
||||
)
|
||||
.configure_sets(
|
||||
Render,
|
||||
XrRenderSet::HandleEvents.after(RenderSet::ExtractCommands),
|
||||
XrRenderSystems::HandleEvents.after(RenderSystems::ExtractCommands),
|
||||
)
|
||||
.configure_sets(
|
||||
Render,
|
||||
XrRenderSet::PreRender
|
||||
.before(RenderSet::ManageViews)
|
||||
.before(RenderSet::PrepareAssets),
|
||||
XrRenderSystems::PreRender
|
||||
.before(RenderSystems::ManageViews)
|
||||
.before(RenderSystems::PrepareAssets),
|
||||
)
|
||||
.configure_sets(
|
||||
Render,
|
||||
XrRenderSet::PostRender
|
||||
.after(RenderSet::Render)
|
||||
.before(RenderSet::Cleanup),
|
||||
XrRenderSystems::PostRender
|
||||
.after(RenderSystems::Render)
|
||||
.before(RenderSystems::Cleanup),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn exits_session_on_app_exit(mut request_exit: EventWriter<XrRequestExitEvent>) {
|
||||
fn exits_session_on_app_exit(mut request_exit: MessageWriter<XrRequestExitMessage>) {
|
||||
request_exit.write_default();
|
||||
}
|
||||
|
||||
/// Event sent by backends whenever [`XrState`] is changed.
|
||||
#[derive(Event, Clone, Copy, Deref)]
|
||||
/// Message sent by backends whenever [`XrState`] is changed.
|
||||
#[derive(Message, Clone, Copy, Deref)]
|
||||
pub struct XrStateChanged(pub XrState);
|
||||
|
||||
/// A resource in the main world and render world representing the current session state.
|
||||
@@ -229,17 +245,17 @@ pub struct XrStateChanged(pub XrState);
|
||||
pub enum XrState {
|
||||
/// An XR session is not available here
|
||||
Unavailable,
|
||||
/// An XR session is available and ready to be created with an [`XrCreateSessionEvent`].
|
||||
/// An XR session is available and ready to be created with an [`XrCreateSessionMessage`].
|
||||
Available,
|
||||
/// An XR session is created but not ready to begin. Backends are not required to use this state.
|
||||
Idle,
|
||||
/// An XR session has been created and is ready to start rendering with an [`XrBeginSessionEvent`].
|
||||
/// An XR session has been created and is ready to start rendering with an [`XrBeginSessionMessage`].
|
||||
Ready,
|
||||
/// The XR session is running and can be stopped with an [`XrEndSessionEvent`].
|
||||
/// The XR session is running and can be stopped with an [`XrEndSessionMessage`].
|
||||
Running,
|
||||
/// The runtime has requested that the session should be ended with an [`XrEndSessionEvent`].
|
||||
/// The runtime has requested that the session should be ended with an [`XrEndSessionMessage`].
|
||||
Stopping,
|
||||
/// The XR session should be destroyed with an [`XrDestroySessionEvent`].
|
||||
/// The XR session should be destroyed with an [`XrDestroySessionMessage`].
|
||||
Exiting {
|
||||
/// Whether we should automatically restart the session
|
||||
should_restart: bool,
|
||||
@@ -247,11 +263,11 @@ pub enum XrState {
|
||||
}
|
||||
|
||||
pub fn auto_handle_session(
|
||||
mut state_changed: EventReader<XrStateChanged>,
|
||||
mut create_session: EventWriter<XrCreateSessionEvent>,
|
||||
mut begin_session: EventWriter<XrBeginSessionEvent>,
|
||||
mut end_session: EventWriter<XrEndSessionEvent>,
|
||||
mut destroy_session: EventWriter<XrDestroySessionEvent>,
|
||||
mut state_changed: MessageReader<XrStateChanged>,
|
||||
mut create_session: MessageWriter<XrCreateSessionMessage>,
|
||||
mut begin_session: MessageWriter<XrBeginSessionMessage>,
|
||||
mut end_session: MessageWriter<XrEndSessionMessage>,
|
||||
mut destroy_session: MessageWriter<XrDestroySessionMessage>,
|
||||
mut no_auto_restart: Local<bool>,
|
||||
) {
|
||||
for XrStateChanged(state) in state_changed.read() {
|
||||
@@ -290,8 +306,8 @@ pub fn update_root_transform(
|
||||
/// A [`Condition`](bevy::ecs::schedule::Condition) that allows the system to run when the xr status changed to a specific [`XrStatus`].
|
||||
pub fn status_changed_to(
|
||||
status: XrState,
|
||||
) -> impl FnMut(EventReader<XrStateChanged>) -> bool + Clone {
|
||||
move |mut reader: EventReader<XrStateChanged>| {
|
||||
) -> impl FnMut(MessageReader<XrStateChanged>) -> bool + Clone {
|
||||
move |mut reader: MessageReader<XrStateChanged>| {
|
||||
reader.read().any(|new_status| new_status.0 == status)
|
||||
}
|
||||
}
|
||||
@@ -332,5 +348,4 @@ macro_rules! state_matches {
|
||||
};
|
||||
}
|
||||
|
||||
use bevy::transform::TransformSystem;
|
||||
pub use state_matches;
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
use bevy::{
|
||||
prelude::*,
|
||||
render::{extract_component::ExtractComponent, extract_resource::ExtractResource},
|
||||
};
|
||||
use bevy_camera::visibility::Visibility;
|
||||
use bevy_derive::{Deref, DerefMut};
|
||||
use bevy_ecs::{component::Component, message::Message, resource::Resource, schedule::SystemSet};
|
||||
use bevy_math::Vec3;
|
||||
use bevy_render::{extract_component::ExtractComponent, extract_resource::ExtractResource};
|
||||
use bevy_transform::components::Transform;
|
||||
#[cfg(feature="reflect")]
|
||||
use bevy_reflect::Reflect;
|
||||
|
||||
use crate::session::XrTracker;
|
||||
|
||||
@@ -10,11 +14,13 @@ pub struct XrSpaceSyncSet;
|
||||
|
||||
/// Any Spaces will be invalid after the owning session exits
|
||||
#[repr(transparent)]
|
||||
#[derive(Component, Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, ExtractComponent)]
|
||||
#[derive(Component, Clone, Copy, Hash, PartialEq, Eq, Debug, ExtractComponent)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
#[require(XrSpaceLocationFlags, Transform, Visibility, XrTracker)]
|
||||
pub struct XrSpace(u64);
|
||||
|
||||
#[derive(Component, Clone, Copy, Reflect, Debug, ExtractComponent, Default)]
|
||||
#[derive(Component, Clone, Copy, Debug, ExtractComponent, Default)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
#[require(XrSpaceVelocityFlags)]
|
||||
pub struct XrVelocity {
|
||||
/// Velocity of a space relative to it's reference space
|
||||
@@ -34,32 +40,30 @@ impl XrVelocity {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Event, Clone, Copy, Deref, DerefMut)]
|
||||
#[derive(Message, Clone, Copy, Deref, DerefMut)]
|
||||
pub struct XrDestroySpace(pub XrSpace);
|
||||
|
||||
#[repr(transparent)]
|
||||
#[derive(
|
||||
Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Component, Deref, DerefMut, ExtractComponent,
|
||||
)]
|
||||
#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Component, Deref, DerefMut, ExtractComponent)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
pub struct XrReferenceSpace(pub XrSpace);
|
||||
|
||||
#[repr(transparent)]
|
||||
#[derive(
|
||||
Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Resource, Deref, DerefMut, ExtractResource,
|
||||
)]
|
||||
#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Resource, Deref, DerefMut, ExtractResource)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
pub struct XrPrimaryReferenceSpace(pub XrReferenceSpace);
|
||||
|
||||
#[derive(
|
||||
Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Component, ExtractComponent, Default,
|
||||
)]
|
||||
#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Component, ExtractComponent, Default)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
pub struct XrSpaceLocationFlags {
|
||||
pub position_tracked: bool,
|
||||
pub rotation_tracked: bool,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Component, ExtractComponent, Default,
|
||||
Clone, Copy, Hash, PartialEq, Eq, Debug, Component, ExtractComponent, Default,
|
||||
)]
|
||||
#[cfg_attr(feature = "reflect", derive(Reflect))]
|
||||
pub struct XrSpaceVelocityFlags {
|
||||
pub linear_valid: bool,
|
||||
pub angular_valid: bool,
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
use bevy::math::Isometry3d;
|
||||
|
||||
#[deprecated = "Use Isometry3d instead"]
|
||||
pub type XrPose = Isometry3d;
|
||||
Reference in New Issue
Block a user