requirements_demo/
requirements_demo.rs1use terrain_forge::{generate_with_requirements, semantic::*};
2
3fn main() {
4 println!("=== Generate with Requirements Demo ===\n");
5
6 let mut requirements = SemanticRequirements::none();
8 requirements.min_regions.insert("Hall".to_string(), 1); requirements
10 .required_markers
11 .insert(MarkerType::Custom("PlayerStart".to_string()), 1); println!("Requirements:");
14 println!(" - Minimum 1 Hall region");
15 println!(" - At least 1 PlayerStart marker");
16 println!();
17
18 match generate_with_requirements("bsp", 40, 30, requirements, Some(10), 12345) {
19 Ok((grid, semantic)) => {
20 println!("✅ Successfully generated map meeting requirements!");
21 println!(" Grid size: {}x{}", grid.width(), grid.height());
22 println!(" Floor tiles: {}", grid.count(|t| t.is_floor()));
23 println!(" Total regions: {}", semantic.regions.len());
24
25 let hall_count = semantic.regions.iter().filter(|r| r.kind == "Hall").count();
27 println!(" Hall regions: {}", hall_count);
28
29 let start_count = semantic
31 .markers
32 .iter()
33 .filter(|m| m.tag() == "PlayerStart")
34 .count();
35 println!(" PlayerStart markers: {}", start_count);
36
37 println!("\nFirst few regions:");
38 for (i, region) in semantic.regions.iter().take(3).enumerate() {
39 println!(" {}: {} ({} cells)", i + 1, region.kind, region.area());
40 }
41 }
42 Err(msg) => {
43 println!("❌ Failed to generate: {}", msg);
44 }
45 }
46}