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 physics::{PhysicsPlugin, components::Velocity};
use physics::{components::{Velocity, AABB}, PhysicsPlugin};
pub struct CorePlugin;
impl Plugin for CorePlugin
{
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);
}
}
@ -44,7 +44,10 @@ fn setup(mut commands: Commands, server: Res<AssetServer>, mut ambient_light: Re
scene: brick_handle,
transform: Transform::from_xyz(0.0, 7.0, 0.0),
.. 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
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
pub fn get_center_point(&self) -> Vec3
{

@ -18,7 +18,7 @@ impl Plugin for PhysicsPlugin
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(
mut commands: Commands,
aabbs: Query<&AABB>,
aabbs: Query<(Entity, &AABB), Without<ColliderDebug>>,
mut meshes: ResMut<Assets<Mesh>>,
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,
// 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
for (entity, _aabb) in aabbs.iter()
{
let cube_mesh_handle: Handle<Mesh> = meshes.add(Cuboid::default());
commands.spawn((PbrBundle {
commands.entity(entity).insert((PbrBundle
{
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 },
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 },
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>)
{

Loading…
Cancel
Save