Wire in the bullet & asteroid destruction events

This commit is contained in:
2025-08-10 16:49:22 -05:00
parent 65f28e832f
commit 8d689d7842

View File

@@ -13,7 +13,7 @@ use crate::config::{
WINDOW_SIZE, WINDOW_SIZE,
}; };
use crate::physics::AngularVelocity; use crate::physics::AngularVelocity;
use crate::ship::Ship; use crate::ship::{Bullet, Ship};
use bevy::prelude::*; use bevy::prelude::*;
use bevy_inspector_egui::InspectorOptions; use bevy_inspector_egui::InspectorOptions;
@@ -71,7 +71,8 @@ impl Plugin for AsteroidPlugin {
) )
.add_event::<asteroids::SpawnAsteroid>() .add_event::<asteroids::SpawnAsteroid>()
.add_event::<event::AsteroidDestroy>() .add_event::<event::AsteroidDestroy>()
.add_event::<event::ShipDestroy>(); .add_event::<event::ShipDestroy>()
.add_event::<event::BulletDestroy>();
app.insert_state(GameState::Playing); app.insert_state(GameState::Playing);
} }
} }
@@ -98,7 +99,9 @@ fn collision_listener(
mut collisions: EventReader<CollisionEvent>, mut collisions: EventReader<CollisionEvent>,
mut ship_writer: EventWriter<event::ShipDestroy>, mut ship_writer: EventWriter<event::ShipDestroy>,
mut asteroid_writer: EventWriter<event::AsteroidDestroy>, mut asteroid_writer: EventWriter<event::AsteroidDestroy>,
mut bullet_writer: EventWriter<event::BulletDestroy>,
player: Single<Entity, With<Ship>>, player: Single<Entity, With<Ship>>,
bullets: Query<&Bullet>,
rocks: Query<&Asteroid>, rocks: Query<&Asteroid>,
) { ) {
for event in collisions.read() { for event in collisions.read() {
@@ -125,7 +128,20 @@ fn collision_listener(
} }
} }
// TODO: Bullet-asteroid collisions // Option 2: Bullet & Asteroid
if bullets.contains(*one) {
if rocks.contains(*two) {
dbg!("Writing AsteroidDestroy & BulletDestroy events");
asteroid_writer.write(event::AsteroidDestroy(*two));
bullet_writer.write(event::BulletDestroy(*one));
}
} else if rocks.contains(*one) {
if bullets.contains(*two) {
dbg!("Writing AsteroidDestroy & BulletDestroy events");
asteroid_writer.write(event::AsteroidDestroy(*one));
bullet_writer.write(event::BulletDestroy(*two));
}
}
} }
} }
} }