diff --git a/README.md b/README.md index d392e30..a2dda6d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ An in-progress crate for adding openxr support to Bevy without forking. To see it in action run the example in `examples` with `cargo run --example xr`. ## Quest -Running on quest can be done with https://github.com/rust-mobile/cargo-apk and requires disabling default features. +Running on Meta Quest can be done with https://github.com/rust-mobile/cargo-apk and requires disabling default features. ```sh cargo apk run --example xr --release --no-default-features ``` diff --git a/examples/android/Cargo.toml b/examples/android/Cargo.toml index 31752d8..1f5163d 100644 --- a/examples/android/Cargo.toml +++ b/examples/android/Cargo.toml @@ -1,4 +1,4 @@ -# [package] +[package] name = "bevy_openxr_android" version = "0.1.0" edition = "2021" @@ -6,31 +6,20 @@ description = "Example for building an Android OpenXR app with Bevy" publish = false license = "MIT OR Apache-2.0" -# [lib] -# name = "bevy_mobile_example" -# crate-type = ["staticlib", "cdylib"] - -# [dependencies] -# bevy = { path = "../../" } - -# [package.metadata.android] -# package = "org.bevyengine.example" -# apk_name = "bevyexample" -# assets = "../../assets" -# resources = "../../assets/android-res" -# # This strips debug symbols from the shared libraries, drastically reducing APK size. If you need them, remove the option. -# strip = "strip" -# build_targets = ["aarch64-linux-android", "armv7-linux-androideabi"] +[lib] +name = "bevy_openxr_android" +crate-type = ["staticlib", "cdylib"] [package.metadata.android] -package = "com.github.alexichepura.bevyopenxr" +package = "org.bevyengine.example_openxr_android" build_targets = ["aarch64-linux-android"] runtime_libs = "examples/libs" apk_name = "bevyopenxr" assets = "assets" res = "assets/android-res" icon = "@mipmap/ic_launcher" -label = "Bevy Openxr" +label = "Bevy Openxr Android" +strip = "strip" [package.metadata.android.sdk] target_sdk_version = 32 @@ -42,7 +31,6 @@ target_sdk_version = 32 [dependencies] anyhow = "1.0.75" # ash = "0.37.3" -# ash = { version = "0.37", default-features = false, features = ["loaded"] } bevy = { git = "https://github.com/bevyengine/bevy.git" } openxr = { git = "https://github.com/Ralith/openxrs", features = ["mint"] } mint = "0.5.9" @@ -58,17 +46,6 @@ color-eyre = "0.6.2" lto = "fat" codegen-units = 1 panic = "abort" -#debug = true - -[package.metadata.android] -build_targets = ["aarch64-linux-android"] -runtime_libs = "examples/libs" -package = "com.github.alexichepura.bevyopenxr" -apk_name = "bevyopenxr" -assets = "assets" -res = "assets/android-res" -icon = "@mipmap/ic_launcher" -label = "Bevy Openxr" [package.metadata.android.application.activity] theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" diff --git a/examples/android/src/lib.rs b/examples/android/src/lib.rs new file mode 100644 index 0000000..32483a3 --- /dev/null +++ b/examples/android/src/lib.rs @@ -0,0 +1,85 @@ +use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; +use bevy::prelude::*; +use bevy::transform::components::Transform; +use bevy_openxr::xr_input::debug_gizmos::OpenXrDebugRenderer; +use bevy_openxr::xr_input::prototype_locomotion::{proto_locomotion, PrototypeLocomotionConfig}; +use bevy_openxr::xr_input::trackers::{ + OpenXRController, OpenXRLeftController, OpenXRRightController, OpenXRTracker, +}; +use bevy_openxr::DefaultXrPlugins; + +#[bevy_main] +fn main() { + color_eyre::install().unwrap(); + + App::new() + .add_plugins(DefaultXrPlugins) + .add_plugins(OpenXrDebugRenderer) + .add_plugins(LogDiagnosticsPlugin::default()) + .add_plugins(FrameTimeDiagnosticsPlugin) + .add_systems(Startup, setup) + .add_systems(Update, proto_locomotion) + .add_systems(Startup, spawn_controllers_example) + .insert_resource(PrototypeLocomotionConfig::default()) + .run(); +} + +/// set up a simple 3D scene +fn setup( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, +) { + // plane + commands.spawn(PbrBundle { + mesh: meshes.add(shape::Plane::from_size(5.0).into()), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..default() + }); + // cube + commands.spawn(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 0.1 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..default() + }); + // cube + commands.spawn(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 0.1 })), + material: materials.add(Color::rgb(0.8, 0.0, 0.0).into()), + transform: Transform::from_xyz(0.0, 0.5, 1.0), + ..default() + }); + // light + commands.spawn(PointLightBundle { + point_light: PointLight { + intensity: 1500.0, + shadows_enabled: true, + ..default() + }, + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..default() + }); + // camera + // commands.spawn((Camera3dBundle { + // transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y), + // ..default() + // },)); +} + +fn spawn_controllers_example(mut commands: Commands) { + //left hand + commands.spawn(( + OpenXRLeftController, + OpenXRController, + OpenXRTracker, + SpatialBundle::default(), + )); + //right hand + commands.spawn(( + OpenXRRightController, + OpenXRController, + OpenXRTracker, + SpatialBundle::default(), + )); +}