diff --git a/Marionette.cs b/Marionette.cs index 7788013..9ba9724 100644 --- a/Marionette.cs +++ b/Marionette.cs @@ -81,7 +81,7 @@ namespace godotVmcSharp new VmcExtMidiCcVal(m); break; case "/VMC/Ext/Midi/CC/Bit": - MidiButton(m.Data); + new VmcExtMidiCcBit(m); break; case "/VMC/Ext/Hmd/Pos": new VmcExtDevicePos(m); @@ -106,37 +106,6 @@ namespace godotVmcSharp break; } } - private void MidiButton(List data) - { - var addr = "/VMC/Ext/Midi/CC/Bit"; - if (data.Count != 2) - { - GD.Print($"Invalid argument count for \"{addr}\". Expected 2, received {data.Count}"); - return; - } - if (data[0].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "knob", 'i', data[0].Type)); - return; - } - if (data[1].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "active", 'i', data[1].Type)); - return; - } - switch ((int)data[1].Value) - { - case 0: - GD.Print("Button released on knob {(int)data[0].Value}"); - break; - case 1: - GD.Print("Button pressed on knob {(int)data[0].Value}"); - break; - default: - GD.Print($"Invalid value for \"active\" argument of {addr}. Expected 0 or 1, received {(int)data[1].Value}."); - return; - } - } private bool ValidateReceiveEnable(List data) { var addr = "/VMC/Ext/Rcv"; diff --git a/VmcMessages/VmcExtMidiCcBit.cs b/VmcMessages/VmcExtMidiCcBit.cs new file mode 100644 index 0000000..0ca4628 --- /dev/null +++ b/VmcMessages/VmcExtMidiCcBit.cs @@ -0,0 +1,49 @@ +/* + godotVmcSharp + Copyright (C) 2023 Cassandra de la Cruz-Munoz + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +using Godot; +using godotOscSharp; + +namespace godotVmcSharp +{ + public class VmcExtMidiCcBit : VmcMessage + { + public int knob { get; } + public int active { get; } + public VmcExtMidiCcBit(godotOscSharp.OscMessage m) : base(m.Address) + { + if (m.Data[0].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "knob", 'i', m.Data[0].Type)); + return; + } + if (m.Data[1].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "active", 'i', m.Data[1].Type)); + return; + } + if ((int)m.Data[1].Value < 0 || (int)m.Data[1].Value > 1) + { + GD.Print($"Invalid value for \"active\" argument of {addr}. Expected 0 or 1, received {(int)m.Data[1].Value}."); + return; + } + knob = (int)m.Data[0].Value; + active = (int)m.Data[1].Value; + } + } +} \ No newline at end of file