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