dependencies/
dependencies.rs1use zzstat::source::ConstantSource;
9use zzstat::transform::ScalingTransform;
10use zzstat::*;
11
12fn main() -> Result<(), StatError> {
13 let mut resolver = StatResolver::new();
14
15 let str_id = StatId::from_str("STR");
17 let dex_id = StatId::from_str("DEX");
18 let atk_id = StatId::from_str("ATK");
19 let crit_id = StatId::from_str("CRIT");
20
21 println!("=== Setting up base stats ===");
22
23 resolver.register_source(str_id.clone(), Box::new(ConstantSource(10.0)));
25 println!("STR: 10 (base)");
26
27 resolver.register_source(dex_id.clone(), Box::new(ConstantSource(15.0)));
28 println!("DEX: 15 (base)");
29
30 println!("\n=== Setting up derived stats ===");
31
32 resolver.register_source(atk_id.clone(), Box::new(ConstantSource(50.0)));
34 resolver.register_transform(
35 atk_id.clone(),
36 Box::new(ScalingTransform::new(str_id.clone(), 2.0)),
37 );
38 println!("ATK: 50 (base) + STR * 2.0");
39
40 resolver.register_source(crit_id.clone(), Box::new(ConstantSource(5.0)));
42 resolver.register_transform(
43 crit_id.clone(),
44 Box::new(ScalingTransform::new(dex_id.clone(), 1.5)),
45 );
46 println!("CRIT: 5 (base) + DEX * 1.5");
47
48 let context = StatContext::new();
49
50 println!("\n=== Resolving all stats ===");
51 let results = resolver.resolve_all(&context)?;
52
53 println!("\n=== Results ===");
55 for (stat_id, resolved) in &results {
56 println!("\n{}:", stat_id);
57 println!(" Final Value: {:.2}", resolved.value);
58
59 if !resolved.sources.is_empty() {
60 println!(" Sources:");
61 for (desc, value) in &resolved.sources {
62 println!(" {}: {:.2}", desc, value);
63 }
64 }
65
66 if !resolved.transforms.is_empty() {
67 println!(" Transforms:");
68 for (desc, value) in &resolved.transforms {
69 println!(" {}: {:.2}", desc, value);
70 }
71 }
72 }
73
74 println!("\n=== Verification ===");
75 println!("STR: {:.2} (expected: 10.00)", results[&str_id].value);
76 println!("DEX: {:.2} (expected: 15.00)", results[&dex_id].value);
77 println!(
78 "ATK: {:.2} (expected: 70.00 = 50 + 10*2)",
79 results[&atk_id].value
80 );
81 println!(
82 "CRIT: {:.2} (expected: 27.50 = 5 + 15*1.5)",
83 results[&crit_id].value
84 );
85
86 Ok(())
87}