Adds a test cube for testing debug drawing of AABB colliders

dev
Joey Pollack 2 years ago
parent 236bb69be1
commit 6adfdb0341

@ -1,5 +1,5 @@
use bevy::prelude::*; use bevy::{pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*};
use physics::{PhysicsPlugin, components::Velocity}; use physics::{PhysicsPlugin, components::Velocity};
@ -8,7 +8,7 @@ impl Plugin for CorePlugin
{ {
fn build(&self, app: &mut App) fn build(&self, app: &mut App)
{ {
app.add_plugins(PhysicsPlugin) app.add_plugins((PhysicsPlugin {debug_draw_colliders: true}))
.add_systems(Startup, setup); .add_systems(Startup, setup);
} }
} }
@ -35,13 +35,16 @@ fn setup(mut commands: Commands, server: Res<AssetServer>, mut ambient_light: Re
..default() ..default()
}); });
// TESTING:
// BRICK // BRICK
let brick_handle: Handle<Scene> = server.load("brick.glb#Scene0"); let brick_handle: Handle<Scene> = server.load("brick.glb#Scene0");
commands.spawn(SceneBundle { commands.spawn((SceneBundle {
scene: brick_handle, scene: brick_handle,
transform: Transform::from_xyz(0.0, 7.0, 0.0), transform: Transform::from_xyz(0.0, 7.0, 0.0),
.. default() .. default()
}); }, Wireframe));
// BALL // BALL
let ball_handle: Handle<Scene> = server.load("ball.glb#Scene0"); let ball_handle: Handle<Scene> = server.load("ball.glb#Scene0");

@ -124,3 +124,6 @@ impl AABB
true true
} }
} }
#[derive(Component)]
pub struct ColliderDebug;

@ -2,13 +2,30 @@
pub mod components; pub mod components;
pub mod systems; pub mod systems;
use bevy::prelude::*; use bevy::{pbr::wireframe::WireframePlugin, prelude::*};
pub struct PhysicsPlugin
{
pub debug_draw_colliders: bool,
}
pub struct PhysicsPlugin;
impl Plugin for PhysicsPlugin impl Plugin for PhysicsPlugin
{ {
fn build(&self, app: &mut App) fn build(&self, app: &mut App)
{ {
app.add_systems(Update, systems::update_movement); app.add_plugins(WireframePlugin)
.add_systems(Update, systems::update_movement);
if self.debug_draw_colliders
{
app.add_systems(Startup, systems::debug_draw_aabbs);
}
}
}
impl Default for PhysicsPlugin
{
fn default() -> Self {
Self { debug_draw_colliders: false }
} }
} }

@ -1,7 +1,7 @@
use bevy::prelude::*; use bevy::{pbr::wireframe::{Wireframe, WireframeColor}, prelude::*};
use crate::components::Velocity; use crate::components::{ColliderDebug, Velocity, AABB};
pub(crate) fn update_movement(mut moving_objects: Query<(&Velocity, &mut Transform)>, time: Res<Time>) pub(crate) fn update_movement(mut moving_objects: Query<(&Velocity, &mut Transform)>, time: Res<Time>)
{ {
@ -11,3 +11,44 @@ pub(crate) fn update_movement(mut moving_objects: Query<(&Velocity, &mut Transfo
} }
} }
pub(crate) fn update_colliders()
{
todo!()
}
pub(crate) fn debug_draw_aabbs(
mut commands: Commands,
aabbs: Query<&AABB>,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>
){
// TODO: Spawn one of these for each collider in the scene,
// need to set the scale, rotation and translation to match the AABB
// TEST CUBE
// Spawns a cube with a colored wireframe and partially transparent body
// Should be able to update the material on the fly to change the colors
// to red when the AABB is intersecting another AABB
let cube_mesh_handle: Handle<Mesh> = meshes.add(Cuboid::default());
commands.spawn((PbrBundle {
mesh: cube_mesh_handle,
material: materials.add(StandardMaterial {
base_color: Color::Rgba { red: 0.0, green: 1.0, blue: 0.0, alpha: 0.25 },
alpha_mode: AlphaMode::Blend,
..default()
}),
transform: Transform::from_xyz(0.0, 7.25, -1.0)
//.with_rotation(Quat::from_rotation_y(45.0))
.with_rotation(Quat::from_rotation_x(45.0)),
..default()
},
Wireframe, WireframeColor { color: Color::GREEN },
));
}
pub(crate) fn debug_update_colliders(colliders: Query<&ColliderDebug>)
{
}
Loading…
Cancel
Save