diff --git a/Cargo.toml b/Cargo.toml index 2ce5f9b..1055be7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,24 +3,24 @@ members = ["bevy_quadtree"] resolver = "2" [workspace.package] -version = "0.15.2" +version = "0.16.0" authors = ["Louis <836250617@qq.com>"] description = "A quadtree plugin for bevy" license = "MIT" -edition = "2021" +edition = "2024" repository = "https://github.com/kingwingfly/bevy_quadtree" documentation = "https://docs.rs/bevy_quadtree" [workspace.dependencies] bevy_quadtree = { path = "bevy_quadtree" } -bevy_app = { version = "0.15.2", default-features = false } -bevy_ecs = { version = "0.15.2", default-features = false } -bevy_math = { version = "0.15.2", default-features = false } -bevy_gizmos = { version = "0.15.2", default-features = false } -bevy_sprite = { version = "0.15.2", default-features = false } -bevy_transform = { version = "0.15.2", default-features = false } -bevy_color = { version = "0.15.2", default-features = false } -bevy_log = { version = "0.15.2", default-features = false } +bevy_app = { version = "0.16.0", default-features = false } +bevy_ecs = { version = "0.16.0", default-features = false } +bevy_math = { version = "0.16.0", default-features = true } +bevy_gizmos = { version = "0.16.0", default-features = false } +bevy_sprite = { version = "0.16.0", default-features = false } +bevy_transform = { version = "0.16.0", default-features = false } +bevy_color = { version = "0.16.0", default-features = false } +bevy_log = { version = "0.16.0", default-features = false } [profile.dev] diff --git a/bevy_quadtree/README.md b/bevy_quadtree/README.md index 101f52b..466c7d4 100644 --- a/bevy_quadtree/README.md +++ b/bevy_quadtree/README.md @@ -105,7 +105,7 @@ The QuadTree's type params is simplified to only `ID` as well. ```toml [dependencies] -bevy_quadtree = { version = "0.15.2" } +bevy_quadtree = { version = "0.16.0" } ``` 2. Add the plugin to your Bevy app: diff --git a/bevy_quadtree/src/plugin/mod.rs b/bevy_quadtree/src/plugin/mod.rs index b720f59..a761c78 100644 --- a/bevy_quadtree/src/plugin/mod.rs +++ b/bevy_quadtree/src/plugin/mod.rs @@ -4,20 +4,21 @@ #[cfg(feature = "multi-quadtree")] mod multi_plugin; -#[cfg(feature = "multi-quadtree")] -pub use multi_plugin::{ - AsQuadTreePluginConfig, MultiQuadTreePlugin, QTConfig, QuadTreePluginConfig, -}; - use crate::collision::{AsDynCollision, UpdateCollision}; use crate::system::{update_collision, update_quadtree}; use crate::tree::QuadTree; use bevy_app::prelude::*; +use bevy_ecs::component::Mutable; use bevy_ecs::prelude::*; -use bevy_ecs::schedule::{IntoSystemConfigs, SystemConfigs}; +use bevy_ecs::schedule::ScheduleConfigs; +use bevy_ecs::system::ScheduleSystem; #[cfg(feature = "sprite")] use bevy_sprite::Sprite; use bevy_transform::prelude::*; +#[cfg(feature = "multi-quadtree")] +pub use multi_plugin::{ + AsQuadTreePluginConfig, MultiQuadTreePlugin, QTConfig, QuadTreePluginConfig, +}; /// A Bevy plugin for quadtree. /// # Type Parameters @@ -92,16 +93,16 @@ pub struct QuadTreePlugin< } impl< - P, - const D: usize, - const N: usize, - const W: usize, - const H: usize, - const X: usize, - const Y: usize, - const K: usize, - const ID: usize, - > Default for QuadTreePlugin + P, + const D: usize, + const N: usize, + const W: usize, + const H: usize, + const X: usize, + const Y: usize, + const K: usize, + const ID: usize, +> Default for QuadTreePlugin where P: TrackingPair, { @@ -113,16 +114,16 @@ where } impl< - P, - const N: usize, - const D: usize, - const W: usize, - const H: usize, - const X: usize, - const Y: usize, - const K: usize, - const ID: usize, - > Plugin for QuadTreePlugin + P, + const N: usize, + const D: usize, + const W: usize, + const H: usize, + const X: usize, + const Y: usize, + const K: usize, + const ID: usize, +> Plugin for QuadTreePlugin where P: TrackingPair, { @@ -144,12 +145,12 @@ where /// Also implemented for tuple of `(S, C)` pairs. pub trait TrackingPair: Send + Sync + 'static { /// return the system to update collision - fn update_collision() -> SystemConfigs; + fn update_collision() -> ScheduleConfigs; /// return the system to update quadtree - fn update_quadtree() -> SystemConfigs; + fn update_quadtree() -> ScheduleConfigs; /// return the system to show box #[cfg(feature = "gizmos")] - fn show_boundary() -> SystemConfigs; + fn show_boundary() -> ScheduleConfigs; /// return the shape id, to ensure no duplicate shape updating system added #[cfg(debug_assertions)] fn shape_id() -> std::any::TypeId; @@ -159,16 +160,16 @@ macro_rules! impl_tracking_pair { ($c: ty) => { impl TrackingPair for (S, $c) where - S: Component + AsDynCollision + UpdateCollision<$c> + Clone, + S: Component + AsDynCollision + UpdateCollision<$c> + Clone, { - fn update_collision() -> SystemConfigs { + fn update_collision() -> ScheduleConfigs { update_collision::.ambiguous_with_all() } - fn update_quadtree() -> SystemConfigs { + fn update_quadtree() -> ScheduleConfigs { update_quadtree::.ambiguous_with_all() } #[cfg(feature = "gizmos")] - fn show_boundary() -> SystemConfigs { + fn show_boundary() -> ScheduleConfigs { use crate::system::show_boundary; show_boundary::.ambiguous_with_all() } @@ -188,19 +189,19 @@ macro_rules! impl_tracking_pair_tuple { ($($c: ty),+) => { impl TrackingPair for (S, ($($c),+,)) where - S: Component + AsDynCollision + $(UpdateCollision<$c>+)+ Clone, + S: Component + AsDynCollision + $(UpdateCollision<$c>+)+ Clone, { - fn update_collision() -> SystemConfigs { + fn update_collision() -> ScheduleConfigs { // update_collision has Mut, so chain them ($(update_collision::),+,).chain() } fn update_quadtree( - ) -> SystemConfigs { + ) -> ScheduleConfigs { update_quadtree::.ambiguous_with_all() } #[cfg(feature = "gizmos")] fn show_boundary( - ) -> SystemConfigs { + ) -> ScheduleConfigs { use crate::system::show_boundary; show_boundary::.ambiguous_with_all() } @@ -227,12 +228,12 @@ macro_rules! impl_tracking_pairs { where $([

]: TrackingPair),+ { - fn update_collision() -> SystemConfigs { + fn update_collision() -> ScheduleConfigs { // no duplicate shape in `P`s, so ambiguous_with_all ($([

]::update_collision()),+,).ambiguous_with_all() } fn update_quadtree( - ) -> SystemConfigs { + ) -> ScheduleConfigs { #[cfg(debug_assertions)] { let mut set = std::collections::HashMap::new(); @@ -246,7 +247,7 @@ macro_rules! impl_tracking_pairs { } #[cfg(feature = "gizmos")] fn show_boundary( - ) -> SystemConfigs { + ) -> ScheduleConfigs { #[cfg(debug_assertions)] { let mut set = std::collections::HashMap::new(); diff --git a/bevy_quadtree/src/shape/circle.rs b/bevy_quadtree/src/shape/circle.rs index 499b5f8..75577e7 100644 --- a/bevy_quadtree/src/shape/circle.rs +++ b/bevy_quadtree/src/shape/circle.rs @@ -5,8 +5,8 @@ use core::fmt; use std::any::type_name; use crate::{ - collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, CollisionRect, CollisionRotatedRect, + collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, }; /// Circle shape to be used in the QuadTreePlugin diff --git a/bevy_quadtree/src/shape/rect.rs b/bevy_quadtree/src/shape/rect.rs index 8da7cf5..fae62a1 100644 --- a/bevy_quadtree/src/shape/rect.rs +++ b/bevy_quadtree/src/shape/rect.rs @@ -9,8 +9,8 @@ use core::fmt; use std::any::type_name; use crate::{ - collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, CollisionCircle, CollisionRotatedRect, + collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, }; /// Rectagle shape to be used in the QuadTreePlugin diff --git a/bevy_quadtree/src/shape/rotated_rect.rs b/bevy_quadtree/src/shape/rotated_rect.rs index 3b64ceb..e9d1dea 100644 --- a/bevy_quadtree/src/shape/rotated_rect.rs +++ b/bevy_quadtree/src/shape/rotated_rect.rs @@ -1,6 +1,6 @@ use crate::{ - collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, CollisionCircle, CollisionRect, + collision::{Collision, CollisionQuery, DynCollision, Relation, UpdateCollision}, }; use bevy_ecs::prelude::*; #[cfg(feature = "sprite")] diff --git a/bevy_quadtree/src/system.rs b/bevy_quadtree/src/system.rs index cd2ccc5..6b1ed34 100644 --- a/bevy_quadtree/src/system.rs +++ b/bevy_quadtree/src/system.rs @@ -2,6 +2,7 @@ use crate::{ collision::{AsDynCollision, UpdateCollision}, tree::QuadTree, }; +use bevy_ecs::component::Mutable; use bevy_ecs::prelude::*; #[cfg(feature = "gizmos")] use bevy_gizmos::prelude::*; @@ -10,7 +11,7 @@ use bevy_transform::components::GlobalTransform; pub(crate) fn update_collision(mut q: Query<(&mut S, &C), Changed>) where - S: Component + UpdateCollision + Clone, + S: Component + UpdateCollision + Clone, C: Component, { for (s, c) in q.iter_mut() {