From 0567662a35dba1e58ff78a5e3419671e917696f4 Mon Sep 17 00:00:00 2001 From: Butterscotch! Date: Fri, 2 Jan 2026 05:35:32 -0500 Subject: [PATCH] Add accelDataTick --- .../java/dev/slimevr/tracking/trackers/Tracker.kt | 11 +++++++++++ .../dev/slimevr/tracking/trackers/hid/HIDCommon.kt | 3 +++ .../tracking/trackers/udp/TrackersUDPServer.kt | 2 ++ 3 files changed, 16 insertions(+) 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 1d5c338ad..8e6495b2b 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 @@ -179,6 +179,10 @@ class Tracker @JvmOverloads constructor( val stayAligned = StayAlignedTrackerState(this) val yawResetSmoothing = InterpolationHandler() + // Currently only used for accel resets, to add anything else, consider using a + // subscribable event listener instead + var accelTickCallback: ((tracker: Tracker) -> Unit)? = null + init { // IMPORTANT: Look here for the required states of inputs require(!allowReset || (hasRotation && allowReset)) { @@ -488,6 +492,13 @@ class Tracker @JvmOverloads constructor( } } + /** + * Tells the tracker that it received new accel data + * Accel may be (and usually is) desynced from rotation data, so if we want the + * latest, we need to process it here + */ + fun accelDataTick() = accelTickCallback?.invoke(this) + /** * A way to delay the timeout of the tracker */ diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt index b1be8d133..e32c09601 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/hid/HIDCommon.kt @@ -378,6 +378,9 @@ class HIDCommon { if (packetType == 1 || packetType == 2 || packetType == 4 || packetType == 7) { tracker.dataTick() // only data tick if there is rotation data } + if (packetType == 1 || packetType == 2 || packetType == 7) { + tracker.accelDataTick() + } } } } 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 ea5c6d5ba..21926fe2f 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 @@ -424,6 +424,7 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker } else { tracker.setAcceleration(SENSOR_OFFSET_CORRECTION.sandwich(packet.acceleration)) } + tracker.accelDataTick() } tracker.dataTick() } @@ -462,6 +463,7 @@ class TrackersUDPServer(private val port: Int, name: String, private val tracker } else { tracker.setAcceleration(SENSOR_OFFSET_CORRECTION.sandwich(packet.acceleration)) } + tracker.accelDataTick() } is UDPPacket10PingPong -> {