From 1c8b9c68a25886f8859230bb1eb4d4829af7f7db Mon Sep 17 00:00:00 2001 From: rewin Date: Mon, 16 Sep 2024 21:02:59 +0300 Subject: [PATCH] fix warnings --- Cargo.lock | 195 +------------- Cargo.toml | 16 +- crates/editor_core/src/toast.rs | 4 +- crates/editor_ui/src/tool.rs | 4 - crates/editor_ui/src/tools/gizmo.rs | 6 +- crates/prefab/src/component/material.rs | 2 +- crates/prefab/src/lib.rs | 3 - crates/prefab/src/spawn_system.rs | 9 +- examples/spawn_prefab_with_physics.rs | 40 --- game/Cargo.toml | 1 - modules/bevy_xpbd_plugin/Cargo.toml | 19 -- modules/bevy_xpbd_plugin/src/collider.rs | 237 ------------------ modules/bevy_xpbd_plugin/src/lib.rs | 31 --- modules/bevy_xpbd_plugin/src/registry.rs | 206 --------------- modules/bevy_xpbd_plugin/src/spatial_query.rs | 60 ----- 15 files changed, 15 insertions(+), 818 deletions(-) delete mode 100644 examples/spawn_prefab_with_physics.rs delete mode 100644 modules/bevy_xpbd_plugin/Cargo.toml delete mode 100644 modules/bevy_xpbd_plugin/src/collider.rs delete mode 100644 modules/bevy_xpbd_plugin/src/lib.rs delete mode 100644 modules/bevy_xpbd_plugin/src/registry.rs delete mode 100644 modules/bevy_xpbd_plugin/src/spatial_query.rs diff --git a/Cargo.lock b/Cargo.lock index 31319f52..e95a66a9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -363,35 +363,6 @@ dependencies = [ "v_frame", ] -[[package]] -name = "avian3d" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "263f406c08c5ec296039ba06d7aa50e54f9ecd996f682aaa63eae25709e8935b" -dependencies = [ - "avian_derive", - "bevy", - "bevy_math", - "bitflags 2.6.0", - "derive_more", - "fxhash", - "indexmap", - "itertools 0.13.0", - "nalgebra", - "parry3d", -] - -[[package]] -name = "avian_derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4adeeecb6d4628d3ca11836ce9af8309f9552d4bd3e3f6e4368440d8163260c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.74", -] - [[package]] name = "avif-serialize" version = "0.8.1" @@ -1557,7 +1528,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools", "lazy_static", "lazycell", "proc-macro2", @@ -2685,21 +2656,11 @@ dependencies = [ "thread_local", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "game_app" version = "0.1.0" dependencies = [ "bevy", - "space_bevy_xpbd_plugin", "space_prefab", "workspace-hakari", ] @@ -3191,15 +3152,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.11" @@ -3447,16 +3399,6 @@ dependencies = [ "regex-automata 0.1.10", ] -[[package]] -name = "matrixmultiply" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" -dependencies = [ - "autocfg", - "rawpointer", -] - [[package]] name = "maybe-rayon" version = "0.1.1" @@ -3585,34 +3527,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "nalgebra" -version = "0.32.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" -dependencies = [ - "approx", - "glam 0.27.0", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.74", -] - [[package]] name = "ndk" version = "0.8.0" @@ -3754,15 +3668,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -4137,28 +4042,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "parry3d" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa342e0cdfc774fed0196714290ba2d85408b8ce9f295c40a0b1e05f3f8256ab" -dependencies = [ - "approx", - "arrayvec", - "bitflags 1.3.2", - "downcast-rs", - "either", - "log", - "nalgebra", - "num-derive", - "num-traits", - "rustc-hash", - "simba", - "slab", - "smallvec", - "spade", -] - [[package]] name = "paste" version = "1.0.15" @@ -4446,7 +4329,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools 0.12.1", + "itertools", "libc", "libfuzzer-sys", "log", @@ -4487,12 +4370,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - [[package]] name = "rayon" version = "1.10.0" @@ -4631,12 +4508,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "robust" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" - [[package]] name = "rodio" version = "0.18.1" @@ -4748,15 +4619,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "safe_arch" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" -dependencies = [ - "bytemuck", -] - [[package]] name = "same-file" version = "1.0.6" @@ -4859,19 +4721,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "simba" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", -] - [[package]] name = "simd-adler32" version = "0.3.7" @@ -4960,17 +4809,6 @@ dependencies = [ "serde", ] -[[package]] -name = "space_bevy_xpbd_plugin" -version = "0.6.0" -dependencies = [ - "avian3d", - "bevy", - "bevy-inspector-egui", - "space_editor_ui", - "workspace-hakari", -] - [[package]] name = "space_editor" version = "0.6.0" @@ -4978,7 +4816,6 @@ dependencies = [ "backtrace-on-stack-overflow", "bevy", "game_app", - "space_bevy_xpbd_plugin", "space_editor_ui", "space_prefab", "workspace-hakari", @@ -5085,18 +4922,6 @@ dependencies = [ "workspace-hakari", ] -[[package]] -name = "spade" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd14cf9e23b5241e1b1289ed3b9afc7746c95ead8df52d9254f5ed2d40c561b" -dependencies = [ - "hashbrown", - "num-traits", - "robust", - "smallvec", -] - [[package]] name = "spin" version = "0.9.8" @@ -5476,12 +5301,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - [[package]] name = "unicase" version = "2.7.0" @@ -6006,16 +5825,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wide" -version = "0.7.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690" -dependencies = [ - "bytemuck", - "safe_arch", -] - [[package]] name = "widestring" version = "1.1.0" diff --git a/Cargo.toml b/Cargo.toml index faacc280..8cb68169 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ default-run = "space_editor" members = [ "game", "crates/*", - "modules/bevy_xpbd_plugin", "external/editor_as_plugin", "workspace-hakari" ] @@ -27,7 +26,6 @@ resolver = "2" [[bin]] name = "game_app" path = "game/src/main.rs" -required-features = ["bevy_xpbd_3d"] [[bin]] name = "plugin_test" @@ -82,9 +80,7 @@ ron = "0.8" serde = "1" # Community Modules -space_bevy_xpbd_plugin = { version = "0.6.0", path = "modules/bevy_xpbd_plugin"} game_app = { version = "0.1.0", path = "game" } -avian3d = { version = "0.1.0", default-features = false } [dependencies] bevy.workspace = true @@ -93,7 +89,6 @@ space_prefab.workspace = true game_app.workspace = true # Modules for external crates -space_bevy_xpbd_plugin = { workspace = true, optional = true } workspace-hakari = { version = "0.1", path = "workspace-hakari" } [target.'cfg(target_os = "linux")'.dependencies] @@ -104,6 +99,7 @@ backtrace-on-stack-overflow = {version = "0.3", optional = true} future-incompatible = "warn" nonstandard_style = "deny" non_local_definitions = { level = "allow", priority = 2 } +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] } [workspace.lints.clippy] nursery = { level = "deny", priority = -1 } @@ -126,6 +122,7 @@ too_many_arguments = { level = "allow", priority = 2 } [lints] workspace = true + [profile.dev] opt-level = 1 overflow-checks = false @@ -151,16 +148,9 @@ lto = "thin" [features] backtrace = ["backtrace-on-stack-overflow"] -bevy_xpbd_3d = ["dep:space_bevy_xpbd_plugin"] persistence_editor = [] no_event_registration = ["space_prefab/no_event_registration"] default = [ - "bevy_xpbd_3d", "persistence_editor", "space_prefab/editor", -] - - -[[example]] -name = "spawn_prefab_with_physics" -required-features = ["bevy_xpbd_3d"] +] \ No newline at end of file diff --git a/crates/editor_core/src/toast.rs b/crates/editor_core/src/toast.rs index 90e6e267..8f5e7f57 100644 --- a/crates/editor_core/src/toast.rs +++ b/crates/editor_core/src/toast.rs @@ -1,5 +1,5 @@ -use bevy::{prelude::*, window::PrimaryWindow}; -use bevy_egui::{EguiContext, EguiContexts}; +use bevy::prelude::*; +use bevy_egui::EguiContexts; use egui_dock::egui::{self, Align2}; use space_shared::toast::ToastMessage; diff --git a/crates/editor_ui/src/tool.rs b/crates/editor_ui/src/tool.rs index 2c6d3451..3205d538 100644 --- a/crates/editor_ui/src/tool.rs +++ b/crates/editor_ui/src/tool.rs @@ -11,8 +11,6 @@ pub trait EditorTool { pub enum ToolName { #[default] Gizmo, - #[cfg(feature = "floor_plan")] - FloorMap, Other(String), } @@ -20,8 +18,6 @@ impl ToolName { pub fn as_str(&self) -> &str { match self { Self::Gizmo => "gizmo", - #[cfg(feature = "floor_plan")] - Self::FloorMap => "floor map", Self::Other(name) => name, } } diff --git a/crates/editor_ui/src/tools/gizmo.rs b/crates/editor_ui/src/tools/gizmo.rs index c0a1d5e8..431670c5 100644 --- a/crates/editor_ui/src/tools/gizmo.rs +++ b/crates/editor_ui/src/tools/gizmo.rs @@ -297,7 +297,7 @@ impl EditorTool for GizmoTool { info!("{:?}", &mean_transform); - if let Some((result, transforms)) = self + if let Some((_, transforms)) = self .gizmo .interact(ui, &[bevy_to_gizmo_transform(&mean_transform)]) { @@ -399,7 +399,7 @@ impl EditorTool for GizmoTool { if let Some(parent) = cell.get_entity(parent.get()) { if let Some(parent_global) = unsafe { parent.get::() } { if let Some(global) = unsafe { ecell.get::() } { - if let Some((result, transforms)) = Gizmo::new(gizmo_config) + if let Some((_, transforms)) = Gizmo::new(gizmo_config) .interact( ui, &[bevy_to_gizmo_transform(&global.compute_transform())], @@ -435,7 +435,7 @@ impl EditorTool for GizmoTool { self.gizmo.update_config(gizmo_config); - if let Some((result, transforms)) = self + if let Some((_, transforms)) = self .gizmo .interact(ui, &[bevy_to_gizmo_transform(&transform)]) { diff --git a/crates/prefab/src/component/material.rs b/crates/prefab/src/component/material.rs index 4035c25e..3e57c396 100644 --- a/crates/prefab/src/component/material.rs +++ b/crates/prefab/src/component/material.rs @@ -222,7 +222,7 @@ mod tests { let color = prefab.to_material(server); assert!(color.texture.is_none()); - assert_eq!(color.color, Color::rgb(1.0, 1.0, 1.0)); + assert_eq!(color.color, Color::linear_rgb(1.0, 1.0, 1.0)); } #[test] diff --git a/crates/prefab/src/lib.rs b/crates/prefab/src/lib.rs index 1c90d7ab..e7631542 100644 --- a/crates/prefab/src/lib.rs +++ b/crates/prefab/src/lib.rs @@ -2,9 +2,6 @@ #![allow(clippy::type_complexity)] #![allow(clippy::too_many_arguments)] -#[cfg(all(feature = "f32", feature = "f64"))] -compile_error!("feature \"f32\" and feature \"f64\" cannot be enabled at the same time"); - /// Contains all component for prefab logic pub mod component; /// Contains systems for loading prefab from file diff --git a/crates/prefab/src/spawn_system.rs b/crates/prefab/src/spawn_system.rs index 9a498372..0fd59ac3 100644 --- a/crates/prefab/src/spawn_system.rs +++ b/crates/prefab/src/spawn_system.rs @@ -207,14 +207,13 @@ pub fn sync_spritesheet( texture_atlas.to_texture_atlas(prefab, &mut texture_atlases, &asset_server) { if let Some(clip) = clips.clips.get(&clip_name.name) { - commands.entity(e).insert(SpriteSheetBundle { - atlas: TextureAtlas { - layout: atlas, - index: clip.first, - }, + commands.entity(e).insert(SpriteBundle { texture: texture_atlas.clone().texture.unwrap_or_default(), transform: Transform::from_scale(Vec3::splat(6.0)), ..default() + }).insert(TextureAtlas { + layout: atlas, + index: clip.first, }); }; } diff --git a/examples/spawn_prefab_with_physics.rs b/examples/spawn_prefab_with_physics.rs deleted file mode 100644 index 514172fa..00000000 --- a/examples/spawn_prefab_with_physics.rs +++ /dev/null @@ -1,40 +0,0 @@ -use bevy::prelude::*; -use space_editor::prelude::*; -use space_editor_ui::ext::bevy_panorbit_camera::{self, PanOrbitCameraPlugin}; - -//This example loading prefab with bevy_xpbd types - -fn main() { - App::default() - .add_plugins(DefaultPlugins) - .add_plugins(PrefabPlugin) - .add_plugins(XpbdPlugin) - .add_plugins(PanOrbitCameraPlugin) - .add_systems(Startup, setup) - .run(); -} - -fn setup(mut commands: Commands, _assets: Res) { - // prefab loaded by adding PrefabLoader component to any entity (it will be parent of prefab) or with prefab bundle - commands - .spawn(PrefabBundle::new("scenes/physics_loading_test.scn.ron")) - .insert(Name::new("Prefab")); - - // 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() - }) - .insert(bevy_panorbit_camera::PanOrbitCamera::default()); -} diff --git a/game/Cargo.toml b/game/Cargo.toml index 9f25ca26..9e1e43b7 100644 --- a/game/Cargo.toml +++ b/game/Cargo.toml @@ -16,5 +16,4 @@ required-features = ["bevy_xpbd_3d"] [dependencies] bevy.workspace = true space_prefab.workspace = true -space_bevy_xpbd_plugin.workspace = true workspace-hakari = { version = "0.1", path = "../workspace-hakari" } diff --git a/modules/bevy_xpbd_plugin/Cargo.toml b/modules/bevy_xpbd_plugin/Cargo.toml deleted file mode 100644 index 9028db20..00000000 --- a/modules/bevy_xpbd_plugin/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "space_bevy_xpbd_plugin" -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -description = "Space XPBD plugin for space_editor crate" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -bevy.workspace = true -space_editor_ui.workspace = true -avian3d = { workspace = true, features = ["3d", "f32", "collider-from-mesh", "debug-plugin", "default-collider", "parry-f32"] } -bevy-inspector-egui.workspace = true -workspace-hakari = { version = "0.1", path = "../../workspace-hakari" } - -[lints] -workspace = true diff --git a/modules/bevy_xpbd_plugin/src/collider.rs b/modules/bevy_xpbd_plugin/src/collider.rs deleted file mode 100644 index 0c509528..00000000 --- a/modules/bevy_xpbd_plugin/src/collider.rs +++ /dev/null @@ -1,237 +0,0 @@ -use avian3d::*; -use bevy::prelude::*; -use bevy::reflect; - -use collision::Collider; -use math::Quaternion; -use math::Scalar; -use math::Vector; -use space_editor_ui::ext::bevy_inspector_egui::prelude::*; -use space_editor_ui::prelude::MeshPrimitive3dPrefab; - -use crate::registry::RigidBodyPrefab; - -#[derive(Reflect, Debug, Clone, PartialEq, Component, InspectorOptions)] -#[reflect(Component, Default)] -pub enum ColliderPrefab { - FromMesh, - FromPrefabMesh, - Primitive { - pos: Vector, - rot: Vector, - primitive: ColliderPrimitive, - }, - Compound(ColliderPrefabCompound), -} - -#[derive(Reflect, Debug, Clone, PartialEq, Default)] -#[reflect(Default)] -pub struct ColliderPrefabCompound { - pub parts: Vec, -} - -impl Default for ColliderPrefab { - fn default() -> Self { - Self::Primitive { - pos: Vector::default(), - rot: Vector::default(), - primitive: ColliderPrimitive::Cuboid(Vector::ONE), - } - } -} - -#[derive(Reflect, Debug, Clone, PartialEq, Default)] -#[reflect(Default)] -pub struct ColliderPart { - pub pos: Vector, - pub rot: Vector, - pub primitive: ColliderPrimitive, -} - -#[derive(Debug, Reflect, Clone, PartialEq)] -#[reflect(Default)] -/// Available bevy_xpbd primitive 3D shapes -pub enum ColliderPrimitive { - Cuboid(Vector), - Capsule { - height: Scalar, - radius: Scalar, - }, - CapsuleEndpoints { - a: Vector, - b: Vector, - radius: Scalar, - }, - Cone { - height: Scalar, - radius: Scalar, - }, - Cylinder { - height: Scalar, - radius: Scalar, - }, - Halfspace { - outward_normal: Vector, - }, - Triangle { - a: Vector, - b: Vector, - c: Vector, - }, - Ball(Scalar), - Segment { - a: Vector, - b: Vector, - }, -} - -impl Default for ColliderPrimitive { - fn default() -> Self { - Self::Cuboid(Vector::new(1.0, 1.0, 1.0)) - } -} - -impl ColliderPrimitive { - pub fn to_collider(&self) -> Collider { - match self { - Self::Cuboid(bbox) => Collider::cuboid(bbox.x, bbox.y, bbox.z), - Self::Capsule { height, radius } => Collider::capsule(*height, *radius), - Self::CapsuleEndpoints { a, b, radius } => Collider::capsule_endpoints(*radius, *a, *b), - Self::Cone { height, radius } => Collider::cone(*height, *radius), - Self::Cylinder { height, radius } => Collider::cylinder(*height, *radius), - Self::Halfspace { outward_normal } => Collider::half_space(*outward_normal), - Self::Triangle { a, b, c } => Collider::triangle(*a, *b, *c), - Self::Ball(radius) => Collider::sphere(*radius), - Self::Segment { a, b } => Collider::segment(*a, *b), - } - } -} - -pub fn update_collider( - mut commands: Commands, - query: Query< - ( - Entity, - &ColliderPrefab, - Option<&RigidBodyPrefab>, - Option<&Transform>, - Option<&Handle>, - Option<&MeshPrimitive3dPrefab>, - ), - Changed, - >, - updated_meshes: Query<(Entity, &ColliderPrefab, &Handle), Changed>>, - updated_prefab_meshes: Query< - (Entity, &ColliderPrefab, &MeshPrimitive3dPrefab), - Changed, - >, - meshes: Res>, -) { - for (e, collider, rigidbody, transform, mesh, prefab_mesh) in query.iter() { - commands.entity(e).remove::(); - let col = get_collider(collider, mesh, &meshes, prefab_mesh); - commands.entity(e).insert(col); - - if rigidbody.is_none() { - commands.entity(e).insert(RigidBodyPrefab::Static); - } - - if transform.is_none() { - commands.entity(e).insert(TransformBundle::default()); - } - } - - for (e, collider, mesh) in updated_meshes.iter() { - if *collider == ColliderPrefab::FromMesh { - if let Some(mesh) = meshes.get(mesh) { - commands - .entity(e) - .insert(Collider::trimesh_from_mesh(mesh).unwrap_or_default()); - } else { - commands.entity(e).insert(Collider::default()); - } - } - } - - for (e, collider, mesh) in updated_prefab_meshes.iter() { - if *collider == ColliderPrefab::FromPrefabMesh { - commands.entity(e).remove::(); - commands.entity(e).insert(get_prefab_mesh_collider(mesh)); - } - } -} - -fn get_collider( - collider: &ColliderPrefab, - mesh: Option<&Handle>, - meshes: &Assets, - prefab_mesh: Option<&MeshPrimitive3dPrefab>, -) -> Collider { - match collider { - ColliderPrefab::FromMesh => mesh.map_or_else(Collider::default, |mesh| { - meshes.get(mesh).map_or_else(Collider::default, |mesh| { - Collider::trimesh_from_mesh(mesh).unwrap_or_default() - }) - }), - ColliderPrefab::FromPrefabMesh => { - prefab_mesh.map_or_else(Collider::default, get_prefab_mesh_collider) - } - ColliderPrefab::Primitive { - pos, - rot, - primitive, - } => Collider::compound(vec![( - *pos, - Quaternion::from_euler(EulerRot::XYZ, rot.x, rot.y, rot.z), - primitive.to_collider(), - )]), - ColliderPrefab::Compound(com) => { - if !com.parts.is_empty() { - return Collider::compound( - com.parts - .iter() - .map(|p| { - ( - p.pos, - Quaternion::from_euler(EulerRot::XYZ, p.rot.x, p.rot.y, p.rot.z), - p.primitive.to_collider(), - ) - }) - .collect(), - ); - } else { - Collider::default() - } - } - } -} - -fn get_prefab_mesh_collider(mesh: &MeshPrimitive3dPrefab) -> Collider { - const EPS: f32 = 0.00001; - - match mesh { - MeshPrimitive3dPrefab::Cube(val) => { - Collider::cuboid(*val as Scalar, *val as Scalar, *val as Scalar) - } - MeshPrimitive3dPrefab::Box(val) => { - Collider::cuboid(val.w as Scalar, val.h as Scalar, val.d as Scalar) - } - MeshPrimitive3dPrefab::Sphere(val) => Collider::sphere(val.r as Scalar), - MeshPrimitive3dPrefab::Quad(val) => { - Collider::cuboid(val.size.x as Scalar, val.size.y as Scalar, EPS as Scalar) - } - MeshPrimitive3dPrefab::Capsule(val) => Collider::capsule(1.0, val.r as Scalar), - MeshPrimitive3dPrefab::Circle(val) => { - Collider::trimesh_from_mesh(&val.to_mesh()).unwrap_or_default() - } - MeshPrimitive3dPrefab::Cylinder(val) => Collider::cylinder(1.0, val.r as Scalar), - MeshPrimitive3dPrefab::Plane(val) => val.to_plane3d().into(), - MeshPrimitive3dPrefab::PlaneMultipoint(val) => val.to_plane3d().into(), - MeshPrimitive3dPrefab::RegularPolygon(val) => { - Collider::trimesh_from_mesh(&val.to_mesh()).unwrap_or_default() - } - MeshPrimitive3dPrefab::Torus(val) => { - Collider::trimesh_from_mesh(&val.to_mesh()).unwrap_or_default() - } - } -} diff --git a/modules/bevy_xpbd_plugin/src/lib.rs b/modules/bevy_xpbd_plugin/src/lib.rs deleted file mode 100644 index fd6d3ad2..00000000 --- a/modules/bevy_xpbd_plugin/src/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Remove after update to newer rust version -#![allow(clippy::type_complexity)] -use bevy::prelude::*; - -pub mod collider; -pub mod registry; -pub mod spatial_query; - -/// Community module containing bevy_xpbd_3d plugin -pub struct XpbdPlugin; - -impl Plugin for XpbdPlugin { - fn build(&self, app: &mut App) { - { - info!("Add bevy_xpbd_3d plugin to editor"); - app.add_plugins(registry::BevyXpbdPlugin); - app.register_type::>(); - app.register_type::>(); - app.register_type::>(); - app.register_type::<[f32; 4]>(); - } - } -} - -pub mod prelude { - pub use crate::collider::*; - pub use crate::registry::*; - pub use crate::spatial_query::*; - pub use crate::XpbdPlugin; - //pub use bevy_xpbd_3d; -} diff --git a/modules/bevy_xpbd_plugin/src/registry.rs b/modules/bevy_xpbd_plugin/src/registry.rs deleted file mode 100644 index 625bfef9..00000000 --- a/modules/bevy_xpbd_plugin/src/registry.rs +++ /dev/null @@ -1,206 +0,0 @@ -use avian3d::prelude::*; -use bevy::prelude::*; -use collider::ColliderPrefab; -use space_editor_ui::{ - prelude::{EditorRegistryExt, EditorState, PrefabSet}, - settings::RegisterSettingsBlockExt, -}; - -use crate::{ - collider::{self, ColliderPart, ColliderPrefabCompound, ColliderPrimitive}, - spatial_query::register_xpbd_spatial_types, -}; - -pub type Vector = avian3d::math::Vector; -pub type Scalar = avian3d::math::Scalar; - -pub struct BevyXpbdPlugin; - -impl Plugin for BevyXpbdPlugin { - fn build(&self, app: &mut App) { - println!("BevyXpbdPlugin::build"); - app.add_plugins(PhysicsPlugins::default()); - app.add_plugins(avian3d::debug_render::PhysicsDebugPlugin::default()); - - app.editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::() - .editor_registry::(); - - app.register_type::() - .register_type::() - .register_type::>() - .register_type::(); - - register_xpbd_spatial_types(app); - - app.add_systems( - Update, - (collider::update_collider).in_set(PrefabSet::DetectPrefabChange), - ); - - app.add_systems( - Update, - rigidbody_type_change_in_editor - .run_if(in_state(EditorState::Editor)) - .in_set(PrefabSet::DetectPrefabChange), - ); - app.add_systems( - Update, - rigidbody_type_change - .run_if(in_state(EditorState::Game)) - .in_set(PrefabSet::DetectPrefabChange), - ); - app.add_systems( - OnEnter(EditorState::Editor), - force_rigidbody_type_change_in_editor, - ); - app.add_systems(OnEnter(EditorState::Game), force_rigidbody_type_change); - app.add_systems( - Update, - (sync_position_spawn, late_sync_position_spawn).run_if(in_state(EditorState::Editor)), - ); - - if app.is_plugin_added::() { - app.register_settings_block("Bevy XPBD 3D", |ui, _, world| { - ui.checkbox( - &mut world.get_resource_mut::().map_or( - false, - |mut gizmos_config| { - gizmos_config.config_mut::().1.hide_meshes - }, - ), - "Hide debug meshes", - ); - }); - } - } -} - -#[derive(Component)] -struct LateSync; - -fn late_sync_position_spawn( - mut commands: Commands, - query: Query< - Entity, - ( - Without, - Or<(Changed, Changed)>, - ), - >, -) { - for e in query.iter() { - commands.entity(e).insert(LateSync); - } -} - -fn sync_position_spawn( - mut commands: Commands, - query: Query< - (Entity, &GlobalTransform), - Or<( - Changed, - Changed, - With, - )>, - >, -) { - for (e, tr) in query.iter() { - commands.entity(e).insert(( - Position(tr.translation()), - Rotation(tr.compute_transform().rotation), - )); - } -} - -#[derive(Component, Clone, Default, Reflect)] -#[reflect(Component)] -/// Available bevy_xpbd::RigidBody wrappers -pub enum RigidBodyPrefab { - Dynamic, - #[default] - Static, - Kinematic, -} - -impl RigidBodyPrefab { - pub const fn to_rigidbody(&self) -> RigidBody { - match self { - Self::Dynamic => RigidBody::Dynamic, - Self::Static => RigidBody::Static, - Self::Kinematic => RigidBody::Kinematic, - } - } - - pub const fn to_rigidbody_editor(&self) -> RigidBody { - RigidBody::Static - } -} - -fn force_rigidbody_type_change_in_editor( - mut commands: Commands, - query: Query<(Entity, &RigidBodyPrefab, Option<&GlobalTransform>)>, -) { - for (e, tp, transform) in query.iter() { - commands.entity(e).insert(tp.to_rigidbody_editor()); - if let Some(tr) = transform { - let tr = tr.compute_transform(); - commands - .entity(e) - .insert((Position(tr.translation), Rotation(tr.rotation))); - } - } -} - -fn rigidbody_type_change_in_editor( - mut commands: Commands, - query: Query<(Entity, &RigidBodyPrefab, Option<&GlobalTransform>), Changed>, -) { - for (e, tp, transform) in query.iter() { - info!("Rigidbody type changed in {:?}", e); - commands - .entity(e) - .remove::() - .insert(tp.to_rigidbody_editor()); - if let Some(tr) = transform { - let tr = tr.compute_transform(); - commands - .entity(e) - .insert((Position(tr.translation), Rotation(tr.rotation))); - } - } -} - -fn force_rigidbody_type_change( - mut commands: Commands, - query: Query<(Entity, &RigidBodyPrefab, Option<&collider::ColliderPrefab>)>, -) { - for (e, tp, col) in query.iter() { - commands - .entity(e) - .remove::() - .insert(tp.to_rigidbody()); - if col.is_none() { - commands.entity(e).insert(ColliderPrefab::default()); - } - } -} - -fn rigidbody_type_change( - mut commands: Commands, - query: Query<(Entity, &RigidBodyPrefab), Changed>, -) { - for (e, tp) in query.iter() { - commands.entity(e).remove::(); - commands.entity(e).insert(tp.to_rigidbody()); - } -} diff --git a/modules/bevy_xpbd_plugin/src/spatial_query.rs b/modules/bevy_xpbd_plugin/src/spatial_query.rs deleted file mode 100644 index 3b9eb085..00000000 --- a/modules/bevy_xpbd_plugin/src/spatial_query.rs +++ /dev/null @@ -1,60 +0,0 @@ -use avian3d::{ - math::{Quaternion, Vector}, - spatial_query::{RayCaster, ShapeCaster}, -}; -use bevy::prelude::*; -use space_editor_ui::{ext::bevy_inspector_egui::prelude::*, prelude::*}; - -use crate::collider::ColliderPrimitive; - -pub fn register_xpbd_spatial_types(app: &mut App) { - app.editor_registry::() - .editor_into_sync::(); - app.editor_registry::() - .editor_into_sync::(); -} - -#[derive(Component, Reflect, Clone, Debug, InspectorOptions)] -#[reflect(Component, Default)] -/// Available bevy_xpbd::RayCaster wrappers -pub struct RayCasterPrefab { - pub direction: Vector, - pub origin: Vector, -} - -impl Default for RayCasterPrefab { - fn default() -> Self { - Self { - direction: Vector::X, - origin: Vector::ZERO, - } - } -} - -impl From for RayCaster { - fn from(val: RayCasterPrefab) -> Self { - Self::new(val.origin, Dir3::new_unchecked(val.direction.normalize())) - } -} - -#[derive(Component, Reflect, Clone, Debug, InspectorOptions, Default)] -#[reflect(Component, Default)] -/// Available bevy_xpbd::ShapeCaster wrappers -pub struct ShapeCasterPrefab { - pub shape: ColliderPrimitive, - pub origin: Vector, - pub direction: Vector, - pub shape_rotation: Quaternion, -} - -impl From for ShapeCaster { - fn from(val: ShapeCasterPrefab) -> Self { - Self::new( - val.shape.to_collider(), - val.origin, - val.shape_rotation, - Dir3::new_unchecked(val.direction.normalize()), - ) - .with_ignore_origin_penetration(true) - } -}