//! Shared domain value types — small `Copy`/`Clone` enums and structs that flow through
//! commands, contexts, and entities. Deliberately dependency-light so every other module
//! can lean on them without creating awkward import cycles.
use crate::{enemy::Corpse, world::EntityId};
pub type DamageType = i32;
/// Who fired the projectile / pool that's running a behavior. Drives kill attribution and
/// lets a drone's shots be told apart from the tower's.
#[derive(Clone, Copy, Debug)]
pub enum Source {
Tower,
None,
}
/// How a `Command::Damage` arrived — an instant on-hit tick vs. a status ticking over time.
/// Exists so downstream tracking (DPS meters) can bucket the two separately instead of
/// blending "one big hit" and "many small ticks" into one number that's hard to read either
/// way. Also the reason DoT damage goes through `Command::Damage` at all instead of a status
/// mutating the enemy directly: routing it through the same queue as everything else means a
/// future global player modifier (e.g. "+30% all damage") only has to hook one place to see
/// every damage event, tagged, rather than needing special-cased access to the status system.
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum DamageDelivery {
Hit,
Dot,
}
#[derive(Clone, Copy)]
pub struct DespawnReason;
#[derive(Clone)]
pub enum GameEvent {
EnemyKilled(Corpse),
DespawnEnemy(EntityId),
Custom(String),
}
#[derive(Clone, Copy)]
pub enum ResourceKind {
Wp,
Sp,
Tp,
}