diff --git a/EyeTrackApp/osc.py b/EyeTrackApp/osc.py index e97f1b0..c9be145 100644 --- a/EyeTrackApp/osc.py +++ b/EyeTrackApp/osc.py @@ -143,6 +143,117 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, pupil_dilation, self): y = (self.right_y + self.left_y) / 2 self.client.send_message(self.config.osc_eyes_y_address, y) + if self.config.gui_osc_vrcft_v2: + + if self.main_config.eye_display_id in [ + EyeId.RIGHT, + EyeId.LEFT, + ]: # we are in single eye mode + se = True + + self.client.send_message("/avatar/parameters/FT/v2/EyeX", eye_x) + + self.client.send_message("/avatar/parameters/FT/v2/EyeLeftX", eye_x) + self.client.send_message("/avatar/parameters/FT/v2/EyeRightX", eye_x) + self.client.send_message("/avatar/parameters/FT/v2/EyeLeftY", eye_y) + self.client.send_message("/avatar/parameters/FT/v2/EyeRightY", eye_y) + + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLid", + eyelid_transformer(self, eye_blink), + ) + else: + se = False + + if self.eye_id in [EyeId.LEFT] and not se: # left eye, send data to left + self.l_eye_x = eye_x + self.l_eye_blink = eye_blink + + if self.l_eye_blink == 0.0: + if ( + last_blink > 0.15 + ): # when binary blink is on, blinks may be too fast for OSC so we repeat them. + for i in range(4): + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidLeft", + eyelid_transformer(self, self.l_eye_blink), + ) + last_blink = time.time() - last_blink + if self.config.gui_eye_falloff: + if ( + self.r_eye_blink == 0.0 + ): # if both eyes closed and DEF is enables, blink + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidLeft", + eyelid_transformer(self, self.l_eye_blink), + ) + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidRight", + eyelid_transformer(self, self.l_eye_blink), + ) + self.l_eye_x = self.r_eye_x + + self.client.send_message("/avatar/parameters/FT/v2/EyeLeftX", self.l_eye_x) + self.left_y = eye_y + + if self.left_y != 621: + self.client.send_message("/avatar/parameters/FT/v2/EyeLeftY", self.left_y) + + + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidLeft", + eyelid_transformer(self, self.l_eye_blink), + ) + + elif self.eye_id in [EyeId.RIGHT] and not se: # Right eye, send data to right + self.r_eye_x = eye_x + self.r_eye_blink = eye_blink + + if self.r_eye_blink == 0.0: + if ( + last_blink > 0.15 + ): # when binary blink is on, blinks may be too fast for OSC so we repeat them. + print("REPEATING R BLINK") + for i in range(4): + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidRight", + eyelid_transformer(self, self.r_eye_blink), + ) + last_blink = time.time() - last_blink + if self.config.gui_eye_falloff: + if ( + self.l_eye_blink == 0.0 + ): # if both eyes closed and DEF is enables, blink + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidLeft", + eyelid_transformer(self, self.r_eye_blink), + ) + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidRight", + eyelid_transformer(self, self.r_eye_blink), + ) + + self.r_eye_x = self.l_eye_x + + self.client.send_message("/avatar/parameters/FT/v2/EyeRightX", self.r_eye_x) + self.right_y = eye_y + + if self.right_y != 621: + self.client.send_message("/avatar/parameters/FT/v2/EyeRightY", self.right_y) + + self.client.send_message( + "/avatar/parameters/FT/v2/EyeLidRight", + eyelid_transformer(self, self.r_eye_blink), + ) + + if ( + self.main_config.eye_display_id in [EyeId.BOTH] + and self.right_y != 621 + and self.left_y != 621 + ): + y = (self.right_y + self.left_y) / 2 + self.client.send_message("/avatar/parameters/FT/v2/EyeY", y) + if self.config.gui_vrc_native: # VRC NATIVE if self.main_config.eye_display_id in [