From c74a4bbca217bdff13dd3a9375abdc8bc238c169 Mon Sep 17 00:00:00 2001 From: Louis Capitanchik <contact@louiscap.co> Date: Wed, 5 Jul 2023 14:14:57 +0100 Subject: [PATCH] Add feature-gated debug rendering for colliders --- Cargo.toml | 4 +++- src/debug/colliders.rs | 27 +++++++++++++++++++++++++++ src/debug/mod.rs | 17 +++++++++++++++++ src/lib.rs | 1 + src/main.rs | 1 + 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/debug/colliders.rs create mode 100644 src/debug/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 82a09c9..04ff2f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,9 @@ name = "shoot-the-revival" version = "0.1.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = [] +debug-colliders = [] [dependencies] log = "0.4.19" diff --git a/src/debug/colliders.rs b/src/debug/colliders.rs new file mode 100644 index 0000000..0d6b4c3 --- /dev/null +++ b/src/debug/colliders.rs @@ -0,0 +1,27 @@ +use crate::entities::{BoxSize, CollisionGroup}; +use bevy::prelude::{Added, BuildChildren, Commands, Entity, Query, Transform}; +use bevy_prototype_lyon::prelude::{Fill, GeometryBuilder, RectangleOrigin, ShapeBundle, Stroke}; +use bevy_prototype_lyon::shapes; + +pub fn spawn_debug_colliders( + mut commands: Commands, + new_collider_query: Query<(Entity, &BoxSize, &CollisionGroup), Added<CollisionGroup>>, +) { + for (entity, box_size, group) in &new_collider_query { + commands.entity(entity).with_children(|commands| { + let shape = shapes::Rectangle { + origin: RectangleOrigin::Center, + extents: **box_size, + }; + commands.spawn(( + ShapeBundle { + transform: Transform::from_xyz(0.0, 0.0, 100.0), + path: GeometryBuilder::build_as(&shape), + ..Default::default() + }, + Fill::color(group.color().with_a(0.3)), + Stroke::new(group.color(), 1.5), + )); + }); + } +} diff --git a/src/debug/mod.rs b/src/debug/mod.rs new file mode 100644 index 0000000..97faa70 --- /dev/null +++ b/src/debug/mod.rs @@ -0,0 +1,17 @@ +#[cfg(feature = "debug-colliders")] +mod colliders; + +mod _plugin { + use bevy::app::App; + use bevy::prelude::Plugin; + + pub struct DebugPlugin; + impl Plugin for DebugPlugin { + fn build(&self, app: &mut App) { + #[cfg(feature = "debug-colliders")] + app.add_system(super::colliders::spawn_debug_colliders); + } + } +} + +pub use _plugin::DebugPlugin; diff --git a/src/lib.rs b/src/lib.rs index f4e402d..9e74133 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +pub mod debug; pub mod entities; pub mod system; pub mod utilities; diff --git a/src/main.rs b/src/main.rs index 4e2a976..43ca582 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,7 @@ fn main() { })) .add_plugin(shoot_the_revival::system::SystemPlugin) .add_plugin(shoot_the_revival::entities::EntityPlugin) + .add_plugin(shoot_the_revival::debug::DebugPlugin) .add_plugin(bevy_prototype_lyon::plugin::ShapePlugin) .run(); } -- GitLab