use bevy::prelude::*;
use crate::prelude::{ModifierSet, StatsMutator, Stats};
#[derive(Component, Debug, Clone)]
#[require(Stats)]
pub struct StatsInitializer {
pub modifiers: ModifierSet,
}
impl StatsInitializer {
pub fn new(modifier_set: ModifierSet) -> Self {
Self { modifiers: modifier_set }
}
}
pub(crate) fn apply_stats_initializer(
add: On<Add, StatsInitializer>,
mut stats_mutator: StatsMutator,
query_initializer: Query<&StatsInitializer>,
mut commands: Commands,
) {
let entity = add.entity;
if let Ok(initializer) = query_initializer.get(entity) {
initializer.modifiers.apply_to(&mut stats_mutator, entity);
commands.entity(entity).remove::<StatsInitializer>();
commands.trigger(StatsInitialized(entity));
}
}
#[derive(EntityEvent)]
pub struct StatsInitialized(Entity);