use crate::observer::{PatternChangeContext, PlayerObserver, RowContext, TickContext};
#[derive(Default)]
pub struct DebugObserver {
pub trace_ticks: bool,
}
impl DebugObserver {
pub fn new() -> Self {
Self::default()
}
pub fn with_trace_ticks(mut self, on: bool) -> Self {
self.trace_ticks = on;
self
}
}
impl PlayerObserver for DebugObserver {
fn on_row(&mut self, ctx: &RowContext<'_>) {
print!("{:03X} ", ctx.row);
for cell in ctx.cells {
print!("{:?} ", cell.note);
}
println!();
}
fn on_pattern_change(&mut self, ctx: &PatternChangeContext<'_>) {
println!(
"pattern_order[0x{:03x}] = 0x{:03x}",
ctx.new_table_index, ctx.new_pattern
);
}
fn on_tick(&mut self, ctx: &TickContext<'_>) {
println!(
" tick {:02} (pat {:03X} row {:03X})",
ctx.tick, ctx.pattern, ctx.row
);
}
fn subscribes_to_ticks(&self) -> bool {
self.trace_ticks
}
fn on_song_end(&mut self) {
println!("(song end)");
}
}