hierarchical_markers/
hierarchical_markers.rs1use terrain_forge::{algorithms, semantic::*, Grid, Rng, SemanticExtractor};
2
3fn main() {
4 println!("=== Hierarchical Marker Types Demo ===\n");
5
6 let mut grid = Grid::new(30, 20);
8 algorithms::get("bsp").unwrap().generate(&mut grid, 12345);
9
10 let extractor = SemanticExtractor::for_rooms();
11 let mut rng = Rng::new(12345);
12 let mut semantic = extractor.extract(&grid, &mut rng);
13
14 if let Some(region) = semantic.regions.first() {
16 let (x, y) = region.cells[0];
17
18 semantic.markers.push(Marker::new(
20 x,
21 y,
22 MarkerType::QuestObjective { priority: 1 },
23 ));
24 semantic.markers.push(Marker::new(
25 x + 2,
26 y,
27 MarkerType::QuestObjective { priority: 3 },
28 ));
29 semantic
30 .markers
31 .push(Marker::new(x + 4, y, MarkerType::QuestStart));
32
33 semantic
35 .markers
36 .push(Marker::new(x, y + 2, MarkerType::LootTier { tier: 1 }));
37 semantic
38 .markers
39 .push(Marker::new(x + 2, y + 2, MarkerType::LootTier { tier: 3 }));
40 semantic
41 .markers
42 .push(Marker::new(x + 4, y + 2, MarkerType::Treasure));
43
44 semantic.markers.push(Marker::new(
46 x,
47 y + 4,
48 MarkerType::EncounterZone { difficulty: 2 },
49 ));
50 semantic
51 .markers
52 .push(Marker::new(x + 2, y + 4, MarkerType::BossRoom));
53 semantic
54 .markers
55 .push(Marker::new(x + 4, y + 4, MarkerType::SafeZone));
56 }
57
58 println!("Generated {} markers:", semantic.markers.len());
60 for marker in &semantic.markers {
61 println!(
62 " {} at ({}, {}) - Category: {}",
63 marker.tag(),
64 marker.x,
65 marker.y,
66 marker.marker_type.category()
67 );
68 }
69
70 let mut categories = std::collections::HashMap::new();
72 for marker in &semantic.markers {
73 *categories.entry(marker.marker_type.category()).or_insert(0) += 1;
74 }
75
76 println!("\nMarker distribution:");
77 for (category, count) in categories {
78 println!(" {}: {} markers", category, count);
79 }
80}