conditional_pipelines/
conditional_pipelines.rs1use terrain_forge::{pipeline::*, Grid, Rng};
2
3fn main() {
4 println!("=== Conditional Pipeline Demo ===\n");
5
6 println!("1. Density-Based Conditional Pipeline:");
8
9 let mut pipeline = ConditionalPipeline::new();
10
11 pipeline.add_operation(ConditionalOperation::simple(PipelineOperation::Algorithm {
13 name: "cellular".to_string(),
14 seed: Some(12345),
15 }));
16
17 pipeline.add_operation(ConditionalOperation::conditional(
19 PipelineOperation::Log {
20 message: "Checking density".to_string(),
21 },
22 PipelineCondition::Density {
23 min: Some(0.3),
24 max: Some(0.7),
25 },
26 vec![
27 ConditionalOperation::simple(PipelineOperation::SetParameter {
28 key: "quality".to_string(),
29 value: "good".to_string(),
30 }),
31 ConditionalOperation::simple(PipelineOperation::Log {
32 message: "Density is acceptable".to_string(),
33 }),
34 ],
35 vec![
36 ConditionalOperation::simple(PipelineOperation::SetParameter {
37 key: "quality".to_string(),
38 value: "poor".to_string(),
39 }),
40 ConditionalOperation::simple(PipelineOperation::Log {
41 message: "Density needs adjustment".to_string(),
42 }),
43 ],
44 ));
45
46 let mut grid = Grid::new(40, 30);
47 let mut context = PipelineContext::new();
48 let mut rng = Rng::new(12345);
49
50 let result = pipeline.execute(&mut grid, &mut context, &mut rng);
51
52 println!(
53 " Result: {}",
54 if result.success {
55 "✅ Success"
56 } else {
57 "❌ Failed"
58 }
59 );
60 println!(" Floor tiles: {}", grid.count(|t| t.is_floor()));
61 println!(
62 " Quality assessment: {}",
63 context
64 .get_parameter("quality")
65 .unwrap_or(&"unknown".to_string())
66 );
67 println!(" Execution steps: {}", context.execution_history().len());
68
69 println!("\n2. Floor Count Conditional Pipeline:");
71
72 let mut pipeline2 = ConditionalPipeline::new();
73
74 pipeline2.add_operation(ConditionalOperation::simple(PipelineOperation::Algorithm {
75 name: "bsp".to_string(),
76 seed: Some(54321),
77 }));
78
79 pipeline2.add_operation(ConditionalOperation::conditional(
80 PipelineOperation::Log {
81 message: "Evaluating floor count".to_string(),
82 },
83 PipelineCondition::FloorCount {
84 min: Some(100),
85 max: Some(500),
86 },
87 vec![ConditionalOperation::simple(
88 PipelineOperation::SetParameter {
89 key: "size_category".to_string(),
90 value: "medium".to_string(),
91 },
92 )],
93 vec![ConditionalOperation::simple(
94 PipelineOperation::SetParameter {
95 key: "size_category".to_string(),
96 value: "large_or_small".to_string(),
97 },
98 )],
99 ));
100
101 let mut grid2 = Grid::new(35, 25);
102 let mut context2 = PipelineContext::new();
103 let mut rng2 = Rng::new(54321);
104
105 let result2 = pipeline2.execute(&mut grid2, &mut context2, &mut rng2);
106
107 println!(
108 " Result: {}",
109 if result2.success {
110 "✅ Success"
111 } else {
112 "❌ Failed"
113 }
114 );
115 println!(" Floor tiles: {}", grid2.count(|t| t.is_floor()));
116 println!(
117 " Size category: {}",
118 context2
119 .get_parameter("size_category")
120 .unwrap_or(&"unknown".to_string())
121 );
122
123 println!("\n Execution log:");
124 for (i, step) in context2.execution_history().iter().enumerate() {
125 println!(" {}. {}", i + 1, step);
126 }
127}