From f8f36ce8df79128d14318b363567faa728f79eed Mon Sep 17 00:00:00 2001 From: LizeLive Date: Thu, 27 Nov 2025 02:18:36 +0000 Subject: [PATCH 1/8] chore: split bevy metacrate for build perf --- bevy_rapier2d/Cargo.toml | 56 +++++++++++++------ bevy_rapier3d/Cargo.toml | 56 +++++++++++++------ src/control/character_controller.rs | 2 +- src/dynamics/joint.rs | 3 +- src/dynamics/mod.rs | 2 +- src/dynamics/revolute_joint.rs | 2 +- src/dynamics/rigid_body.rs | 4 +- src/geometry/collider.rs | 7 ++- src/geometry/collider_impl.rs | 7 +-- src/geometry/shape_views/voxels.rs | 4 +- src/geometry/to_bevy_mesh.rs | 54 +++++++++--------- src/lib.rs | 9 +-- src/picking_backend/mod.rs | 23 ++++---- src/pipeline/events.rs | 4 +- src/pipeline/physics_hooks.rs | 2 +- src/pipeline/query_filter.rs | 2 +- src/plugin/configuration.rs | 6 +- src/plugin/context/mod.rs | 11 ++-- src/plugin/context/systemparams/mod.rs | 4 +- .../rapier_context_systemparam.rs | 40 +++++++------ src/plugin/narrow_phase.rs | 2 +- src/plugin/plugin.rs | 31 +++++----- src/plugin/systems/character_controller.rs | 3 +- src/plugin/systems/collider.rs | 28 +++++++--- src/plugin/systems/joint.rs | 2 +- src/plugin/systems/mod.rs | 11 +++- .../systems/multiple_rapier_contexts.rs | 2 +- src/plugin/systems/remove.rs | 4 +- src/plugin/systems/rigid_body.rs | 3 +- src/plugin/systems/writeback.rs | 2 +- src/reflect/mod.rs | 2 +- src/render/mod.rs | 8 ++- src/utils/mod.rs | 6 +- 33 files changed, 242 insertions(+), 160 deletions(-) diff --git a/bevy_rapier2d/Cargo.toml b/bevy_rapier2d/Cargo.toml index 010cfe08..f527ae49 100644 --- a/bevy_rapier2d/Cargo.toml +++ b/bevy_rapier2d/Cargo.toml @@ -33,38 +33,62 @@ default = [ ] dim2 = [] debug-render-2d = [ - "bevy/bevy_core_pipeline", - "bevy/bevy_sprite", - "bevy/bevy_gizmos", + "bevy_core_pipeline", + "bevy_sprite", + "bevy_gizmos", "rapier2d/debug-render", - "bevy/bevy_asset", + "bevy_asset", ] debug-render-3d = [ - "bevy/bevy_core_pipeline", - "bevy/bevy_pbr", - "bevy/bevy_gizmos", + "bevy_core_pipeline", + "bevy_pbr", + "bevy_gizmos", "rapier2d/debug-render", - "bevy/bevy_asset", + "bevy_asset", ] rapier-debug-render = ["rapier2d/debug-render"] parallel = ["rapier2d/parallel"] simd-stable = ["rapier2d/simd-stable"] simd-nightly = ["rapier2d/simd-nightly"] -serde-serialize = ["rapier2d/serde-serialize", "bevy/serialize", "serde"] +serde-serialize = ["rapier2d/serde-serialize", "bevy_ecs/serialize", "serde"] enhanced-determinism = ["rapier2d/enhanced-determinism"] headless = [] -picking-backend = ["bevy/bevy_picking", "bevy/bevy_render"] +picking-backend = ["bevy_picking", "bevy_render", "bevy_camera"] async-collider = [ - "bevy/bevy_asset", - "bevy/bevy_scene", - "bevy/bevy_render", - "bevy/bevy_image", + "bevy_asset", + "bevy_scene", + "bevy_render", + "bevy_image", ] -to-bevy-mesh = ["bevy/bevy_render", "bevy/bevy_asset"] +to-bevy-mesh = ["bevy_render", "bevy_asset", "bevy_mesh"] [dependencies] -bevy = { version = "0.17.3", default-features = false, features = ["std"] } +# Bevy crates +bevy_app = { version = "0.17.3", default-features = false } +bevy_derive = { version = "0.17.3", default-features = false } +bevy_ecs = { version = "0.17.3", default-features = false } +bevy_math = { version = "0.17.3", default-features = false } +bevy_reflect = { version = "0.17.3", default-features = false } +bevy_time = { version = "0.17.3", default-features = false } +bevy_transform = { version = "0.17.3", default-features = false } +bevy_platform = { version = "0.17.3", default-features = false, features = ["std"] } +bevy_log = { version = "0.17.3", default-features = false } +bevy_color = { version = "0.17.3", default-features = false } + +# Optional bevy crates for features +bevy_asset = { version = "0.17.3", default-features = false, optional = true } +bevy_scene = { version = "0.17.3", default-features = false, optional = true } +bevy_render = { version = "0.17.3", default-features = false, optional = true } +bevy_image = { version = "0.17.3", default-features = false, optional = true } +bevy_mesh = { version = "0.17.3", default-features = false, optional = true } +bevy_picking = { version = "0.17.3", default-features = false, optional = true } +bevy_camera = { version = "0.17.3", default-features = false, optional = true } +bevy_gizmos = { version = "0.17.3", default-features = false, optional = true } +bevy_sprite = { version = "0.17.3", default-features = false, optional = true } +bevy_pbr = { version = "0.17.3", default-features = false, optional = true } +bevy_core_pipeline = { version = "0.17.3", default-features = false, optional = true } + nalgebra = { version = "0.34.1", features = ["convert-glam030"] } rapier2d = "0.31.0" bitflags = "2.10.0" diff --git a/bevy_rapier3d/Cargo.toml b/bevy_rapier3d/Cargo.toml index 5a1805fe..1623aeb5 100644 --- a/bevy_rapier3d/Cargo.toml +++ b/bevy_rapier3d/Cargo.toml @@ -34,38 +34,62 @@ default = [ dim3 = [] debug-render = ["debug-render-3d"] debug-render-2d = [ - "bevy/bevy_core_pipeline", - "bevy/bevy_sprite", - "bevy/bevy_gizmos", + "bevy_core_pipeline", + "bevy_sprite", + "bevy_gizmos", "rapier3d/debug-render", - "bevy/bevy_asset", + "bevy_asset", ] debug-render-3d = [ - "bevy/bevy_core_pipeline", - "bevy/bevy_pbr", - "bevy/bevy_gizmos", + "bevy_core_pipeline", + "bevy_pbr", + "bevy_gizmos", "rapier3d/debug-render", - "bevy/bevy_asset", + "bevy_asset", ] rapier-debug-render = ["rapier3d/debug-render"] parallel = ["rapier3d/parallel"] simd-stable = ["rapier3d/simd-stable"] simd-nightly = ["rapier3d/simd-nightly"] -serde-serialize = ["rapier3d/serde-serialize", "bevy/serialize", "serde"] +serde-serialize = ["rapier3d/serde-serialize", "bevy_ecs/serialize", "serde"] enhanced-determinism = ["rapier3d/enhanced-determinism"] headless = [] -picking-backend = ["bevy/bevy_picking", "bevy/bevy_render"] +picking-backend = ["bevy_picking", "bevy_render", "bevy_camera"] async-collider = [ - "bevy/bevy_asset", - "bevy/bevy_scene", - "bevy/bevy_render", - "bevy/bevy_image", + "bevy_asset", + "bevy_scene", + "bevy_render", + "bevy_image", ] -to-bevy-mesh = ["bevy/bevy_render", "bevy/bevy_asset"] +to-bevy-mesh = ["bevy_render", "bevy_asset", "bevy_mesh"] [dependencies] -bevy = { version = "0.17.3", default-features = false, features = ["std"] } +# Bevy crates +bevy_app = { version = "0.17.3", default-features = false } +bevy_derive = { version = "0.17.3", default-features = false } +bevy_ecs = { version = "0.17.3", default-features = false } +bevy_math = { version = "0.17.3", default-features = false } +bevy_reflect = { version = "0.17.3", default-features = false } +bevy_time = { version = "0.17.3", default-features = false } +bevy_transform = { version = "0.17.3", default-features = false } +bevy_platform = { version = "0.17.3", default-features = false, features = ["std"] } +bevy_log = { version = "0.17.3", default-features = false } +bevy_color = { version = "0.17.3", default-features = false } + +# Optional bevy crates for features +bevy_asset = { version = "0.17.3", default-features = false, optional = true } +bevy_scene = { version = "0.17.3", default-features = false, optional = true } +bevy_render = { version = "0.17.3", default-features = false, optional = true } +bevy_image = { version = "0.17.3", default-features = false, optional = true } +bevy_mesh = { version = "0.17.3", default-features = false, optional = true } +bevy_picking = { version = "0.17.3", default-features = false, optional = true } +bevy_camera = { version = "0.17.3", default-features = false, optional = true } +bevy_gizmos = { version = "0.17.3", default-features = false, optional = true } +bevy_sprite = { version = "0.17.3", default-features = false, optional = true } +bevy_pbr = { version = "0.17.3", default-features = false, optional = true } +bevy_core_pipeline = { version = "0.17.3", default-features = false, optional = true } + nalgebra = { version = "0.34.1", features = ["convert-glam030"] } rapier3d = "0.31.0" bitflags = "2.10.0" diff --git a/src/control/character_controller.rs b/src/control/character_controller.rs index 7d76c206..eae7198d 100644 --- a/src/control/character_controller.rs +++ b/src/control/character_controller.rs @@ -1,6 +1,6 @@ use crate::geometry::{Collider, CollisionGroups, ShapeCastHit}; use crate::math::{Real, Rot, Vect}; -use bevy::prelude::*; +use bevy_ecs::{component::Component, entity::Entity}; use crate::plugin::context::RapierContextColliders; pub use rapier::control::CharacterAutostep; diff --git a/src/dynamics/joint.rs b/src/dynamics/joint.rs index 6a794543..f3c59850 100644 --- a/src/dynamics/joint.rs +++ b/src/dynamics/joint.rs @@ -1,4 +1,5 @@ -use bevy::prelude::*; +use bevy_ecs::component::Component; +use bevy_ecs::entity::Entity; use rapier::dynamics::{ImpulseJointHandle, MultibodyJointHandle}; pub use rapier::dynamics::{JointAxesMask, JointAxis, MotorModel}; diff --git a/src/dynamics/mod.rs b/src/dynamics/mod.rs index 5b213141..26001b48 100644 --- a/src/dynamics/mod.rs +++ b/src/dynamics/mod.rs @@ -8,7 +8,7 @@ pub use self::revolute_joint::*; pub use self::rope_joint::*; pub use self::spring_joint::*; -use bevy::reflect::Reflect; +use bevy_reflect::Reflect; use rapier::dynamics::CoefficientCombineRule as RapierCoefficientCombineRule; #[cfg(feature = "dim3")] diff --git a/src/dynamics/revolute_joint.rs b/src/dynamics/revolute_joint.rs index 046b06b5..9fa4b236 100644 --- a/src/dynamics/revolute_joint.rs +++ b/src/dynamics/revolute_joint.rs @@ -1,7 +1,7 @@ use crate::dynamics::{GenericJoint, GenericJointBuilder}; use crate::math::{Real, Vect}; use crate::plugin::context::RapierRigidBodySet; -use bevy::prelude::Entity; +use bevy_ecs::entity::Entity; use rapier::dynamics::{ JointAxesMask, JointAxis, JointLimits, JointMotor, MotorModel, RigidBodyHandle, RigidBodySet, }; diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs index 87ff4f4b..eebfbde0 100644 --- a/src/dynamics/rigid_body.rs +++ b/src/dynamics/rigid_body.rs @@ -1,5 +1,7 @@ use crate::math::Vect; -use bevy::prelude::*; +use bevy_derive::Deref; +use bevy_ecs::prelude::*; +use bevy_reflect::prelude::*; use rapier::prelude::{ Isometry, LockedAxes as RapierLockedAxes, RigidBodyActivation, RigidBodyHandle, RigidBodyType, }; diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index b1dcf8b4..30f0079a 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -3,12 +3,13 @@ use std::fmt; #[cfg(all(feature = "dim3", feature = "async-collider"))] use { crate::geometry::{TriMeshFlags, VHACDParameters}, - bevy::platform::collections::HashMap, + bevy_platform::collections::HashMap, }; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_reflect::prelude::*; -use bevy::platform::collections::HashSet; +use bevy_platform::collections::HashSet; use rapier::geometry::Shape; use rapier::prelude::{ColliderHandle, InteractionGroups, InteractionTestMode, SharedShape}; diff --git a/src/geometry/collider_impl.rs b/src/geometry/collider_impl.rs index c3ef018a..06670864 100644 --- a/src/geometry/collider_impl.rs +++ b/src/geometry/collider_impl.rs @@ -1,10 +1,7 @@ +#[cfg(all(feature = "dim3", feature = "async-collider"))] +use bevy_mesh::{Indices, Mesh, VertexAttributeValues}; #[cfg(feature = "dim2")] use na::DVector; -#[cfg(all(feature = "dim3", feature = "async-collider"))] -use { - bevy::mesh::{Indices, VertexAttributeValues}, - bevy::prelude::*, -}; use rapier::{ parry::transformation::voxelization::FillMode, diff --git a/src/geometry/shape_views/voxels.rs b/src/geometry/shape_views/voxels.rs index e12d0342..c9647f7e 100644 --- a/src/geometry/shape_views/voxels.rs +++ b/src/geometry/shape_views/voxels.rs @@ -3,9 +3,9 @@ use rapier::prelude::{Aabb, VoxelData, VoxelState, Voxels}; use crate::math::{IVect, Vect}; #[cfg(feature = "dim2")] -use bevy::math::bounding::Aabb2d as BevyAabb; +use bevy_math::bounding::Aabb2d as BevyAabb; #[cfg(feature = "dim3")] -use bevy::math::bounding::Aabb3d as BevyAabb; +use bevy_math::bounding::Aabb3d as BevyAabb; fn aabb_na_from_bevy(aabb: &BevyAabb) -> Aabb { rapier::parry::bounding_volume::Aabb::new(aabb.min.into(), aabb.max.into()) diff --git a/src/geometry/to_bevy_mesh.rs b/src/geometry/to_bevy_mesh.rs index 5ad2ec6e..8ab69abd 100644 --- a/src/geometry/to_bevy_mesh.rs +++ b/src/geometry/to_bevy_mesh.rs @@ -1,20 +1,17 @@ -//! Module for utilities to convert from a [`rapier::prelude::Shape`] to a [`bevy::prelude::Mesh`]. +//! Module for utilities to convert from a [`rapier::prelude::Shape`] to a [`bevy_render::mesh::Mesh`]. use super::Collider; use crate::rapier::prelude::Ball; #[cfg(feature = "dim3")] use crate::rapier::prelude::{Cone, Cylinder}; +use bevy_asset::RenderAssetUsages; #[cfg(feature = "dim2")] -use bevy::mesh::{Capsule2dMeshBuilder, CircleMeshBuilder}; +use bevy_mesh::{Capsule2dMeshBuilder, CircleMeshBuilder}; #[cfg(feature = "dim3")] -use bevy::mesh::{ +use bevy_mesh::{ Capsule3dMeshBuilder, ConeMeshBuilder, CylinderMeshBuilder, PlaneMeshBuilder, SphereMeshBuilder, }; -use bevy::{ - asset::RenderAssetUsages, - mesh::Indices, - prelude::{Mesh, MeshBuilder}, -}; +use bevy_mesh::{Indices, Mesh, MeshBuilder}; use rapier::prelude::{Capsule, TypedShape}; /// Converts a [`TypedShape`] to a [`Mesh`]. @@ -28,9 +25,10 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { // FIXME: bevy 0.16 will expose a builder for cuboids: https://github.com/bevyengine/bevy/pull/17454 let half_extents = cuboid.half_extents; #[cfg(feature = "dim2")] - let mesh = bevy::prelude::Rectangle::new(half_extents.x * 2.0, half_extents.y * 2.0); + let mesh = + bevy_math::primitives::Rectangle::new(half_extents.x * 2.0, half_extents.y * 2.0); #[cfg(feature = "dim3")] - let mesh = bevy::prelude::Cuboid::new( + let mesh = bevy_math::primitives::Cuboid::new( half_extents.x * 2.0, half_extents.y * 2.0, half_extents.z * 2.0, @@ -49,13 +47,13 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { let b = triangle.b.coords; let c = triangle.c.coords; #[cfg(feature = "dim2")] - let mesh = bevy::prelude::Triangle3d::new( - bevy::prelude::Vec3::new(a.x, a.y, 0.0), - bevy::prelude::Vec3::new(b.x, b.y, 0.0), - bevy::prelude::Vec3::new(c.x, c.y, 0.0), + let mesh = bevy_math::primitives::Triangle3d::new( + bevy_math::Vec3::new(a.x, a.y, 0.0), + bevy_math::Vec3::new(b.x, b.y, 0.0), + bevy_math::Vec3::new(c.x, c.y, 0.0), ); #[cfg(feature = "dim3")] - let mesh = bevy::prelude::Triangle3d::new(a.into(), b.into(), c.into()); + let mesh = bevy_math::primitives::Triangle3d::new(a.into(), b.into(), c.into()); mesh.into() } @@ -65,7 +63,7 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { let (vtx, idx) = _voxels.to_outline(); let mesh = Mesh::new( - bevy::mesh::PrimitiveTopology::TriangleList, + bevy_mesh::PrimitiveTopology::TriangleList, RenderAssetUsages::default(), ) .with_inserted_indices(Indices::U32(idx.into_iter().flatten().collect())); @@ -94,7 +92,7 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { let vertices: Vec<_> = vertices.iter().map(|pos| [pos.x, pos.y, pos.z]).collect(); let indices = tri_mesh.indices(); let mesh = Mesh::new( - bevy::mesh::PrimitiveTopology::TriangleList, + bevy_mesh::PrimitiveTopology::TriangleList, RenderAssetUsages::default(), ) .with_inserted_indices(Indices::U32(indices.iter().cloned().flatten().collect())); @@ -126,7 +124,7 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { let (vtx, idx) = _height_field.to_trimesh(); let mesh = Mesh::new( - bevy::mesh::PrimitiveTopology::TriangleList, + bevy_mesh::PrimitiveTopology::TriangleList, RenderAssetUsages::default(), ) .with_inserted_indices(Indices::U32(idx.into_iter().flatten().collect())); @@ -164,7 +162,7 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { .flat_map(|i| vec![0, i, i + 1]) .collect::>(); let mesh = Mesh::new( - bevy::mesh::PrimitiveTopology::TriangleList, + bevy_mesh::PrimitiveTopology::TriangleList, RenderAssetUsages::default(), ) .with_inserted_indices(Indices::U32(indices)); @@ -179,7 +177,7 @@ pub fn typed_shape_to_mesh(typed_shape: &TypedShape) -> Option { .flat_map(|i| vec![0, i, i + 1]) .collect::>(); let mesh = Mesh::new( - bevy::mesh::PrimitiveTopology::TriangleList, + bevy_mesh::PrimitiveTopology::TriangleList, RenderAssetUsages::default(), ) .with_inserted_indices(Indices::U32(indices)); @@ -243,7 +241,7 @@ impl TryFrom<&Collider> for Mesh { /// Trait to convert a parry shape to a [`MeshBuilder`]. pub trait ToMeshBuilder { /// Specific [`MeshBuilder`] being returned. - type MeshBuilder: bevy::mesh::prelude::MeshBuilder; + type MeshBuilder: bevy_mesh::MeshBuilder; /// Returns a dedicated [`MeshBuilder`]. fn mesh_builder(&self) -> Self::MeshBuilder; } @@ -262,7 +260,7 @@ impl ToMeshBuilder for &Ball { type MeshBuilder = SphereMeshBuilder; fn mesh_builder(&self) -> Self::MeshBuilder { - SphereMeshBuilder::new(self.radius, bevy::mesh::SphereKind::Ico { subdivisions: 1 }) + SphereMeshBuilder::new(self.radius, bevy_mesh::SphereKind::Ico { subdivisions: 1 }) } } @@ -272,8 +270,8 @@ impl ToMeshBuilder for &rapier3d::prelude::HalfSpace { fn mesh_builder(&self) -> Self::MeshBuilder { PlaneMeshBuilder::new( - bevy::prelude::Dir3::new(self.normal.into()).unwrap_or(bevy::prelude::Dir3::Y), - bevy::prelude::Vec2::ONE, + bevy_math::Dir3::new(self.normal.into()).unwrap_or(bevy_math::Dir3::Y), + bevy_math::Vec2::ONE, ) } } @@ -283,7 +281,7 @@ impl ToMeshBuilder for &Capsule { type MeshBuilder = Capsule2dMeshBuilder; fn mesh_builder(&self) -> Self::MeshBuilder { - bevy::mesh::Capsule2dMeshBuilder::new(self.radius, self.height(), 10) + Capsule2dMeshBuilder::new(self.radius, self.height(), 10) } } @@ -292,7 +290,7 @@ impl ToMeshBuilder for &Capsule { type MeshBuilder = Capsule3dMeshBuilder; fn mesh_builder(&self) -> Self::MeshBuilder { - bevy::mesh::Capsule3dMeshBuilder::new(self.radius, self.height(), 10, 10) + Capsule3dMeshBuilder::new(self.radius, self.height(), 10, 10) } } #[cfg(feature = "dim3")] @@ -300,7 +298,7 @@ impl ToMeshBuilder for &Cone { type MeshBuilder = ConeMeshBuilder; fn mesh_builder(&self) -> Self::MeshBuilder { - bevy::mesh::ConeMeshBuilder::new(self.radius, self.half_height * 2.0, 16) + ConeMeshBuilder::new(self.radius, self.half_height * 2.0, 16) } } @@ -309,6 +307,6 @@ impl ToMeshBuilder for &Cylinder { type MeshBuilder = CylinderMeshBuilder; fn mesh_builder(&self) -> Self::MeshBuilder { - bevy::mesh::CylinderMeshBuilder::new(self.radius, self.half_height * 2.0, 16) + CylinderMeshBuilder::new(self.radius, self.half_height * 2.0, 16) } } diff --git a/src/lib.rs b/src/lib.rs index b6697910..b4aea0b1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,17 +21,18 @@ pub extern crate rapier2d as rapier; #[cfg(feature = "dim3")] pub extern crate rapier3d as rapier; pub use rapier::parry; + /// Type aliases to select the right vector/rotation types based /// on the dimension used by the engine. #[cfg(feature = "dim2")] pub mod math { - use bevy::math::Vec2; + use bevy_math::Vec2; /// The real type (f32 or f64). pub type Real = rapier::math::Real; /// The vector type. pub type Vect = Vec2; /// The integer vector type. - pub type IVect = bevy::math::IVec2; + pub type IVect = bevy_math::IVec2; /// The rotation type (in 2D this is an angle in radians). pub type Rot = Real; } @@ -40,13 +41,13 @@ pub mod math { /// on the dimension used by the engine. #[cfg(feature = "dim3")] pub mod math { - use bevy::math::{Quat, Vec3}; + use bevy_math::{Quat, Vec3}; /// The real type (f32 or f64). pub type Real = rapier::math::Real; /// The vector type. pub type Vect = Vec3; /// The integer vector type. - pub type IVect = bevy::math::IVec3; + pub type IVect = bevy_math::IVec3; /// The rotation type. pub type Rot = Quat; } diff --git a/src/picking_backend/mod.rs b/src/picking_backend/mod.rs index fbf70956..a3019b35 100644 --- a/src/picking_backend/mod.rs +++ b/src/picking_backend/mod.rs @@ -1,19 +1,20 @@ //! A picking backend for Rapier physics entities. //! //! By default, all colliders are pickable. Picking can be disabled for individual entities -//! by adding [`Pickable::IGNORE`](bevy::picking::Pickable::IGNORE). +//! by adding [`Pickable::IGNORE`](bevy_picking::Pickable::IGNORE). //! //! To make rapier picking entirely opt-in, set [`RapierPickingSettings::require_markers`] //! to `true` and add a [`RapierPickable`] component to the desired camera and target entities. -use bevy::app::prelude::*; -use bevy::camera::visibility::{InheritedVisibility, RenderLayers}; -use bevy::ecs::prelude::*; -use bevy::picking::backend::ray::RayMap; -use bevy::picking::backend::HitData; -use bevy::picking::backend::PointerHits; -use bevy::picking::{PickingPlugin, PickingSystems}; -use bevy::prelude::*; +use bevy_app::prelude::*; +use bevy_camera::visibility::{InheritedVisibility, RenderLayers, ViewVisibility}; +use bevy_camera::Camera; +use bevy_ecs::prelude::*; +use bevy_picking::backend::ray::RayMap; +use bevy_picking::backend::HitData; +use bevy_picking::backend::PointerHits; +use bevy_picking::{PickingPlugin, PickingSystems}; +use bevy_reflect::prelude::*; use rapier::parry::query::DefaultQueryDispatcher; /// How a ray cast should handle [`Visibility`]. @@ -141,11 +142,11 @@ pub fn update_hits( |query_pipeline| { #[cfg(feature = "dim2")] for entity in query_pipeline - .intersect_point(bevy::math::Vec2::new(ray.origin.x, ray.origin.y)) + .intersect_point(bevy_math::Vec2::new(ray.origin.x, ray.origin.y)) { let hit_data = HitData { camera: ray_id.camera, - position: Some(bevy::math::Vec3::new(ray.origin.x, ray.origin.y, 0.0)), + position: Some(bevy_math::Vec3::new(ray.origin.x, ray.origin.y, 0.0)), normal: None, depth: 0.0, }; diff --git a/src/pipeline/events.rs b/src/pipeline/events.rs index e587a6c9..4ed79189 100644 --- a/src/pipeline/events.rs +++ b/src/pipeline/events.rs @@ -1,6 +1,6 @@ use crate::math::{Real, Vect}; -use bevy::ecs::message::Message; -use bevy::prelude::Entity; +use bevy_ecs::entity::Entity; +use bevy_ecs::message::Message; use rapier::dynamics::RigidBodySet; use rapier::geometry::{ ColliderHandle, ColliderSet, CollisionEvent as RapierCollisionEvent, CollisionEventFlags, diff --git a/src/pipeline/physics_hooks.rs b/src/pipeline/physics_hooks.rs index 516252b4..3ddc839c 100644 --- a/src/pipeline/physics_hooks.rs +++ b/src/pipeline/physics_hooks.rs @@ -1,4 +1,4 @@ -use bevy::{ecs::system::SystemParam, prelude::*}; +use bevy_ecs::{entity::Entity, system::SystemParam}; use rapier::{ pipeline::{ContactModificationContext, PairFilterContext}, prelude::{PhysicsHooks, SolverFlags}, diff --git a/src/pipeline/query_filter.rs b/src/pipeline/query_filter.rs index dc26760c..2a3c57f7 100644 --- a/src/pipeline/query_filter.rs +++ b/src/pipeline/query_filter.rs @@ -1,4 +1,4 @@ -use bevy::prelude::Entity; +use bevy_ecs::entity::Entity; pub use rapier::pipeline::QueryFilterFlags; diff --git a/src/plugin/configuration.rs b/src/plugin/configuration.rs index e151ed4d..d1908b13 100644 --- a/src/plugin/configuration.rs +++ b/src/plugin/configuration.rs @@ -1,9 +1,7 @@ //! Components used to configure a simulation run by rapier, these are not modified by bevy_rapier. -use bevy::{ - prelude::{Component, Resource}, - reflect::Reflect, -}; +use bevy_ecs::prelude::*; +use bevy_reflect::Reflect; use crate::math::{Real, Vect}; diff --git a/src/plugin/context/mod.rs b/src/plugin/context/mod.rs index aadd35e1..9e2656e7 100644 --- a/src/plugin/context/mod.rs +++ b/src/plugin/context/mod.rs @@ -2,7 +2,11 @@ pub mod systemparams; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_math::bounding; +use bevy_reflect::Reflect; +use bevy_time::Time; +use bevy_transform::components::GlobalTransform; use rapier::parry::query::QueryDispatcher; use std::collections::HashMap; use std::sync::RwLock; @@ -17,7 +21,6 @@ use rapier::prelude::{ use crate::geometry::{PointProjection, RayIntersection, ShapeCastHit}; use crate::math::{Rot, Vect}; use crate::pipeline::{CollisionEvent, ContactForceEvent, EventQueue}; -use bevy::prelude::{Entity, GlobalTransform, Query}; use crate::control::{CharacterCollision, MoveShapeOptions, MoveShapeOutput}; use crate::dynamics::TransformInterpolation; @@ -460,8 +463,8 @@ impl<'a> RapierQueryPipeline<'a> { /// pipeline’s BVH. It doesn’t recompute the latest collider AABB. pub fn intersect_aabb_conservative( &'a self, - #[cfg(feature = "dim2")] aabb: bevy::math::bounding::Aabb2d, - #[cfg(feature = "dim3")] aabb: bevy::math::bounding::Aabb3d, + #[cfg(feature = "dim2")] aabb: bounding::Aabb2d, + #[cfg(feature = "dim3")] aabb: bounding::Aabb3d, ) -> impl Iterator + 'a { let scaled_aabb = Aabb { mins: aabb.min.into(), diff --git a/src/plugin/context/systemparams/mod.rs b/src/plugin/context/systemparams/mod.rs index e86c90a4..0b4d8e93 100644 --- a/src/plugin/context/systemparams/mod.rs +++ b/src/plugin/context/systemparams/mod.rs @@ -1,11 +1,11 @@ //! Helper types to ease bevy_rapier API usage, grouping often used together components -//! through [`bevy::ecs::query::QueryData`] or [`bevy::ecs::system::SystemParam`] to +//! through [`bevy_ecs::query::QueryData`] or [`bevy_ecs::system::SystemParam`] to //! avoid writing too much boilerplate: shorter parameters for your systems, //! and pass less parameters to bey_rapier lower level functions. mod rapier_context_systemparam; -use bevy::{ecs::query::QueryData, prelude::Entity}; +use bevy_ecs::{entity::Entity, query::QueryData}; pub use rapier_context_systemparam::*; use super::RapierContextEntityLink; diff --git a/src/plugin/context/systemparams/rapier_context_systemparam.rs b/src/plugin/context/systemparams/rapier_context_systemparam.rs index f9e8a4d3..d36d4cbb 100644 --- a/src/plugin/context/systemparams/rapier_context_systemparam.rs +++ b/src/plugin/context/systemparams/rapier_context_systemparam.rs @@ -1,8 +1,13 @@ use crate::math::{Rot, Vect}; -use bevy::ecs::{query, system::SystemParam}; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::query::{QueryData, QueryFilter, QuerySingleError}; +use bevy_ecs::system::SystemParam; +use bevy_time::Time; use rapier::prelude::Real; +/// A result type for single query operations returning [`QuerySingleError`] on failure. +pub type QuerySingleResult = std::result::Result; + pub(crate) const RAPIER_CONTEXT_EXPECT_ERROR: &str = "RapierContextEntityLink.0 refers to an entity missing components from RapierContextSimulation."; @@ -15,7 +20,7 @@ use crate::plugin::context::{ /// /// This uses the [`DefaultRapierContext`] filter by default, but you can use a custom query filter with the `T` type parameter. #[derive(SystemParam)] -pub struct ReadRapierContext<'w, 's, T: query::QueryFilter + 'static = With> { +pub struct ReadRapierContext<'w, 's, T: QueryFilter + 'static = With> { /// The query used to feed components into [`RapierContext`] struct through [`ReadRapierContext::single`]. pub rapier_context: Query< 'w, @@ -30,13 +35,13 @@ pub struct ReadRapierContext<'w, 's, T: query::QueryFilter + 'static = With, } -impl<'w, 's, T: query::QueryFilter + 'static> ReadRapierContext<'w, 's, T> { +impl<'w, 's, T: QueryFilter + 'static> ReadRapierContext<'w, 's, T> { /// Returns a single [`RapierContext`] corresponding to the filter (T) of [`ReadRapierContext`]. /// - /// If the number of query items is not exactly one, a [`bevy::ecs::query::QuerySingleError`] is returned instead. + /// If the number of query items is not exactly one, a [`bevy_ecs::query::QuerySingleError`] is returned instead. /// /// You can also use the underlying query [`ReadRapierContext::rapier_context`] for finer grained queries. - pub fn single(&self) -> Result> { + pub fn single(&self) -> QuerySingleResult> { let (simulation, colliders, joints, rigidbody_set) = self.rapier_context.single()?; Ok(RapierContext { simulation, @@ -52,7 +57,7 @@ impl<'w, 's, T: query::QueryFilter + 'static> ReadRapierContext<'w, 's, T> { /// /// Note: This is not a component, refer to [`ReadRapierContext`], [`WriteRapierContext`], or [`RapierContextSimulation`] #[cfg_attr(feature = "serde-serialize", derive(Serialize))] -#[derive(query::QueryData)] +#[derive(QueryData)] pub struct RapierContext<'a> { /// The Rapier context, containing all the state of the physics engine. pub simulation: &'a RapierContextSimulation, @@ -68,8 +73,7 @@ pub struct RapierContext<'a> { /// /// This uses the [`DefaultRapierContext`] filter by default, but you can use a custom query filter with the `T` type parameter. #[derive(SystemParam)] -pub struct WriteRapierContext<'w, 's, T: query::QueryFilter + 'static = With> -{ +pub struct WriteRapierContext<'w, 's, T: QueryFilter + 'static = With> { /// The query used to feed components into [`RapierContext`] struct through [`ReadRapierContext::single`]. pub rapier_context: Query< 'w, @@ -84,13 +88,13 @@ pub struct WriteRapierContext<'w, 's, T: query::QueryFilter + 'static = With, } -impl<'w, 's, T: query::QueryFilter + 'static> WriteRapierContext<'w, 's, T> { +impl<'w, 's, T: QueryFilter + 'static> WriteRapierContext<'w, 's, T> { /// Returns a single [`RapierContext`] corresponding to the filter (T) of [`WriteRapierContext`]. /// - /// If the number of query items is not exactly one, a [`bevy::ecs::query::QuerySingleError`] is returned instead. + /// If the number of query items is not exactly one, a [`bevy_ecs::query::QuerySingleError`] is returned instead. /// /// You can also use the underlying query [`WriteRapierContext::rapier_context`] for finer grained queries. - pub fn single(&self) -> Result> { + pub fn single(&self) -> QuerySingleResult> { let (simulation, colliders, joints, rigidbody_set) = self.rapier_context.single()?; Ok(RapierContext { simulation, @@ -102,10 +106,10 @@ impl<'w, 's, T: query::QueryFilter + 'static> WriteRapierContext<'w, 's, T> { /// Returns a single mutable [`RapierContextMut`] corresponding to the filter (T) of [`WriteRapierContext`]. /// - /// If the number of query items is not exactly one, a [`bevy::ecs::query::QuerySingleError`] is returned instead. + /// If the number of query items is not exactly one, a [`bevy_ecs::query::QuerySingleError`] is returned instead. /// /// You can also use the underlying query [`WriteRapierContext::rapier_context`] for finer grained queries. - pub fn single_mut(&mut self) -> Result> { + pub fn single_mut(&mut self) -> QuerySingleResult> { let (simulation, colliders, joints, rigidbody_set) = self.rapier_context.single_mut()?; Ok(RapierContextMut { simulation, @@ -397,8 +401,8 @@ mod query_pipeline { /// Shortcut to [`RapierQueryPipeline::intersect_aabb_conservative`]. pub fn intersect_aabb_conservative( &self, - #[cfg(feature = "dim2")] aabb: bevy::math::bounding::Aabb2d, - #[cfg(feature = "dim3")] aabb: bevy::math::bounding::Aabb3d, + #[cfg(feature = "dim2")] aabb: bevy_math::bounding::Aabb2d, + #[cfg(feature = "dim3")] aabb: bevy_math::bounding::Aabb3d, filter: QueryFilter, mut callback: impl FnMut(Entity) -> bool, ) { @@ -532,8 +536,8 @@ mod query_pipeline { /// Shortcut to [`RapierQueryPipeline::intersect_aabb_conservative`]. pub fn intersect_aabb_conservative( &self, - #[cfg(feature = "dim2")] aabb: bevy::math::bounding::Aabb2d, - #[cfg(feature = "dim3")] aabb: bevy::math::bounding::Aabb3d, + #[cfg(feature = "dim2")] aabb: bevy_math::bounding::Aabb2d, + #[cfg(feature = "dim3")] aabb: bevy_math::bounding::Aabb3d, filter: QueryFilter, mut callback: impl FnMut(Entity) -> bool, ) { diff --git a/src/plugin/narrow_phase.rs b/src/plugin/narrow_phase.rs index f37ea577..a65de325 100644 --- a/src/plugin/narrow_phase.rs +++ b/src/plugin/narrow_phase.rs @@ -1,6 +1,6 @@ use crate::math::{Real, Vect}; use crate::plugin::context::{RapierContextColliders, RapierContextSimulation, RapierRigidBodySet}; -use bevy::prelude::*; +use bevy_ecs::entity::Entity; use rapier::geometry::{Contact, ContactManifold, ContactPair, SolverContact, SolverFlags}; impl RapierContextSimulation { diff --git a/src/plugin/plugin.rs b/src/plugin/plugin.rs index f533ff96..4de4c9b6 100644 --- a/src/plugin/plugin.rs +++ b/src/plugin/plugin.rs @@ -1,14 +1,15 @@ use crate::pipeline::{CollisionEvent, ContactForceEvent}; use crate::prelude::*; use crate::reflect::{IntegrationParametersWrapper, SpringCoefficientsWrapper}; -use bevy::app::DynEq; -use bevy::ecs::{ - intern::Interned, - schedule::{IntoScheduleConfigs, ScheduleConfigs, ScheduleLabel}, - system::{ScheduleSystem, SystemParamItem}, -}; -use bevy::platform::collections::HashSet; -use bevy::{prelude::*, transform::TransformSystems}; +use bevy_app::{App, DynEq, FixedUpdate, Plugin, PostUpdate, PreStartup}; +use bevy_ecs::intern::Interned; +use bevy_ecs::prelude::*; +use bevy_ecs::schedule::{IntoScheduleConfigs, ScheduleConfigs, ScheduleLabel}; +use bevy_ecs::system::{ScheduleSystem, SystemParamItem}; +use bevy_platform::collections::HashSet; +use bevy_reflect::Reflect; + +use bevy_transform::TransformSystems; use rapier::dynamics::IntegrationParameters; use std::marker::PhantomData; @@ -89,7 +90,7 @@ where default_world_setup: RapierContextInitialization::default_with_length_unit( pixels_per_meter, ), - ..default() + ..Default::default() } } @@ -137,8 +138,8 @@ where .in_set(PhysicsSet::SyncBackend), // Run Bevy transform propagation additionally to sync [`GlobalTransform`] ( - bevy::transform::systems::sync_simple_transforms, - bevy::transform::systems::propagate_parent_transforms, + bevy_transform::systems::sync_simple_transforms, + bevy_transform::systems::propagate_parent_transforms, ) .chain() .in_set(RapierTransformPropagateSet), @@ -194,7 +195,7 @@ pub struct RapierBevyComponentApply; /// A set for rapier's copy of Bevy's transform propagation systems. /// -/// See [`TransformSystems`](bevy::transform::TransformSystems::Propagate). +/// See [`TransformSystems`](bevy_transform::TransformSystem::Propagate). #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] pub struct RapierTransformPropagateSet; @@ -343,7 +344,9 @@ where fn finish(&self, _app: &mut App) { #[cfg(all(feature = "dim3", feature = "async-collider"))] { - use bevy::{asset::AssetPlugin, mesh::MeshPlugin, scene::ScenePlugin}; + use bevy_asset::AssetPlugin; + use bevy_mesh::MeshPlugin; + use bevy_scene::ScenePlugin; if !_app.is_plugin_added::() { _app.add_plugins(AssetPlugin::default()); } @@ -396,7 +399,7 @@ impl RapierContextInitialization { pub fn default_with_length_unit(length_unit: f32) -> Self { let integration_parameters = IntegrationParameters { length_unit, - ..default() + ..Default::default() }; RapierContextInitialization::InitializeDefaultRapierContext { diff --git a/src/plugin/systems/character_controller.rs b/src/plugin/systems/character_controller.rs index 9d10f9e0..a187de7b 100644 --- a/src/plugin/systems/character_controller.rs +++ b/src/plugin/systems/character_controller.rs @@ -10,7 +10,8 @@ use crate::prelude::context::RapierRigidBodySet; use crate::prelude::KinematicCharacterController; use crate::prelude::KinematicCharacterControllerOutput; use crate::utils; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_transform::prelude::*; use rapier::math::Isometry; use rapier::math::Real; use rapier::parry::query::DefaultQueryDispatcher; diff --git a/src/plugin/systems/collider.rs b/src/plugin/systems/collider.rs index 423f3071..690aefaf 100644 --- a/src/plugin/systems/collider.rs +++ b/src/plugin/systems/collider.rs @@ -13,17 +13,20 @@ use crate::prelude::{ RapierRigidBodyHandle, Restitution, Sensor, SolverGroups, }; use crate::utils; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_transform::prelude::*; use rapier::dynamics::RigidBodyHandle; use rapier::geometry::ColliderBuilder; #[cfg(all(feature = "dim3", feature = "async-collider"))] use { crate::prelude::{AsyncCollider, AsyncSceneCollider}, - bevy::scene::SceneInstance, + bevy_asset::Assets, + bevy_mesh::{Mesh, Mesh3d}, + bevy_scene::{SceneInstance, SceneSpawner}, }; #[cfg(feature = "dim2")] -use bevy::math::Vec3Swizzles; +use bevy_math::Vec3Swizzles; /// Components related to colliders. pub type ColliderComponents<'a> = ( @@ -345,7 +348,7 @@ pub(crate) fn collider_offset( if let Ok(transform) = transform_query.get(body_entity) { let scale_transform = Transform { scale: transform.scale, - ..default() + ..Default::default() }; child_transform = scale_transform * child_transform; @@ -600,7 +603,11 @@ pub mod test { #[cfg(all(feature = "dim3", feature = "async-collider"))] fn async_collider_initializes() { use super::*; - use bevy::{mesh::MeshPlugin, scene::ScenePlugin}; + use bevy_app::{App, Update}; + use bevy_asset::AssetPlugin; + use bevy_math::primitives::Cuboid; + use bevy_mesh::MeshPlugin; + use bevy_scene::ScenePlugin; let mut app = App::new(); app.add_plugins((AssetPlugin::default(), MeshPlugin, ScenePlugin)); @@ -633,7 +640,14 @@ pub mod test { #[cfg(all(feature = "dim3", feature = "async-collider"))] fn async_scene_collider_initializes() { use super::*; - use bevy::{mesh::MeshPlugin, scene::ScenePlugin}; + use bevy_app::{App, PostUpdate}; + use bevy_asset::AssetPlugin; + use bevy_ecs::world::World; + use bevy_ecs::name::Name; + use bevy_math::primitives::{Capsule3d, Cuboid}; + use bevy_mesh::MeshPlugin; + use bevy_platform::collections::HashMap; + use bevy_scene::{Scene, ScenePlugin, SceneRoot}; let mut app = App::new(); app.add_plugins((AssetPlugin::default(), MeshPlugin, ScenePlugin)); @@ -654,7 +668,7 @@ pub mod test { let mut scenes = app.world_mut().resource_mut::>(); let scene = scenes.add(Scene::new(World::new())); - let mut named_shapes = bevy::platform::collections::HashMap::default(); + let mut named_shapes = HashMap::default(); named_shapes.insert("Capsule".to_string(), None); let parent = app .world_mut() diff --git a/src/plugin/systems/joint.rs b/src/plugin/systems/joint.rs index 08185a93..a1664500 100644 --- a/src/plugin/systems/joint.rs +++ b/src/plugin/systems/joint.rs @@ -7,7 +7,7 @@ use crate::plugin::context::DefaultRapierContext; use crate::plugin::context::RapierContextEntityLink; use crate::plugin::context::RapierContextJoints; use crate::plugin::context::RapierRigidBodySet; -use bevy::prelude::*; +use bevy_ecs::prelude::*; /// System responsible for creating new Rapier joints from the related `bevy_rapier` components. pub fn init_joints( diff --git a/src/plugin/systems/mod.rs b/src/plugin/systems/mod.rs index e04384c3..f409b4bf 100644 --- a/src/plugin/systems/mod.rs +++ b/src/plugin/systems/mod.rs @@ -21,8 +21,9 @@ use crate::pipeline::{CollisionEvent, ContactForceEvent}; use crate::plugin::context::SimulationToRenderTime; use crate::plugin::{RapierConfiguration, TimestepMode}; use crate::prelude::{BevyPhysicsHooks, BevyPhysicsHooksAdapter}; -use bevy::ecs::system::{StaticSystemParam, SystemParamItem}; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::system::{StaticSystemParam, SystemParamItem}; +use bevy_time::Time; use super::context::{ RapierContextColliders, RapierContextJoints, RapierContextSimulation, RapierRigidBodySet, @@ -86,7 +87,11 @@ pub fn step_simulation( #[cfg(test)] #[allow(missing_docs)] pub mod tests { - use bevy::time::TimePlugin; + use bevy_app::{App, Update}; + use bevy_math::{Quat, Vec3}; + use bevy_time::TimePlugin; + use bevy_transform::components::GlobalTransform; + use bevy_transform::{TransformPlugin, components::Transform}; use rapier::geometry::CollisionEventFlags; use std::f32::consts::PI; diff --git a/src/plugin/systems/multiple_rapier_contexts.rs b/src/plugin/systems/multiple_rapier_contexts.rs index 2b366d50..a0043e29 100644 --- a/src/plugin/systems/multiple_rapier_contexts.rs +++ b/src/plugin/systems/multiple_rapier_contexts.rs @@ -8,7 +8,7 @@ use crate::plugin::context::RapierRigidBodySet; use crate::plugin::context::{ RapierContextColliders, RapierContextEntityLink, RapierContextJoints, }; -use bevy::prelude::*; +use bevy_ecs::prelude::*; /// If an entity is turned into the child of something with a physics context link, /// the child should become a part of that physics context diff --git a/src/plugin/systems/remove.rs b/src/plugin/systems/remove.rs index b0dda53f..46120ed1 100644 --- a/src/plugin/systems/remove.rs +++ b/src/plugin/systems/remove.rs @@ -13,8 +13,8 @@ use crate::plugin::context::{ use crate::prelude::MassModifiedEvent; use crate::prelude::RigidBodyDisabled; use crate::prelude::Sensor; -use bevy::ecs::query::QueryData; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::query::QueryData; /// System responsible for removing from Rapier the rigid-bodies/colliders/joints which had /// their related `bevy_rapier` components removed by the user (through component removal or diff --git a/src/plugin/systems/rigid_body.rs b/src/plugin/systems/rigid_body.rs index e5401d8b..914d7757 100644 --- a/src/plugin/systems/rigid_body.rs +++ b/src/plugin/systems/rigid_body.rs @@ -6,7 +6,8 @@ use crate::plugin::context::{ use crate::plugin::{configuration::TimestepMode, RapierConfiguration}; use crate::{dynamics::RigidBody, plugin::context::SimulationToRenderTime}; use crate::{prelude::*, utils}; -use bevy::prelude::*; +use bevy_ecs::prelude::*; +use bevy_transform::prelude::*; use rapier::dynamics::{RigidBodyBuilder, RigidBodyHandle, RigidBodyType}; use std::collections::HashMap; diff --git a/src/plugin/systems/writeback.rs b/src/plugin/systems/writeback.rs index d7b15cd4..f539e515 100644 --- a/src/plugin/systems/writeback.rs +++ b/src/plugin/systems/writeback.rs @@ -3,7 +3,7 @@ use crate::dynamics::ReadMassProperties; use crate::plugin::context::{RapierContextEntityLink, RapierRigidBodySet}; use crate::plugin::RapierConfiguration; use crate::prelude::MassModifiedEvent; -use bevy::prelude::*; +use bevy_ecs::prelude::*; /// System responsible for writing updated mass properties back into the [`ReadMassProperties`] component. pub fn writeback_mass_properties( diff --git a/src/reflect/mod.rs b/src/reflect/mod.rs index 1db98e64..c44e64d7 100644 --- a/src/reflect/mod.rs +++ b/src/reflect/mod.rs @@ -1,5 +1,5 @@ use crate::math::Real; -use bevy::reflect::reflect_remote; +use bevy_reflect::reflect_remote; use rapier::{dynamics::IntegrationParameters, prelude::SpringCoefficients}; #[cfg(feature = "dim3")] diff --git a/src/render/mod.rs b/src/render/mod.rs index 1b2fdce5..fbda6596 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -1,8 +1,12 @@ use crate::plugin::context::{ RapierContextColliders, RapierContextJoints, RapierContextSimulation, RapierRigidBodySet, }; -use bevy::prelude::*; -use bevy::transform::TransformSystems; +use bevy_app::{App, Plugin, PostUpdate}; +use bevy_color::{Color, ColorToComponents, Hsla}; +use bevy_ecs::prelude::*; +use bevy_gizmos::gizmos::Gizmos; +use bevy_reflect::Reflect; +use bevy_transform::TransformSystems; use rapier::math::{Point, Real}; use rapier::pipeline::{DebugRenderBackend, DebugRenderObject, DebugRenderPipeline}; pub use rapier::pipeline::{DebugRenderMode, DebugRenderStyle}; diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 19b970f6..1aefc033 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,4 +1,4 @@ -use bevy::prelude::Transform; +use bevy_transform::components::Transform; use rapier::math::{Isometry, Real}; /// Converts a Rapier isometry to a Bevy transform. @@ -6,7 +6,7 @@ use rapier::math::{Isometry, Real}; pub fn iso_to_transform(iso: &Isometry) -> Transform { Transform { translation: iso.translation.vector.push(0.0).into(), - rotation: bevy::prelude::Quat::from_rotation_z(iso.rotation.angle()), + rotation: bevy_math::Quat::from_rotation_z(iso.rotation.angle()), ..Default::default() } } @@ -24,7 +24,7 @@ pub fn iso_to_transform(iso: &Isometry) -> Transform { /// Converts a Bevy transform to a Rapier isometry. #[cfg(feature = "dim2")] pub(crate) fn transform_to_iso(transform: &Transform) -> Isometry { - use bevy::math::Vec3Swizzles; + use bevy_math::Vec3Swizzles; Isometry::new( transform.translation.xy().into(), transform.rotation.to_scaled_axis().z, From 0f9302cd118d892482bdeff6e39ef9bc56240e23 Mon Sep 17 00:00:00 2001 From: lizelive Date: Thu, 27 Nov 2025 13:46:37 -0800 Subject: [PATCH 2/8] picking-backend shouldn't need render Co-authored-by: atlv --- bevy_rapier2d/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bevy_rapier2d/Cargo.toml b/bevy_rapier2d/Cargo.toml index f527ae49..0d2bb782 100644 --- a/bevy_rapier2d/Cargo.toml +++ b/bevy_rapier2d/Cargo.toml @@ -54,7 +54,7 @@ simd-nightly = ["rapier2d/simd-nightly"] serde-serialize = ["rapier2d/serde-serialize", "bevy_ecs/serialize", "serde"] enhanced-determinism = ["rapier2d/enhanced-determinism"] headless = [] -picking-backend = ["bevy_picking", "bevy_render", "bevy_camera"] +picking-backend = ["bevy_picking", "bevy_camera"] async-collider = [ "bevy_asset", "bevy_scene", From 38d3cecabfc82d431178a765efd0f7f668e40dc8 Mon Sep 17 00:00:00 2001 From: lizelive Date: Thu, 27 Nov 2025 13:46:59 -0800 Subject: [PATCH 3/8] to-bevy-mesh shouldn't need render Co-authored-by: atlv --- bevy_rapier2d/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bevy_rapier2d/Cargo.toml b/bevy_rapier2d/Cargo.toml index 0d2bb782..a82508e9 100644 --- a/bevy_rapier2d/Cargo.toml +++ b/bevy_rapier2d/Cargo.toml @@ -61,7 +61,7 @@ async-collider = [ "bevy_render", "bevy_image", ] -to-bevy-mesh = ["bevy_render", "bevy_asset", "bevy_mesh"] +to-bevy-mesh = ["bevy_asset", "bevy_mesh"] [dependencies] # Bevy crates From 5420d7f889613500f1f1327d0b07d69f6984a31e Mon Sep 17 00:00:00 2001 From: lizelive Date: Tue, 23 Dec 2025 07:31:37 -0800 Subject: [PATCH 4/8] Update bevy_rapier3d/Cargo.toml Co-authored-by: atlv --- bevy_rapier3d/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/bevy_rapier3d/Cargo.toml b/bevy_rapier3d/Cargo.toml index 1623aeb5..264bb069 100644 --- a/bevy_rapier3d/Cargo.toml +++ b/bevy_rapier3d/Cargo.toml @@ -80,7 +80,6 @@ bevy_color = { version = "0.17.3", default-features = false } # Optional bevy crates for features bevy_asset = { version = "0.17.3", default-features = false, optional = true } bevy_scene = { version = "0.17.3", default-features = false, optional = true } -bevy_render = { version = "0.17.3", default-features = false, optional = true } bevy_image = { version = "0.17.3", default-features = false, optional = true } bevy_mesh = { version = "0.17.3", default-features = false, optional = true } bevy_picking = { version = "0.17.3", default-features = false, optional = true } From 9be817bb6997038ec8b79ab90571b77e5331300e Mon Sep 17 00:00:00 2001 From: lizelive Date: Tue, 23 Dec 2025 07:31:54 -0800 Subject: [PATCH 5/8] Update bevy_rapier3d/Cargo.toml Co-authored-by: atlv --- bevy_rapier3d/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bevy_rapier3d/Cargo.toml b/bevy_rapier3d/Cargo.toml index 264bb069..e82b139c 100644 --- a/bevy_rapier3d/Cargo.toml +++ b/bevy_rapier3d/Cargo.toml @@ -62,7 +62,7 @@ async-collider = [ "bevy_render", "bevy_image", ] -to-bevy-mesh = ["bevy_render", "bevy_asset", "bevy_mesh"] +to-bevy-mesh = ["bevy_asset", "bevy_mesh"] [dependencies] # Bevy crates From fe299e8ef685c4d01eb205bf832f29650e27dcd9 Mon Sep 17 00:00:00 2001 From: lizelive Date: Tue, 23 Dec 2025 07:32:03 -0800 Subject: [PATCH 6/8] Update bevy_rapier3d/Cargo.toml Co-authored-by: atlv --- bevy_rapier3d/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bevy_rapier3d/Cargo.toml b/bevy_rapier3d/Cargo.toml index e82b139c..9ec764c2 100644 --- a/bevy_rapier3d/Cargo.toml +++ b/bevy_rapier3d/Cargo.toml @@ -55,7 +55,7 @@ simd-nightly = ["rapier3d/simd-nightly"] serde-serialize = ["rapier3d/serde-serialize", "bevy_ecs/serialize", "serde"] enhanced-determinism = ["rapier3d/enhanced-determinism"] headless = [] -picking-backend = ["bevy_picking", "bevy_render", "bevy_camera"] +picking-backend = ["bevy_picking", "bevy_camera"] async-collider = [ "bevy_asset", "bevy_scene", From 102c9f08a83fe398d6bcdecb9a034ad6f8cc1a5d Mon Sep 17 00:00:00 2001 From: lizelive Date: Tue, 23 Dec 2025 07:32:16 -0800 Subject: [PATCH 7/8] Update bevy_rapier2d/Cargo.toml Co-authored-by: atlv --- bevy_rapier2d/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/bevy_rapier2d/Cargo.toml b/bevy_rapier2d/Cargo.toml index a82508e9..8a8b6439 100644 --- a/bevy_rapier2d/Cargo.toml +++ b/bevy_rapier2d/Cargo.toml @@ -79,7 +79,6 @@ bevy_color = { version = "0.17.3", default-features = false } # Optional bevy crates for features bevy_asset = { version = "0.17.3", default-features = false, optional = true } bevy_scene = { version = "0.17.3", default-features = false, optional = true } -bevy_render = { version = "0.17.3", default-features = false, optional = true } bevy_image = { version = "0.17.3", default-features = false, optional = true } bevy_mesh = { version = "0.17.3", default-features = false, optional = true } bevy_picking = { version = "0.17.3", default-features = false, optional = true } From 9cd3a630452390cb80f982f24b01529a0b92e37b Mon Sep 17 00:00:00 2001 From: lizelive Date: Tue, 23 Dec 2025 16:13:12 +0000 Subject: [PATCH 8/8] remove unwanted renderer deps --- bevy_rapier2d/Cargo.toml | 1 - bevy_rapier3d/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/bevy_rapier2d/Cargo.toml b/bevy_rapier2d/Cargo.toml index f211606a..46112ddc 100644 --- a/bevy_rapier2d/Cargo.toml +++ b/bevy_rapier2d/Cargo.toml @@ -58,7 +58,6 @@ picking-backend = ["bevy_picking", "bevy_camera"] async-collider = [ "bevy_asset", "bevy_scene", - "bevy_render", "bevy_image", ] to-bevy-mesh = ["bevy_asset", "bevy_mesh"] diff --git a/bevy_rapier3d/Cargo.toml b/bevy_rapier3d/Cargo.toml index 0f0897cf..cc3fd7eb 100644 --- a/bevy_rapier3d/Cargo.toml +++ b/bevy_rapier3d/Cargo.toml @@ -59,7 +59,6 @@ picking-backend = ["bevy_picking", "bevy_camera"] async-collider = [ "bevy_asset", "bevy_scene", - "bevy_render", "bevy_image", ] to-bevy-mesh = ["bevy_asset", "bevy_mesh"]