From 48c13347fe15dcbadf2503367ffaf5278d25ce7b Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 7 May 2026 12:52:58 +0500 Subject: [PATCH] feat(health): added damage event and vulnerable structs --- src/health/event.rs | 22 ++++++++++++++++++++++ src/health/mod.rs | 6 +++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/health/event.rs b/src/health/event.rs index e69de29..d49d862 100644 --- a/src/health/event.rs +++ b/src/health/event.rs @@ -0,0 +1,22 @@ +use bevy::prelude::*; + +use crate::health::Health; + +/// Event that is called on entities when they should recieve damage +#[derive(EntityEvent)] +pub struct Damage { + entity: Entity, + damage: usize +} + +/// Marker-component that marks entity for an automatic damage handling +#[derive(Component)] +#[require(Health)] +pub struct Vulnerable; + +/// Damages every vulnerable health components. +pub(super) fn damage_vulnerable_system(event: On, mut health_query: Query<&mut Health,With>) { + if let Ok(mut health) = health_query.get_mut(event.entity) { + health.damage(event.damage); + } +} diff --git a/src/health/mod.rs b/src/health/mod.rs index c6b5952..a36ce08 100644 --- a/src/health/mod.rs +++ b/src/health/mod.rs @@ -1,5 +1,9 @@ use bevy::prelude::*; +use event::damage_vulnerable_system; + +pub use event::{Damage,Vulnerable}; + pub mod event; /// Health plugin provides systems to handle health modifications and events @@ -7,7 +11,7 @@ pub struct HealthPlugin; impl Plugin for HealthPlugin { fn build(&self, app: &mut App) { - app.add_systems(PostUpdate,cleanup_killed); + app.add_systems(PostUpdate,cleanup_killed).add_observer(damage_vulnerable_system); } }