1use zzstat::source::ConstantSource;
9use zzstat::transform::MultiplicativeTransform;
10use zzstat::*;
11
12fn main() -> Result<(), StatError> {
13 let mut resolver = StatResolver::new();
15
16 let hp_id = StatId::from_str("HP");
18
19 println!("Registering sources for HP:");
21 resolver.register_source(hp_id.clone(), Box::new(ConstantSource(100.0)));
22 println!(" - Base HP: 100");
23
24 resolver.register_source(hp_id.clone(), Box::new(ConstantSource(50.0)));
25 println!(" - Item bonus: +50");
26
27 println!("\nRegistering transform:");
29 resolver.register_transform(hp_id.clone(), Box::new(MultiplicativeTransform::new(1.2)));
30 println!(" - 20% bonus multiplier");
31
32 let context = StatContext::new();
34
35 println!("\nResolving HP...");
37 let resolved = resolver.resolve(&hp_id, &context)?;
38
39 println!("\n=== Resolved Stat ===");
41 println!("Stat ID: {}", resolved.stat_id);
42 println!("Final Value: {:.2}", resolved.value);
43
44 println!("\nSource Breakdown:");
45 for (desc, value) in &resolved.sources {
46 println!(" {}: {:.2}", desc, value);
47 }
48
49 println!("\nTransform Breakdown:");
50 for (desc, value) in &resolved.transforms {
51 println!(" {}: {:.2}", desc, value);
52 }
53
54 println!("\nCalculation: (100 + 50) * 1.2 = {:.2}", resolved.value);
55
56 Ok(())
57}