requirement_generation/
requirement_generation.rs1use terrain_forge::{generate_with_requirements, semantic::*};
2
3fn main() {
4 println!("=== Requirement-Driven Generation Demo ===\n");
5
6 println!("1. Basic Dungeon Requirements:");
8 let basic_req = SemanticRequirements::basic_dungeon();
9
10 match generate_with_requirements("bsp", 40, 30, basic_req, Some(5), 12345) {
11 Ok((grid, semantic)) => {
12 println!(" ✅ Generated valid dungeon!");
13 println!(" Floor tiles: {}", grid.count(|t| t.is_floor()));
14 println!(" Regions: {}", semantic.regions.len());
15 println!(" Markers: {}", semantic.markers.len());
16 }
17 Err(msg) => println!(" ❌ Failed: {}", msg),
18 }
19
20 println!("\n2. Custom Cave Requirements:");
22 let mut cave_req = SemanticRequirements::none();
23 cave_req.min_regions.insert("cavern".to_string(), 2);
24 cave_req.min_walkable_area = Some(200);
25 cave_req
26 .required_markers
27 .insert(MarkerType::Custom("entrance".to_string()), 1);
28 cave_req
29 .required_markers
30 .insert(MarkerType::Custom("treasure".to_string()), 1);
31
32 match generate_with_requirements("cellular", 50, 40, cave_req, Some(10), 54321) {
33 Ok((grid, semantic)) => {
34 println!(" ✅ Generated valid cave system!");
35 println!(" Floor tiles: {}", grid.count(|t| t.is_floor()));
36 println!(" Regions: {}", semantic.regions.len());
37
38 let mut region_types = std::collections::HashMap::new();
40 for region in &semantic.regions {
41 *region_types.entry(®ion.kind).or_insert(0) += 1;
42 }
43 for (kind, count) in region_types {
44 println!(" {}: {}", kind, count);
45 }
46 }
47 Err(msg) => println!(" ❌ Failed: {}", msg),
48 }
49
50 println!("\n3. Strict Requirements (demonstration of failure):");
52 let mut strict_req = SemanticRequirements::none();
53 strict_req.min_regions.insert("room".to_string(), 10); strict_req
55 .required_markers
56 .insert(MarkerType::QuestObjective { priority: 1 }, 5);
57 strict_req.min_walkable_area = Some(800);
58
59 match generate_with_requirements("bsp", 30, 20, strict_req, Some(3), 98765) {
60 Ok((grid, _semantic)) => {
61 println!(" ✅ Unexpectedly succeeded!");
62 println!(" Floor tiles: {}", grid.count(|t| t.is_floor()));
63 }
64 Err(msg) => println!(" ❌ Expected failure: {}", msg),
65 }
66}