diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt b/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt index 3bb981f928..4b970612d6 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt +++ b/server/src/main/java/dev/slimevr/protocol/rpc/setup/RPCUtil.kt @@ -6,7 +6,7 @@ object RPCUtil { @JvmStatic fun getLocalIp(): String = NetworkInterface.getNetworkInterfaces().asSequence().first { - it.isUp && !it.isLoopback && !it.isVirtual + it.isUp && !it.isLoopback && !it.isVirtual && it.interfaceAddresses.any { it.broadcast != null } }.interfaceAddresses.first { it.broadcast != null }.address.hostAddress diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt b/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt index 1fd8880783..5d3778ea83 100644 --- a/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt +++ b/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.kt @@ -56,10 +56,23 @@ class Tracker @JvmOverloads constructor( var temperature: Float? = null var customName: String? = null + /** + * If the tracker has gotten disconnected after it was initialized first time + */ + var disconnectedRecently = false + private var alreadyInitialized = false var status = TrackerStatus.DISCONNECTED set(value) { if (field == value) return + field = value + + if (field == TrackerStatus.DISCONNECTED && alreadyInitialized) { + disconnectedRecently = true + } + if (field.sendData) { + alreadyInitialized = true + } if (!isInternal) { // If the status of a non-internal tracker has changed, inform // the VRServer to recreate the skeleton, as it may need to diff --git a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt index 5362bf51d8..12fc7ad8a9 100644 --- a/server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt @@ -182,6 +182,14 @@ class TrackerResetsHandler(val tracker: Tracker) { makeIdentityAdjustmentQuatsYaw() calculateDrift(rot) + + // Let's just remove the status if you do yaw reset if the tracker was + // disconnected and then connected back + if (this.tracker.lastResetStatus != 0u && this.tracker.disconnectedRecently) { + vrServer.statusSystem.removeStatus(this.tracker.lastResetStatus) + this.tracker.disconnectedRecently = false + this.tracker.lastResetStatus = 0u + } } /**