use zzstat::context::StatContext;
use zzstat::resolver::StatResolver;
use zzstat::resource::{ResourcePool, ThresholdTrigger, TimeEffect, TriggerCondition};
use zzstat::source::ConstantSource;
use zzstat::stat_id::StatId;
fn main() {
let mut resolver = StatResolver::new();
let ctx = StatContext::new();
let max_hp_id = StatId::from("MAX_HP");
resolver.register_source(max_hp_id.clone(), Box::new(ConstantSource(100.0)));
let mut hp_pool = ResourcePool::new(max_hp_id, &mut resolver, &ctx);
println!("Initial HP: {} / {}", hp_pool.current_value, 100.0);
hp_pool.add_trigger(ThresholdTrigger {
condition: TriggerCondition::Empty,
event_name: "DEATH".to_string(),
});
hp_pool.add_effect(TimeEffect {
name: "Poison".to_string(),
amount_per_tick: -20.0,
ticks_remaining: 3,
});
println!("Poison applied! (-20 HP per tick for 3 ticks)");
for tick in 1..=4 {
println!("--- Tick {} ---", tick);
let events = hp_pool.tick(&mut resolver, &ctx);
println!("Current HP: {}", hp_pool.current_value);
for event in events {
println!(">>> TRIGGER FIRED: {} <<<", event.event_name);
}
}
println!("--- Monster hits for 50 damage! ---");
let events = hp_pool.apply_damage(50.0, &mut resolver, &ctx);
println!("Current HP: {}", hp_pool.current_value);
for event in events {
println!(">>> TRIGGER FIRED: {} <<<", event.event_name);
}
}