diff --git a/Marionette.cs b/Marionette.cs index afd9291..835147f 100644 --- a/Marionette.cs +++ b/Marionette.cs @@ -72,7 +72,7 @@ namespace godotVmcSharp new VmcExtCon(m); break; case "/VMC/Ext/Key": - KeyInput(m.Data); + new VmcExtKey(m); break; case "/VMC/Ext/Midi/Note": MidiNote(m.Data); @@ -106,36 +106,6 @@ namespace godotVmcSharp break; } } - private void KeyInput(List data) - { - var addr = "/VMC/Ext/Key"; - if (data[0].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "active", 'i', data[0].Type)); - return; - } - if (data[1].Type != 's') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "name", 's', data[1].Type)); - return; - } - if (data[2].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "keycode", 'i', data[2].Type)); - } - switch ((int)data[0].Value) - { - case 0: - GD.Print($"Key {(string)data[1].Value} ({(int)data[2].Value}) is released"); - break; - case 1: - GD.Print($"Key {(string)data[1].Value} ({(int)data[2].Value}) is pressed"); - break; - default: - GD.Print($"Invalid value for \"active\" 'i' argument of {addr}. Expected 0 or 1, received {(int)data[0].Value}"); - break; - } - } private void MidiNote(List data) { var addr = "/VMC/Ext/Midi/Note"; diff --git a/VmcMessages/VmcExtKey.cs b/VmcMessages/VmcExtKey.cs new file mode 100644 index 0000000..bbdfc74 --- /dev/null +++ b/VmcMessages/VmcExtKey.cs @@ -0,0 +1,56 @@ +/* + 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 VmcExtKey : VmcMessage + { + public int active { get; } + public string name { get; } + public int keycode { get; } + public VmcExtKey(godotOscSharp.OscMessage m) : base(m.Address) + { + if (m.Data[0].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "active", 'i', m.Data[0].Type)); + return; + } + if (m.Data[1].Type != 's') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "name", 's', m.Data[1].Type)); + return; + } + if (m.Data[2].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "keycode", 'i', m.Data[2].Type)); + return; + } + if ((int)m.Data[0].Value < 0 || (int)m.Data[0].Value > 1) + { + GD.Print($"Invalid value for \"active\" 'i' argument of {addr}. Expected 0 or 1, received {(int)m.Data[0].Value}"); + return; + } + active = (int)m.Data[0].Value; + name = (string)m.Data[1].Value; + keycode = (int)m.Data[2].Value; + } + } +} \ No newline at end of file