use bevy::prelude::*;
use bevy_ecs::component::StorageType;
use crate::tags::ValueTag;
#[derive(Debug, Clone)]
pub enum ModifierValue {
Flat(f32),
Increased(f32),
More(f32)
}
impl Default for ModifierValue {
fn default() -> Self {
ModifierValue::Flat(0.0)
}
}
#[derive(Debug, Clone)]
pub struct ModifierDefinition {
pub tag: ValueTag,
pub value: ModifierValue
}
#[derive(Component, Debug)]
#[relationship(relationship_target = ModifierCollectionRefs)]
#[require(ModifierInstance)]
pub struct ModifierEntity {
#[relationship]
pub modier_collection_owner: Entity,
}
#[derive(Component, Debug, Default)]
pub struct ModifierInstance {
pub tag: ValueTag,
pub source_context: ModifierContext,
pub target_context: Option<ModifierContext>,
pub value: ModifierValue,
}
#[derive(Debug, Clone, Default)]
pub struct ModifierContext {
pub entity: Option<Entity>
}
#[derive(Component, Debug, Default)]
#[relationship_target(relationship = ModifierEntity)]
pub struct ModifierCollectionRefs {
modifiers: Vec<Entity>
}