Adds AABB constructor stub for building with a mesh and center point

dev
Joey Pollack 2 years ago
parent 6adfdb0341
commit 0c630d000e

@ -1,14 +1,14 @@
use bevy::{pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*}; use bevy::{pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*};
use physics::{PhysicsPlugin, components::Velocity}; use physics::{components::{Velocity, AABB}, PhysicsPlugin};
pub struct CorePlugin; pub struct CorePlugin;
impl Plugin for CorePlugin impl Plugin for CorePlugin
{ {
fn build(&self, app: &mut App) fn build(&self, app: &mut App)
{ {
app.add_plugins((PhysicsPlugin {debug_draw_colliders: true})) app.add_plugins(PhysicsPlugin {debug_draw_colliders: true})
.add_systems(Startup, setup); .add_systems(Startup, setup);
} }
} }
@ -44,7 +44,10 @@ fn setup(mut commands: Commands, server: Res<AssetServer>, mut ambient_light: Re
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)); // TODO: need to figure out how to get the box dimensions from the loaded scene
},
AABB::from_point_and_size(Vec3::new(0.0, 7.0, 0.0), Vec3::new(2.0, 2.0, 2.0))
));
// BALL // BALL
let ball_handle: Handle<Scene> = server.load("ball.glb#Scene0"); let ball_handle: Handle<Scene> = server.load("ball.glb#Scene0");

@ -43,6 +43,14 @@ impl AABB
} }
} }
pub fn from_point_and_mesh(center: Vec3, mesh: Handle<Mesh>) -> Self
{
// TODO: Build an AABB around the given mesh
// Find the smallest and largets vertices on each axis
// and use those to set the extents of the AABB
todo!()
}
// ACCESSORS // ACCESSORS
pub fn get_center_point(&self) -> Vec3 pub fn get_center_point(&self) -> Vec3
{ {

@ -18,7 +18,7 @@ impl Plugin for PhysicsPlugin
if self.debug_draw_colliders if self.debug_draw_colliders
{ {
app.add_systems(Startup, systems::debug_draw_aabbs); app.add_systems(Update, systems::debug_draw_aabbs);
} }
} }
} }

@ -18,7 +18,7 @@ pub(crate) fn update_colliders()
pub(crate) fn debug_draw_aabbs( pub(crate) fn debug_draw_aabbs(
mut commands: Commands, mut commands: Commands,
aabbs: Query<&AABB>, aabbs: Query<(Entity, &AABB), Without<ColliderDebug>>,
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>> mut materials: ResMut<Assets<StandardMaterial>>
){ ){
@ -26,28 +26,51 @@ pub(crate) fn debug_draw_aabbs(
// TODO: Spawn one of these for each collider in the scene, // TODO: Spawn one of these for each collider in the scene,
// need to set the scale, rotation and translation to match the AABB // need to set the scale, rotation and translation to match the AABB
for (entity, _aabb) in aabbs.iter()
// 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()); let cube_mesh_handle: Handle<Mesh> = meshes.add(Cuboid::default());
commands.spawn((PbrBundle { commands.entity(entity).insert((PbrBundle
{
mesh: cube_mesh_handle, mesh: cube_mesh_handle,
material: materials.add(StandardMaterial { material: materials.add(StandardMaterial
{
base_color: Color::Rgba { red: 0.0, green: 1.0, blue: 0.0, alpha: 0.25 }, base_color: Color::Rgba { red: 0.0, green: 1.0, blue: 0.0, alpha: 0.25 },
alpha_mode: AlphaMode::Blend, alpha_mode: AlphaMode::Blend,
..default() ..default()
}), }),
transform: Transform::from_xyz(0.0, 7.25, -1.0) transform: Transform::from_xyz(0.0, 7.25, -1.0)
//.with_rotation(Quat::from_rotation_y(45.0)) //.with_rotation(Quat::from_rotation_y(45.0))
.with_rotation(Quat::from_rotation_x(45.0)), .with_rotation(Quat::from_rotation_x(45.0)),
..default() ..default()
}, },
Wireframe, WireframeColor { color: Color::GREEN },
Wireframe,
WireframeColor { color: Color::GREEN },
)); ));
} }
// 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
// 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>) pub(crate) fn debug_update_colliders(colliders: Query<&ColliderDebug>)
{ {

Loading…
Cancel
Save