torque_tracker_engine/project/
event_command.rs

1#[derive(Debug, Default, Copy, Clone)]
2pub enum NoteCommand {
3    #[default]
4    None, // _, 0
5    SetTempo(u8),    // A, 1
6    JumpToOrder(u8), // B, 2
7    BreakToRow(u8),  // C, 3
8    /// Has lot of extra effects depending on value
9    VolumeSlideDown(u8), // D, 4
10    PitchSlideDown(u8), // E, 5
11    PitchSlideUp(u8), // F, 6
12    SlideToNote(u8), // G, 7
13    Vibrato(u8),     // H, 8
14    Tremor(u8),      // I, 9
15    Arpeggio(u8),    // J, 10
16    VibratoAndVolSlideDown(u8), // K, 11
17    SlideToNoteAndVolSlideDown(u8), // L, 12
18    SetChannelVol(u8), // M, 13
19    /// Some extra effects depending on value
20    ChannelVolumeSlideDown(u8), // N, 14
21    SetSampleOffset(u8), // O. 15
22    /// also can do fine panning
23    PanningSlide(u8), // P, 16
24    RetriggerNote(u8), // Q, 17
25    Tremolo(u8),     // R, 18
26    /// Can do a lot of stuff, most of which doesn't have a value
27    AlmostEverything(u8), // S, 19
28    /// Can also do slides
29    TempoChange(u8), // T, 20
30    FineVibrato(u8), // U, 21
31    SetGlobalVolume(u8), // V, 22
32    GlobalVolumeSlide(u8), // W, 23
33    SetPanning(u8),  // X, 24
34    Panbrello(u8),   // Y, 25
35    MIDIMacros(u8),  // Z, 26
36                     // Effect byte value reaches until 31, so some missing?
37}
38
39pub struct UnknownCommand;
40
41impl TryFrom<(u8, u8)> for NoteCommand {
42    type Error = UnknownCommand;
43
44    fn try_from((command_type, command_value): (u8, u8)) -> Result<Self, Self::Error> {
45        match command_type {
46            0 => Ok(Self::None),
47            1 => Ok(Self::SetTempo(command_value)),
48            2 => Ok(Self::JumpToOrder(command_value)),
49            3 => Ok(Self::BreakToRow(command_value)),
50            4 => Ok(Self::VolumeSlideDown(command_value)),
51            5 => Ok(Self::PitchSlideDown(command_value)),
52            6 => Ok(Self::PitchSlideUp(command_value)),
53            7 => Ok(Self::SlideToNote(command_value)),
54            8 => Ok(Self::Vibrato(command_value)),
55            9 => Ok(Self::Tremor(command_value)),
56            10 => Ok(Self::Arpeggio(command_value)),
57            11 => Ok(Self::VibratoAndVolSlideDown(command_value)),
58            12 => Ok(Self::SlideToNoteAndVolSlideDown(command_value)),
59            13 => Ok(Self::SetChannelVol(command_value)),
60            14 => Ok(Self::ChannelVolumeSlideDown(command_value)),
61            15 => Ok(Self::SetSampleOffset(command_value)),
62            16 => Ok(Self::PanningSlide(command_value)),
63            17 => Ok(Self::RetriggerNote(command_value)),
64            18 => Ok(Self::Tremolo(command_value)),
65            19 => Ok(Self::AlmostEverything(command_value)),
66            20 => Ok(Self::TempoChange(command_value)),
67            21 => Ok(Self::FineVibrato(command_value)),
68            22 => Ok(Self::SetGlobalVolume(command_value)),
69            23 => Ok(Self::GlobalVolumeSlide(command_value)),
70            24 => Ok(Self::SetPanning(command_value)),
71            25 => Ok(Self::Panbrello(command_value)),
72            26 => Ok(Self::MIDIMacros(command_value)),
73            _ => Err(UnknownCommand),
74        }
75    }
76}