From 80d63db51cd25429ff671483c9a92f72613df865 Mon Sep 17 00:00:00 2001 From: Louka Date: Sat, 29 Jul 2023 02:18:46 -0400 Subject: [PATCH] separate each rotation --- .../java/dev/slimevr/osc/VRCOSCHandler.kt | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.kt b/server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.kt index da4882f013..3107674b2a 100644 --- a/server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.kt +++ b/server/core/src/main/java/dev/slimevr/osc/VRCOSCHandler.kt @@ -1,6 +1,11 @@ package dev.slimevr.osc -import com.illposed.osc.* +import com.illposed.osc.MessageSelector +import com.illposed.osc.OSCBundle +import com.illposed.osc.OSCMessage +import com.illposed.osc.OSCMessageEvent +import com.illposed.osc.OSCMessageListener +import com.illposed.osc.OSCSerializeException import com.illposed.osc.messageselector.OSCPatternAddressMessageSelector import com.illposed.osc.transport.OSCPortIn import com.illposed.osc.transport.OSCPortOut @@ -23,7 +28,8 @@ import io.github.axisangles.ktmath.Vector3 import java.io.IOException import java.net.InetAddress import java.net.InetSocketAddress -import java.util.* +import java.util.Timer +import java.util.TimerTask private const val OFFSET_SLERP_FACTOR = 0.5f // Guessed from eyeing VRChat @@ -381,18 +387,21 @@ class VRCOSCHandler( // Send accessory trackers for custom avatars for (i in accessoryTrackers.indices) { if (accessoryTrackers[i].trackerPosition == TrackerPosition.ACCESSORY && accessoryTrackers[i].status.sendData) { - val (w, x1, y1, z1) = accessoryTrackers[i].getRotation() - val (_, x2, y2, z2) = Quaternion(w, -x1, -y1, z1).toEulerAngles(EulerOrder.YXZ) + val (_, x, y, z) = accessoryTrackers[i].getRotation().toEulerAngles(EulerOrder.YZX) + // Note: we must send the rotations as -1 to 1 + // https://creators.vrchat.com/avatars/animator-parameters/#parameter-types + // Horizontal oscArgs.clear() - oscArgs.add(x2 * FastMath.RAD_TO_DEG) - oscArgs.add(y2 * FastMath.RAD_TO_DEG) - oscArgs.add(z2 * FastMath.RAD_TO_DEG) - bundle.addPacket( - OSCMessage( - "/avatar/parameters/accessory${accessoryTrackers[i].accessoryId}", - oscArgs.clone() - ) - ) + oscArgs.add(x / FastMath.PI) + bundle.addPacket(OSCMessage("/avatar/parameters/SVRAccessory${accessoryTrackers[i].accessoryId}X", oscArgs.clone())) + // Vertical + oscArgs.clear() + oscArgs.add(y / FastMath.PI) + bundle.addPacket(OSCMessage("/avatar/parameters/SVRAccessory${accessoryTrackers[i].accessoryId}Y", oscArgs.clone())) + // Twist + oscArgs.clear() + oscArgs.add(z / FastMath.PI) + bundle.addPacket(OSCMessage("/avatar/parameters/SVRAccessory${accessoryTrackers[i].accessoryId}Z", oscArgs.clone())) } } @@ -471,8 +480,8 @@ class VRCOSCHandler( * @param tracker the accessory tracker */ fun addAccessoryTracker(tracker: Tracker) { - if(!accessoryTrackers.contains(tracker)){ - accessoryTrackers.add(tracker) + if (!accessoryTrackers.contains(tracker)) { + accessoryTrackers.add(tracker) } }