diff --git a/src/lib.rs b/src/lib.rs index 133e53a..d48d15b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1227,7 +1227,7 @@ impl MessageBehavior for VmcExtSetPeriod { OscType::from(self.blendshape), OscType::from(self.camera), OscType::from(self.devices), - ] } + ] }; } fn from_osc_message(msg: OscMessage) -> Result { if msg.args.len() != 6 { @@ -1266,3 +1266,47 @@ impl MessageBehavior for VmcExtSetPeriod { return Ok(VmcExtSetPeriod { status, root, bone, blendshape, camera, devices}) } } + +struct VmcExtSetEye { + enable: i32, + position: Vector3, +} + +impl MessageBehavior for VmcExtSetEye { + fn to_osc_message(&self) -> OscMessage { + return OscMessage{ addr: String::from("/VMC/Ext/Set/Eye"), args: vec![ + OscType::from(self.enable), + OscType::from(self.position.x), + OscType::from(self.position.y), + OscType::from(self.position.z), + ] + }; + } + fn from_osc_message(msg: OscMessage) -> Result { + if msg.args.len() != 4 { + return Err(String::from("arg count invalid")); + } + let enable: i32; + let x: f32; + let y: f32; + let z: f32; + match msg.args[0] { + OscType::Int(i) => enable = i, + _ => return Err(String::from("arg type invalid")), + } + match msg.args[1] { + OscType::Float(f) => x = f, + _ => return Err(String::from("arg type invalid")), + } + + match msg.args[2] { + OscType::Float(f) => y = f, + _ => return Err(String::from("arg type invalid")), + } + match msg.args[3] { + OscType::Float(f) => z = f, + _ => return Err(String::from("arg type invalid")), + } + return Ok(VmcExtSetEye { enable, position: Vector3::new(x, y, z)}) + } +}