From 3a1c0c7d916c58e7c98545ca15d057ac43ca6a73 Mon Sep 17 00:00:00 2001 From: Cassandra de la Cruz-Munoz Date: Sun, 24 Sep 2023 12:26:52 -0400 Subject: [PATCH] refactor to start taking action on messages --- CameraReceiver.cs | 19 +++++++++++++++++++ DeviceReceiver.cs | 22 ++++++++++++++++++++++ DirectionalLightReceiver.cs | 23 +++++++++++++++++++++++ Marionette.cs | 34 ++++++++++++++-------------------- Performer.cs | 26 +++++++++++++------------- 5 files changed, 91 insertions(+), 33 deletions(-) create mode 100644 CameraReceiver.cs create mode 100644 DeviceReceiver.cs create mode 100644 DirectionalLightReceiver.cs diff --git a/CameraReceiver.cs b/CameraReceiver.cs new file mode 100644 index 0000000..e8ffae2 --- /dev/null +++ b/CameraReceiver.cs @@ -0,0 +1,19 @@ +using Godot; + +namespace godotVmcSharp +{ + class CameraReceiver : Node3D + { + readonly Camera3D camera; + + public CameraReceiver(Camera3D camera) + { + this.camera = camera; + } + + public void ProcessMessage(VmcExtCam message) { + this.camera.Fov = message.Fov; + this.camera.Transform = message.Transform; + } + } +} \ No newline at end of file diff --git a/DeviceReceiver.cs b/DeviceReceiver.cs new file mode 100644 index 0000000..b0f86b9 --- /dev/null +++ b/DeviceReceiver.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Godot; + +namespace godotVmcSharp +{ + class DeviceReceiver: Node3D + { + readonly Dictionary devices; + public DeviceReceiver() + { + this.devices = new Dictionary{}; + } + public void ProcessMessage(VmcExtDevicePos message) + { + if (!this.devices.ContainsKey(message.Serial)) + { + this.devices.Add(message.Serial, new Node3D()); + } + this.devices[message.Serial].Transform = message.Transform; + } + } +} \ No newline at end of file diff --git a/DirectionalLightReceiver.cs b/DirectionalLightReceiver.cs new file mode 100644 index 0000000..f1e0303 --- /dev/null +++ b/DirectionalLightReceiver.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Godot; + +namespace godotVmcSharp +{ + class DirectionalLightReceiver + { + readonly Dictionary lights; + public DirectionalLightReceiver() + { + this.lights = new Dictionary{}; + } + public void ProcessMessage(VmcExtLight message) + { + if (!this.lights.ContainsKey(message.Name)) + { + this.lights.Add(message.Name, new DirectionalLight3D()); + } + this.lights[message.Name].Transform = message.Transform; + this.lights[message.Name].LightColor = message.Color; + } + } +} \ No newline at end of file diff --git a/Marionette.cs b/Marionette.cs index b6ff250..d902f8e 100644 --- a/Marionette.cs +++ b/Marionette.cs @@ -16,24 +16,26 @@ along with this program. If not, see . */ -using System; using System.Net; -using System.Collections.Generic; +using godotOscSharp; using Godot; namespace godotVmcSharp { public class Marionette { - private godotOscSharp.OscReceiver receiver; - private godotOscSharp.OscSender sender; + private OscReceiver receiver; + private OscSender sender; + private CameraReceiver cam; + private DeviceReceiver devices; + private DirectionalLightReceiver lights; public Marionette(int port) { - receiver = new godotOscSharp.OscReceiver(port); + receiver = new OscReceiver(port); receiver.MessageReceived += (sender, e) => { if (sender == null) { - sender = new godotOscSharp.OscSender(IPAddress.Parse(e.IPAddress), port); + sender = new OscSender(IPAddress.Parse(e.IPAddress), port); } GD.Print($"Received a message from {e.IPAddress}:{e.Port}"); ProcessMessage(e.Message); @@ -42,8 +44,10 @@ namespace godotVmcSharp { GD.Print($"Error: {e.ErrorMessage}"); }; + devices = new DeviceReceiver(); + lights = new DirectionalLightReceiver(); } - private void ProcessMessage(godotOscSharp.OscMessage m) + private void ProcessMessage(OscMessage m) { switch (m.Address.ToString()) { @@ -66,7 +70,7 @@ namespace godotVmcSharp new VmcMessage(m.Address); break; case "/VMC/Ext/Cam": - new VmcExtCam(m); + this.cam.ProcessMessage(new VmcExtCam(m)); break; case "/VMC/Ext/Con": new VmcExtCon(m); @@ -84,28 +88,18 @@ namespace godotVmcSharp new VmcExtMidiCcBit(m); break; case "/VMC/Ext/Hmd/Pos": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Con/Pos": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Tra/Pos": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Hmd/Pos/Local": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Con/Pos/Local": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Tra/Pos/Local": - new VmcExtDevicePos(m); + this.devices.ProcessMessage(new VmcExtDevicePos(m)); break; case "/VMC/Ext/Rcv": new VmcExtRcv(m); break; case "/VMC/Ext/Light": - new VmcExtLight(m); + lights.ProcessMessage(new VmcExtLight(m)); break; case "/VMC/Ext/VRM": new VmcExtVrm(m); diff --git a/Performer.cs b/Performer.cs index bc96db1..98215d9 100644 --- a/Performer.cs +++ b/Performer.cs @@ -16,7 +16,6 @@ along with this program. If not, see . */ -using System; using System.Net; using Godot; using godotOscSharp; @@ -25,12 +24,15 @@ namespace godotVmcSharp { public class Performer { - private godotOscSharp.OscReceiver receiver; - private godotOscSharp.OscSender sender; + private OscReceiver receiver; + private OscSender sender; + private CameraReceiver cam; + private DeviceReceiver devices; + private DirectionalLightReceiver lights; public Performer(IPAddress host, int port) { - receiver = new godotOscSharp.OscReceiver(port); - sender = new godotOscSharp.OscSender(host, port); + receiver = new OscReceiver(port); + sender = new OscSender(host, port); receiver.MessageReceived += (sender, e) => { GD.Print($"Received a message from {e.IPAddress}:{e.Port}"); @@ -40,19 +42,17 @@ namespace godotVmcSharp { GD.Print($"Error: {e.ErrorMessage}"); }; + devices = new DeviceReceiver(); + lights = new DirectionalLightReceiver(); } - private void ProcessMessage(godotOscSharp.OscMessage m) + private void ProcessMessage(OscMessage m) { switch (m.Address.ToString()) { case "/VMC/Ext/Hmd/Pos": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Con/Pos": - new VmcExtDevicePos(m); - break; case "/VMC/Ext/Tra/Pos": - new VmcExtDevicePos(m); + this.devices.ProcessMessage(new VmcExtDevicePos(m)); break; case "/VMC/Ext/Set/Period": new VmcExtSetPeriod(m); @@ -61,7 +61,7 @@ namespace godotVmcSharp new VmcExtMidiCcVal(m); break; case "/VMC/Ext/Cam": - new VmcExtCam(m); + this.cam.ProcessMessage(new VmcExtCam(m)); break; case "/VMC/Ext/Blend/Val": new VmcExtBlendVal(m); @@ -88,7 +88,7 @@ namespace godotVmcSharp new VmcExtSetConfig(m); break; case "/VMC/Ext/Light": - new VmcExtLight(m); + this.lights.ProcessMessage(new VmcExtLight(m)); break; case "/VMC/Ext/Set/Shortcut": new VmcExtSetShortcut(m);