Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@ members = ["bevy_quadtree"]
resolver = "2"

[workspace.package]
version = "0.15.2"
version = "0.16.0"
authors = ["Louis <[email protected]>"]
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]
Expand Down
2 changes: 1 addition & 1 deletion bevy_quadtree/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
81 changes: 41 additions & 40 deletions bevy_quadtree/src/plugin/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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, N, D, W, H, X, Y, K, ID>
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, N, D, W, H, X, Y, K, ID>
where
P: TrackingPair,
{
Expand All @@ -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, N, D, W, H, X, Y, K, ID>
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, N, D, W, H, X, Y, K, ID>
where
P: TrackingPair,
{
Expand All @@ -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<ScheduleSystem>;
/// return the system to update quadtree
fn update_quadtree<const ID: usize>() -> SystemConfigs;
fn update_quadtree<const ID: usize>() -> ScheduleConfigs<ScheduleSystem>;
/// return the system to show box
#[cfg(feature = "gizmos")]
fn show_boundary<const ID: usize>() -> SystemConfigs;
fn show_boundary<const ID: usize>() -> ScheduleConfigs<ScheduleSystem>;
/// return the shape id, to ensure no duplicate shape updating system added
#[cfg(debug_assertions)]
fn shape_id() -> std::any::TypeId;
Expand All @@ -159,16 +160,16 @@ macro_rules! impl_tracking_pair {
($c: ty) => {
impl<S> TrackingPair for (S, $c)
where
S: Component + AsDynCollision + UpdateCollision<$c> + Clone,
S: Component<Mutability = Mutable> + AsDynCollision + UpdateCollision<$c> + Clone,
{
fn update_collision() -> SystemConfigs {
fn update_collision() -> ScheduleConfigs<ScheduleSystem> {
update_collision::<S, $c>.ambiguous_with_all()
}
fn update_quadtree<const ID: usize>() -> SystemConfigs {
fn update_quadtree<const ID: usize>() -> ScheduleConfigs<ScheduleSystem> {
update_quadtree::<S, ID>.ambiguous_with_all()
}
#[cfg(feature = "gizmos")]
fn show_boundary<const ID: usize>() -> SystemConfigs {
fn show_boundary<const ID: usize>() -> ScheduleConfigs<ScheduleSystem> {
use crate::system::show_boundary;
show_boundary::<S, ID>.ambiguous_with_all()
}
Expand All @@ -188,19 +189,19 @@ macro_rules! impl_tracking_pair_tuple {
($($c: ty),+) => {
impl<S> TrackingPair for (S, ($($c),+,))
where
S: Component + AsDynCollision + $(UpdateCollision<$c>+)+ Clone,
S: Component<Mutability = Mutable> + AsDynCollision + $(UpdateCollision<$c>+)+ Clone,
{
fn update_collision() -> SystemConfigs {
fn update_collision() -> ScheduleConfigs<ScheduleSystem> {
// update_collision has Mut<S>, so chain them
($(update_collision::<S, $c>),+,).chain()
}
fn update_quadtree<const ID: usize>(
) -> SystemConfigs {
) -> ScheduleConfigs<ScheduleSystem> {
update_quadtree::<S, ID>.ambiguous_with_all()
}
#[cfg(feature = "gizmos")]
fn show_boundary<const ID: usize>(
) -> SystemConfigs {
) -> ScheduleConfigs<ScheduleSystem> {
use crate::system::show_boundary;
show_boundary::<S, ID>.ambiguous_with_all()
}
Expand All @@ -227,12 +228,12 @@ macro_rules! impl_tracking_pairs {
where
$([<P $i>]: TrackingPair),+
{
fn update_collision() -> SystemConfigs {
fn update_collision() -> ScheduleConfigs<ScheduleSystem> {
// no duplicate shape in `P`s, so ambiguous_with_all
($([<P $i>]::update_collision()),+,).ambiguous_with_all()
}
fn update_quadtree<const ID: usize>(
) -> SystemConfigs {
) -> ScheduleConfigs<ScheduleSystem> {
#[cfg(debug_assertions)]
{
let mut set = std::collections::HashMap::new();
Expand All @@ -246,7 +247,7 @@ macro_rules! impl_tracking_pairs {
}
#[cfg(feature = "gizmos")]
fn show_boundary<const ID: usize>(
) -> SystemConfigs {
) -> ScheduleConfigs<ScheduleSystem> {
#[cfg(debug_assertions)]
{
let mut set = std::collections::HashMap::new();
Expand Down
2 changes: 1 addition & 1 deletion bevy_quadtree/src/shape/circle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion bevy_quadtree/src/shape/rect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion bevy_quadtree/src/shape/rotated_rect.rs
Original file line number Diff line number Diff line change
@@ -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")]
Expand Down
3 changes: 2 additions & 1 deletion bevy_quadtree/src/system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand All @@ -10,7 +11,7 @@ use bevy_transform::components::GlobalTransform;

pub(crate) fn update_collision<S, C>(mut q: Query<(&mut S, &C), Changed<C>>)
where
S: Component + UpdateCollision<C> + Clone,
S: Component<Mutability = Mutable> + UpdateCollision<C> + Clone,
C: Component,
{
for (s, c) in q.iter_mut() {
Expand Down