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 }); } } } }