diff --git a/src/lib.rs b/src/lib.rs index c22ee57..eaf7d66 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,6 +65,7 @@ impl Plugin for AsteroidPlugin { objects::ship_impact_listener, physics::collision_listener, machinery::tick_lifetimes, + machinery::update_scoreboard, ) .run_if(in_state(GameState::Playing)), ) diff --git a/src/machinery.rs b/src/machinery.rs index ecc9b1a..08448e5 100644 --- a/src/machinery.rs +++ b/src/machinery.rs @@ -8,7 +8,7 @@ use std::time::Duration; use bevy::prelude::*; -use crate::{WorldSize, events::SpawnAsteroid, objects::AsteroidSize}; +use crate::{WorldSize, events::{AsteroidDestroy, SpawnAsteroid}, objects::AsteroidSize, resources::Score}; /// Asteroid spawning parameters and state. /// @@ -135,3 +135,15 @@ pub fn operate_sparklers(sparklers: Query<(&mut Visibility, &mut Sparkler)>, tim } } } + +/// Event listener for adding score after an asteroid was destroyed +/// +/// Refreshing the HUD element is done by [crate::widgets::operate_ui] (a private function) +pub fn update_scoreboard( + mut destroy_events: EventReader, + mut scoreboard: ResMut, +) { + for _event in destroy_events.read() { + scoreboard.0 += 100; + } +} \ No newline at end of file