pub trait Combatant {
fn name(&self) -> &str;
fn hp(&self) -> i32;
fn max_hp(&self) -> i32;
fn attack(&self) -> i32;
fn defense(&self) -> Option<i32> {
None
}
fn is_alive(&self) -> bool {
self.hp() > 0
}
fn take_damage(&mut self, damage: i32);
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct CombatLogEntry {
pub turn: u32,
pub message: String,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CombatResult {
Victory,
Defeat,
Ongoing,
}