37 lines
1,015 B
Rust
37 lines
1,015 B
Rust
use bevy::prelude::*;
|
|
|
|
use collider::Collider;
|
|
use event::Collided;
|
|
|
|
mod collider;
|
|
mod event;
|
|
|
|
pub struct CollisionPlugin;
|
|
|
|
impl Plugin for CollisionPlugin {
|
|
fn build(&self, app: &mut App) {
|
|
app.add_systems(Update, detect_collision_system);
|
|
}
|
|
}
|
|
|
|
fn detect_collision_system(mut commands: Commands, query: Query<(Entity, &Transform, &Collider)>) {
|
|
for (first_entity, first_transform, first_collider) in query {
|
|
for (second_entity, second_transform, second_collider) in query {
|
|
if first_entity == second_entity {
|
|
continue;
|
|
}
|
|
|
|
if first_collider.detect_collision(
|
|
first_transform.translation.truncate(),
|
|
&second_collider,
|
|
second_transform.translation.truncate()
|
|
){
|
|
commands.trigger(
|
|
Collided {
|
|
entity:first_entity,
|
|
with:second_entity
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|