diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt index 8f639c4407..5598ec1bce 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt @@ -328,6 +328,7 @@ class Tracker @JvmOverloads constructor( /** * Tells the tracker that it received new data + * NOTE: Use only when rotation is received */ fun dataTick() { timer.update() diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt index ac9f15d8d0..eb8edad32b 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.kt @@ -576,6 +576,13 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker tracker.dataTick() } + is UDPPacket27Position -> { + tracker = connection?.getTracker(packet.sensorId) + if (tracker == null) return + tracker.position = packet.position + // dont call dataTick here as this is just position update + } + is UDPPacket200ProtocolChange -> {} } } diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt index f32df063b3..c83277b2cc 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.kt @@ -396,6 +396,20 @@ data class UDPPacket26FlexData( } } +data class UDPPacket27Position( + var position: Vector3 = Vector3.NULL, +) : UDPPacket(27), + SensorSpecificPacket { + override var sensorId = 0 + override fun readData(buf: ByteBuffer) { + sensorId = buf.get().toInt() and 0xFF + val x = UDPUtils.getSafeBufferFloat(buf) + val y = UDPUtils.getSafeBufferFloat(buf) + val z = UDPUtils.getSafeBufferFloat(buf) + position = Vector3(x, y, z) + } +} + data class UDPPacket200ProtocolChange( var targetProtocol: Int = 0, var targetProtocolVersion: Int = 0, diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt index 59d8c3b260..bf73740b1c 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.kt @@ -116,6 +116,7 @@ class UDPProtocolParser { PACKET_FEATURE_FLAGS -> UDPPacket22FeatureFlags() PACKET_ACK_CONFIG_CHANGE -> UDPPacket24AckConfigChange() PACKET_FLEX_DATA -> UDPPacket26FlexData() + PACKET_POSITION -> UDPPacket27Position() PACKET_PROTOCOL_CHANGE -> UDPPacket200ProtocolChange() else -> null } @@ -152,6 +153,7 @@ class UDPProtocolParser { const val PACKET_ACK_CONFIG_CHANGE = 24 const val PACKET_SET_CONFIG_FLAG = 25 const val PACKET_FLEX_DATA = 26 + const val PACKET_POSITION = 27 const val PACKET_BUNDLE = 100 const val PACKET_BUNDLE_COMPACT = 101 const val PACKET_PROTOCOL_CHANGE = 200