1use rotterna_lib::structs::SmFile;
2use std::path::PathBuf;
3
4fn main() {
5 let path = PathBuf::from("assets/MEGALOVANIA.sm");
7
8 println!("Loading file: {:?}", path);
9
10 match SmFile::from_file(path) {
11 Ok(sm_file) => {
12 println!("\n=== METADATA ===");
13 println!("Title: {}", sm_file.metadata.title);
14 println!("Artist: {}", sm_file.metadata.artist);
15 println!("Subtitle: {}", sm_file.metadata.subtitle);
16 println!("Offset: {}", sm_file.offset);
17
18 println!("\n=== BPMS ===");
19 for (beat, bpm) in &sm_file.bpms {
20 println!(" Beat {}: {} BPM", beat, bpm);
21 }
22
23 println!("\n=== STOPS ===");
24 for (beat, duration) in &sm_file.stops {
25 println!(" Beat {}: {} seconds", beat, duration);
26 }
27
28 println!("\n=== CHARTS ===");
29 println!("Number of charts: {}", sm_file.charts.len());
30
31 for (chart_idx, chart) in sm_file.charts.iter().enumerate() {
32 println!("\n--- Chart {} ---", chart_idx + 1);
33 println!("Stepstype: {}", chart.stepstype);
34 println!("Difficulty: {}", chart.difficulty);
35 println!("Meter: {}", chart.meter);
36 println!("Number of measures: {}", chart.measures.len());
37
38 if let Some(last_measure) = chart.measures.last() {
40 if let Some(last_beat) = last_measure.beats.last() {
41 let total_duration_sec = last_beat.time / 1000.0;
42 println!("Last beat time: {:.2} ms ({:.2} seconds / {:.2} minutes)",
43 last_beat.time, total_duration_sec, total_duration_sec / 60.0);
44 } else if !chart.measures.is_empty() {
45 let total_duration_sec = last_measure.start_time / 1000.0;
47 println!("Last measure start time: {:.2} ms ({:.2} seconds / {:.2} minutes)",
48 last_measure.start_time, total_duration_sec, total_duration_sec / 60.0);
49 }
50 }
51
52 for (measure_idx, measure) in chart.measures.iter().take(3).enumerate() {
54 println!("\n Measure {}:", measure_idx + 1);
55 println!(" Start time: {:.3} ms", measure.start_time);
56 println!(" Number of beats: {}", measure.beats.len());
57
58 for (beat_idx, beat) in measure.beats.iter().take(3).enumerate() {
60 println!(" Beat {}: time={:.3} ms, notes={:?}",
61 beat_idx + 1, beat.time, beat.notes);
62 }
63 if measure.beats.len() > 3 {
64 println!(" ... ({} more beats)", measure.beats.len() - 3);
65 }
66 }
67 if chart.measures.len() > 3 {
68 println!("\n ... ({} more measures)", chart.measures.len() - 3);
69 }
70 }
71 }
72 Err(e) => {
73 eprintln!("Error loading file: {}", e);
74 std::process::exit(1);
75 }
76 }
77}
78