diff --git a/src/health/event.rs b/src/health/event.rs deleted file mode 100644 index d49d862..0000000 --- a/src/health/event.rs +++ /dev/null @@ -1,22 +0,0 @@ -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 a36ce08..cf0ee62 100644 --- a/src/health/mod.rs +++ b/src/health/mod.rs @@ -1,75 +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 pub struct HealthPlugin; impl Plugin for HealthPlugin { fn build(&self, app: &mut App) { - app.add_systems(PostUpdate,cleanup_killed).add_observer(damage_vulnerable_system); - } -} - -/// Component that holds health points and max health points of entity -#[derive(Component)] -pub struct Health { - health: usize, - max_health: usize, -} - -impl Default for Health { - fn default() -> Self { - Self { health: 1, max_health: 1 } - } -} - -impl Health { - /// Create new health component with set 'health' and 'max_health'. - pub fn new(health: usize, max_health: usize) -> Self { - Self { - health, - max_health - } - } - /// Create new health component from max health. - pub fn from_max(max_health: usize) -> Self { - Self { - health: max_health, - max_health - } - } - - /// Substract 'damage' amount of health points from component with boundary check. - pub fn damage(&mut self, damage: usize) { - self.health = if damage > self.health {0} else {self.health - damage}; - } - /// Add 'heal' amount of health points to component with max health as a boundary. - pub fn heal_no_overheal(&mut self, heal: usize) { - self.health = if self.health + heal > self.max_health {self.max_health} else {self.health + heal}; - } - /// Add 'heal' amount of health points to component with usize::MAX as a boundary. - pub fn heal_with_overheal(&mut self, heal: usize) { - self.health = if usize::MAX-heal < self.health {usize::MAX} else {self.health + heal}; - } - pub fn get_health(&self) -> usize { - self.health - } -} - -/// Marker component that marks entity to NOT be despawned at the end of frame when health reaches zero -#[derive(Component)] -#[require(Health)] -pub struct Unkillable; - -fn cleanup_killed(mut commands: Commands, query: Query<(Entity, &Health), Without>) { - for (entity, health) in query { - if health.health == 0 { - commands.entity(entity).despawn(); - } + //todo!() } }