From 518fe8d2efa434b315a2737fe25b181a385dfbba Mon Sep 17 00:00:00 2001 From: Butterscotch! Date: Wed, 7 Aug 2024 16:41:01 -0400 Subject: [PATCH] Fix skeleton issues (#1132) --- .../dev/slimevr/autobone/AutoBoneHandler.kt | 6 +++--- .../tracking/processor/HumanPoseManager.kt | 8 ++++++++ .../processor/skeleton/HumanSkeleton.kt | 19 ++++++++----------- .../tracking/trackers/TrackerResetsHandler.kt | 4 ++-- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt index 90adccf46..0b6564ae2 100644 --- a/server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt +++ b/server/core/src/main/java/dev/slimevr/autobone/AutoBoneHandler.kt @@ -151,7 +151,7 @@ class AutoBoneHandler(private val server: VRServer) { } catch (e: Exception) { announceProcessStatus( AutoBoneProcessType.RECORD, - String.format("Recording failed: %s", e.message), + "Recording failed: ${e.message}", completed = true, success = false, ) @@ -212,7 +212,7 @@ class AutoBoneHandler(private val server: VRServer) { } catch (e: Exception) { announceProcessStatus( AutoBoneProcessType.SAVE, - String.format("Failed to save recording: %s", e.message), + "Failed to save recording: ${e.message}", completed = true, success = false, ) @@ -329,7 +329,7 @@ class AutoBoneHandler(private val server: VRServer) { } catch (e: Exception) { announceProcessStatus( AutoBoneProcessType.PROCESS, - String.format("Processing failed: %s", e.message), + "Processing failed: ${e.message}", completed = true, success = false, ) diff --git a/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.kt b/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.kt index ba57581ff..85a6dc2c5 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.kt @@ -494,6 +494,14 @@ class HumanPoseManager(val server: VRServer?) { skeleton.updateNodeOffset(boneType, offset) } + /** + * Updates all the node offsets in the skeleton + */ + fun updateNodeOffsetsInSkeleton() { + if (!isSkeletonPresent) return + skeletonConfigManager.updateNodeOffsetsInSkeleton() + } + /** * Update the given toggle to the new given value in the skeleton * diff --git a/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.kt b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.kt index 55ebed9e2..3d17a6631 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.kt @@ -298,11 +298,8 @@ class HumanSkeleton( // Rebuilds the arm skeleton nodes attachments assembleSkeletonArms(true) - // Refresh headShift - humanPoseManager.computeNodeOffset(BoneType.HEAD) - - // Refresh node offsets for arms - computeDependentArmOffsets() + // Refresh all skeleton node offsets based on new trackers + humanPoseManager.updateNodeOffsetsInSkeleton() // Update tap detection's trackers tapDetectionManager.updateConfig(trackers) @@ -889,7 +886,7 @@ class HumanSkeleton( var transOffset = offset // If no head position, headShift and neckLength = 0 - if (boneType == BoneType.HEAD || boneType == BoneType.NECK && (headTracker == null || !(headTracker!!.hasPosition && headTracker!!.hasRotation))) { + if ((boneType == BoneType.HEAD || boneType == BoneType.NECK) && (headTracker == null || !(headTracker!!.hasPosition && headTracker!!.hasRotation))) { transOffset = NULL } // If trackingArmFromController, reverse @@ -1078,7 +1075,7 @@ class HumanSkeleton( } legTweaks.resetBuffer() localizer.reset() - LogManager.info(String.format("[HumanSkeleton] Reset: full (%s)", resetSourceName)) + LogManager.info("[HumanSkeleton] Reset: full ($resetSourceName)") } @VRServerThread @@ -1099,7 +1096,7 @@ class HumanSkeleton( } } legTweaks.resetBuffer() - LogManager.info(String.format("[HumanSkeleton] Reset: yaw (%s)", resetSourceName)) + LogManager.info("[HumanSkeleton] Reset: yaw ($resetSourceName)") } @VRServerThread @@ -1121,7 +1118,7 @@ class HumanSkeleton( } legTweaks.resetBuffer() localizer.reset() - LogManager.info(String.format("[HumanSkeleton] Reset: mounting (%s)", resetSourceName)) + LogManager.info("[HumanSkeleton] Reset: mounting ($resetSourceName)") } @VRServerThread @@ -1137,7 +1134,7 @@ class HumanSkeleton( } } legTweaks.resetBuffer() - LogManager.info(String.format("[HumanSkeleton] Clear: mounting (%s)", resetSourceName)) + LogManager.info("[HumanSkeleton] Clear: mounting ($resetSourceName)") } fun updateTapDetectionConfig() { @@ -1223,7 +1220,7 @@ class HumanSkeleton( legTweaks.resetBuffer() } this.pauseTracking = pauseTracking - LogManager.info(String.format("[HumanSkeleton] ${if (pauseTracking) "Pause" else "Unpause"} tracking (%s)", sourceName)) + LogManager.info("[HumanSkeleton] ${if (pauseTracking) "Pause" else "Unpause"} tracking ($sourceName)") // Report the new state of tracking pause humanPoseManager.trackingPauseHandler.sendTrackingPauseState(pauseTracking) } diff --git a/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt index dc054c3ec..a47dbd0a6 100644 --- a/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt +++ b/server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt @@ -266,8 +266,8 @@ class TrackerResetsHandler(val tracker: Tracker) { makeIdentityAdjustmentQuatsFull() - // (don't adjust yaw if head and computed) - if (tracker.trackerPosition != TrackerPosition.HEAD || tracker.isComputed) { + // Don't adjust yaw if head and computed + if (tracker.trackerPosition != TrackerPosition.HEAD || !tracker.isComputed) { yawFix = fixYaw(mountingAdjustedRotation, reference) yawResetSmoothTimeRemain = 0.0f }