From 86f7c0d471e24f3c2c60485267fa8e553dfa02bb Mon Sep 17 00:00:00 2001 From: Erimel Date: Fri, 27 Jan 2023 07:13:32 -0500 Subject: [PATCH] Skeleton Separation Refactor (#442) --- .github/CODEOWNERS | 4 +- .../src/main/java/dev/slimevr/VRServer.java | 50 +- .../java/dev/slimevr/autobone/AutoBone.java | 147 ++--- .../dev/slimevr/autobone/AutoBoneHandler.java | 25 +- .../slimevr/autobone/AutoBoneListener.java | 6 +- .../autobone/AutoBoneTrainingStep.java | 36 +- .../autobone/errors/BodyProportionError.java | 10 +- .../errors/FootHeightOffsetError.java | 11 +- .../autobone/errors/OffsetSlideError.java | 11 +- .../autobone/errors/PositionError.java | 8 +- .../autobone/errors/PositionOffsetError.java | 8 +- .../slimevr/autobone/errors/SlideError.java | 11 +- .../proportions/HardProportionLimiter.java | 10 +- .../errors/proportions/ProportionLimiter.java | 4 +- .../proportions/RangeProportionLimiter.java | 8 +- .../main/java/dev/slimevr/bridge/Bridge.java | 2 +- .../slimevr/bridge/OpenVRNativeBridge.java | 2 +- .../dev/slimevr/bridge/ProtobufBridge.java | 9 +- .../java/dev/slimevr/bridge/VMCBridge.java | 2 +- .../java/dev/slimevr/config/BridgeConfig.java | 2 +- .../config/DriftCompensationConfig.java | 4 +- .../dev/slimevr/config/FiltersConfig.java | 4 +- .../java/dev/slimevr/config/OSCConfig.java | 2 +- .../dev/slimevr/config/TrackerConfig.java | 4 +- .../java/dev/slimevr/config/VRConfig.java | 4 +- .../java/dev/slimevr/osc/VRCOSCHandler.java | 18 +- .../dev/slimevr/platform/SteamVRBridge.java | 4 +- .../platform/linux/UnixSocketBridge.java | 2 +- .../windows/WindowsNamedPipeBridge.java | 2 +- .../windows/WindowsNamedPipeVRBridge.java | 2 +- .../dev/slimevr/poserecorder/PoseFrameIO.java | 2 +- .../poserecorder/PoseFrameSkeleton.java | 88 --- .../poserecorder/PoseFrameTracker.java | 12 +- .../dev/slimevr/poserecorder/PoseFrames.java | 34 +- .../slimevr/poserecorder/PoseRecorder.java | 2 +- .../slimevr/poserecorder/TrackerFrame.java | 8 +- .../slimevr/posestreamer/BVHFileStream.java | 16 +- .../slimevr/posestreamer/PoseDataStream.java | 8 +- .../posestreamer/PoseFrameStreamer.java | 13 +- .../slimevr/posestreamer/PoseStreamer.java | 11 +- .../posestreamer/ServerPoseStreamer.java | 4 +- .../posestreamer/StdBVHFileStream.java | 2 +- .../posestreamer/TickPoseStreamer.java | 6 +- .../posestreamer/TransformNodeWrapper.java | 2 +- .../protocol/datafeed/DataFeedBuilder.java | 6 +- .../protocol/datafeed/DataFeedHandler.java | 4 +- .../dev/slimevr/protocol/rpc/RPCBuilder.java | 8 +- .../dev/slimevr/protocol/rpc/RPCHandler.java | 20 +- .../rpc/settings/RPCSettingsBuilder.java | 36 +- .../rpc/settings/RPCSettingsHandler.java | 50 +- .../dev/slimevr/{vr => tracking}/Device.java | 4 +- .../{vr => tracking}/DeviceManager.java | 2 +- .../processor}/BoneInfo.java | 4 +- .../processor}/BoneType.java | 2 +- .../tracking/processor/HumanPoseManager.java | 579 ++++++++++++++++++ .../processor/TransformNode.java | 2 +- .../config/SkeletonConfigManager.java} | 230 +++---- .../config}/SkeletonConfigOffsets.java | 4 +- .../config}/SkeletonConfigToggles.java | 2 +- .../config}/SkeletonConfigValues.java | 2 +- .../processor/skeleton/HumanSkeleton.java | 183 ++---- .../processor/skeleton/LegTweakBuffer.java | 2 +- .../processor/skeleton/LegTweaks.java | 4 +- .../processor/skeleton/SkeletonData.java | 16 +- .../processor/skeleton/TapDetection.java | 4 +- .../skeleton/TapDetectionManager.java | 4 +- .../processor/skeleton/ViveEmulation.java | 7 +- .../trackers/CalibratingTracker.java | 2 +- .../trackers}/ComputedHumanPoseTracker.java | 5 +- .../ComputedHumanPoseTrackerPosition.java | 2 +- .../trackers/ComputedTracker.java | 4 +- .../{vr => tracking}/trackers/DeviceType.java | 2 +- .../{vr => tracking}/trackers/HMDTracker.java | 2 +- .../{vr => tracking}/trackers/IMUTracker.java | 8 +- .../{vr => tracking}/trackers/SensorTap.java | 2 +- .../trackers/ShareableTracker.java | 2 +- .../{vr => tracking}/trackers/Tracker.java | 4 +- .../trackers/TrackerPosition.java | 2 +- .../trackers/TrackerRole.java | 2 +- .../trackers/TrackerStatus.java | 2 +- .../trackers/TrackerUtils.java | 4 +- .../trackers/TrackerWithBattery.java | 2 +- .../trackers/TrackerWithFiltering.java | 2 +- .../trackers/TrackerWithTPS.java | 2 +- .../trackers/TrackerWithWireless.java | 2 +- .../{vr => tracking}/trackers/VRTracker.java | 4 +- .../trackers/udp/SensorSpecificPacket.java | 2 +- .../trackers/udp/TrackersUDPServer.java | 8 +- .../trackers/udp/UDPDevice.java | 8 +- .../trackers/udp/UDPPacket.java | 2 +- .../trackers/udp/UDPPacket0Heartbeat.java | 2 +- .../trackers/udp/UDPPacket10PingPong.java | 2 +- .../trackers/udp/UDPPacket11Serial.java | 2 +- .../trackers/udp/UDPPacket12BatteryLevel.java | 2 +- .../trackers/udp/UDPPacket13Tap.java | 4 +- .../trackers/udp/UDPPacket14Error.java | 2 +- .../trackers/udp/UDPPacket15SensorInfo.java | 4 +- .../trackers/udp/UDPPacket16Rotation2.java | 2 +- .../trackers/udp/UDPPacket17RotationData.java | 2 +- .../udp/UDPPacket18MagnetometerAccuracy.java | 2 +- .../udp/UDPPacket19SignalStrength.java | 2 +- .../trackers/udp/UDPPacket1Heartbeat.java | 2 +- .../trackers/udp/UDPPacket1Rotation.java | 2 +- .../udp/UDPPacket200ProtocolChange.java | 2 +- .../trackers/udp/UDPPacket20Temperature.java | 2 +- .../trackers/udp/UDPPacket21UserAction.java | 2 +- .../trackers/udp/UDPPacket3Handshake.java | 2 +- .../trackers/udp/UDPPacket4Acceleration.java | 2 +- .../trackers/udp/UDPProtocolParser.java | 2 +- .../vr/processor/HumanPoseProcessor.java | 264 -------- .../vr/processor/skeleton/Skeleton.java | 63 -- .../skeleton/SkeletonConfigCallback.java | 15 - .../websocketapi/WebSocketVRBridge.java | 2 +- .../unit/ReferenceAdjustmentsTests.java | 6 +- 114 files changed, 1180 insertions(+), 1082 deletions(-) delete mode 100644 server/src/main/java/dev/slimevr/poserecorder/PoseFrameSkeleton.java rename server/src/main/java/dev/slimevr/{vr => tracking}/Device.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/DeviceManager.java (95%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton => tracking/processor}/BoneInfo.java (95%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton => tracking/processor}/BoneType.java (96%) create mode 100644 server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/TransformNode.java (98%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton/SkeletonConfig.java => tracking/processor/config/SkeletonConfigManager.java} (75%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton => tracking/processor/config}/SkeletonConfigOffsets.java (97%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton => tracking/processor/config}/SkeletonConfigToggles.java (97%) rename server/src/main/java/dev/slimevr/{vr/processor/skeleton => tracking/processor/config}/SkeletonConfigValues.java (97%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/HumanSkeleton.java (92%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/LegTweakBuffer.java (99%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/LegTweaks.java (99%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/SkeletonData.java (95%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/TapDetection.java (98%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/TapDetectionManager.java (98%) rename server/src/main/java/dev/slimevr/{vr => tracking}/processor/skeleton/ViveEmulation.java (97%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/CalibratingTracker.java (86%) rename server/src/main/java/dev/slimevr/{vr/processor => tracking/trackers}/ComputedHumanPoseTracker.java (92%) rename server/src/main/java/dev/slimevr/{vr/processor => tracking/trackers}/ComputedHumanPoseTrackerPosition.java (81%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/ComputedTracker.java (97%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/DeviceType.java (65%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/HMDTracker.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/IMUTracker.java (99%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/SensorTap.java (87%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/ShareableTracker.java (69%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/Tracker.java (94%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerPosition.java (99%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerRole.java (98%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerStatus.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerUtils.java (95%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerWithBattery.java (71%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerWithFiltering.java (79%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerWithTPS.java (65%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/TrackerWithWireless.java (68%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/VRTracker.java (96%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/SensorSpecificPacket.java (85%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/TrackersUDPServer.java (98%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPDevice.java (90%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket.java (97%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket0Heartbeat.java (90%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket10PingPong.java (91%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket11Serial.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket12BatteryLevel.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket13Tap.java (86%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket14Error.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket15SensorInfo.java (90%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket16Rotation2.java (83%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket17RotationData.java (95%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket18MagnetometerAccuracy.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket19SignalStrength.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket1Heartbeat.java (73%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket1Rotation.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket200ProtocolChange.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket20Temperature.java (93%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket21UserAction.java (92%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket3Handshake.java (97%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPPacket4Acceleration.java (95%) rename server/src/main/java/dev/slimevr/{vr => tracking}/trackers/udp/UDPProtocolParser.java (98%) delete mode 100644 server/src/main/java/dev/slimevr/vr/processor/HumanPoseProcessor.java delete mode 100644 server/src/main/java/dev/slimevr/vr/processor/skeleton/Skeleton.java delete mode 100644 server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigCallback.java diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3c0d96577..3c2f2db54 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -10,7 +10,7 @@ /gui/src/components/settings/ @Louka3000 @loucass003 -/gui/src-tauri/ @ImUrX @TheButlah +/gui/src-tauri/ @ImUrX @TheButlah # Some server code~ /server/ @ButterscotchV @Eirenliel @Louka3000 @@ -20,7 +20,7 @@ /server/src/main/java/dev/slimevr/posestreamer/ @ButterscotchV /server/src/main/java/dev/slimevr/osc/ @Louka3000 -/server/src/main/java/dev/slimevr/vr/processor/ @Louka3000 +/server/src/main/java/dev/slimevr/tracking/processor/ @Louka3000 /server/src/main/java/dev/slimevr/filtering/ @Louka3000 server/src/main/java/dev/slimevr/config/ @loucass003 diff --git a/server/src/main/java/dev/slimevr/VRServer.java b/server/src/main/java/dev/slimevr/VRServer.java index 6f8fc7e2d..8d14f43ac 100644 --- a/server/src/main/java/dev/slimevr/VRServer.java +++ b/server/src/main/java/dev/slimevr/VRServer.java @@ -15,13 +15,13 @@ import dev.slimevr.poserecorder.BVHRecorder; import dev.slimevr.protocol.ProtocolAPI; import dev.slimevr.serial.SerialHandler; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.DeviceManager; -import dev.slimevr.vr.processor.HumanPoseProcessor; -import dev.slimevr.vr.processor.skeleton.Skeleton; -import dev.slimevr.vr.trackers.HMDTracker; -import dev.slimevr.vr.trackers.ShareableTracker; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.udp.TrackersUDPServer; +import dev.slimevr.tracking.DeviceManager; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.HMDTracker; +import dev.slimevr.tracking.trackers.ShareableTracker; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.udp.TrackersUDPServer; import dev.slimevr.websocketapi.WebSocketVRBridge; import io.eiren.util.OperatingSystem; import io.eiren.util.ann.ThreadSafe; @@ -42,7 +42,7 @@ import java.util.function.Consumer; public class VRServer extends Thread { - public final HumanPoseProcessor humanPoseProcessor; + public final HumanPoseManager humanPoseManager; public final HMDTracker hmdTracker; private final List trackers = new FastList<>(); private final TrackersUDPServer trackersServer; @@ -85,8 +85,8 @@ public class VRServer extends Thread { hmdTracker.position.set(0, 1.8f, 0); // Set starting position for easier // debugging // TODO Multiple processors - humanPoseProcessor = new HumanPoseProcessor(this); - shareTrackers = humanPoseProcessor.getComputedTrackers(); + humanPoseManager = new HumanPoseManager(this); + shareTrackers = humanPoseManager.getShareableTracker(); // Start server for SlimeVR trackers int trackerPort = configManager.getVrConfig().getServer().getTrackerPort(); @@ -178,7 +178,7 @@ public class VRServer extends Thread { vrcOSCHandler = new VRCOSCHandler( this, hmdTracker, - humanPoseProcessor, + humanPoseManager, driverBridge, getConfigManager().getVrConfig().getVrcOSC(), shareTrackers @@ -234,15 +234,15 @@ public class VRServer extends Thread { @ThreadSafe public void trackerUpdated(Tracker tracker) { queueTask(() -> { - humanPoseProcessor.trackerUpdated(tracker); + humanPoseManager.trackerUpdated(tracker); this.getConfigManager().getVrConfig().writeTrackerConfig(tracker); this.getConfigManager().saveConfig(); }); } @ThreadSafe - public void addSkeletonUpdatedCallback(Consumer consumer) { - queueTask(() -> humanPoseProcessor.addSkeletonUpdatedCallback(consumer)); + public void addSkeletonUpdatedCallback(Consumer consumer) { + queueTask(() -> humanPoseManager.addSkeletonUpdatedCallback(consumer)); } @Override @@ -267,7 +267,7 @@ public class VRServer extends Thread { for (Tracker tracker : trackers) { tracker.tick(); } - humanPoseProcessor.update(); + humanPoseManager.update(); for (Bridge bridge : bridges) { bridge.dataWrite(); } @@ -286,7 +286,7 @@ public class VRServer extends Thread { @VRServerThread private void trackerAdded(Tracker tracker) { - humanPoseProcessor.trackerAdded(tracker); + humanPoseManager.trackerAdded(tracker); } @ThreadSecure @@ -302,15 +302,15 @@ public class VRServer extends Thread { } public void resetTrackers() { - queueTask(humanPoseProcessor::resetTrackers); + queueTask(humanPoseManager::resetTrackersFull); } public void resetTrackersYaw() { - queueTask(humanPoseProcessor::resetTrackersYaw); + queueTask(humanPoseManager::resetTrackersYaw); } public void resetTrackersMounting() { - queueTask(humanPoseProcessor::resetTrackersMounting); + queueTask(humanPoseManager::resetTrackersMounting); } public void scheduleResetTrackers(long delay) { @@ -330,32 +330,32 @@ public class VRServer extends Thread { class resetTask extends TimerTask { public void run() { - queueTask(humanPoseProcessor::resetTrackers); + queueTask(humanPoseManager::resetTrackersFull); } } class yawResetTask extends TimerTask { public void run() { - queueTask(humanPoseProcessor::resetTrackersYaw); + queueTask(humanPoseManager::resetTrackersYaw); } } class resetMountingTask extends TimerTask { public void run() { - queueTask(humanPoseProcessor::resetTrackersMounting); + queueTask(humanPoseManager::resetTrackersMounting); } } public void setLegTweaksEnabled(boolean value) { - queueTask(() -> humanPoseProcessor.setLegTweaksEnabled(value)); + queueTask(() -> humanPoseManager.setLegTweaksEnabled(value)); } public void setSkatingReductionEnabled(boolean value) { - queueTask(() -> humanPoseProcessor.setSkatingCorrectionEnabled(value)); + queueTask(() -> humanPoseManager.setSkatingCorrectionEnabled(value)); } public void setFloorClipEnabled(boolean value) { - queueTask(() -> humanPoseProcessor.setFloorClipEnabled(value)); + queueTask(() -> humanPoseManager.setFloorClipEnabled(value)); } public int getTrackersCount() { diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBone.java b/server/src/main/java/dev/slimevr/autobone/AutoBone.java index 089dd1dc6..51ba8af89 100644 --- a/server/src/main/java/dev/slimevr/autobone/AutoBone.java +++ b/server/src/main/java/dev/slimevr/autobone/AutoBone.java @@ -6,13 +6,15 @@ import dev.slimevr.VRServer; import dev.slimevr.autobone.errors.*; import dev.slimevr.config.AutoBoneConfig; import dev.slimevr.poserecorder.PoseFrameIO; -import dev.slimevr.poserecorder.PoseFrameSkeleton; import dev.slimevr.poserecorder.PoseFrameTracker; import dev.slimevr.poserecorder.PoseFrames; -import dev.slimevr.vr.processor.HumanPoseProcessor; -import dev.slimevr.vr.processor.TransformNode; -import dev.slimevr.vr.processor.skeleton.*; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.BoneType; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.TransformNode; +import dev.slimevr.tracking.processor.config.SkeletonConfigManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.TrackerRole; import io.eiren.util.StringUtils; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; @@ -116,19 +118,22 @@ public class AutoBone { return loadDir; } - public float computeBoneOffset(BoneType bone, SkeletonConfig skeletonConfig) { + public float computeBoneOffset( + BoneType bone, + Function getOffset + ) { return switch (bone) { - case HEAD -> skeletonConfig.getOffset(SkeletonConfigOffsets.HEAD); - case NECK -> skeletonConfig.getOffset(SkeletonConfigOffsets.NECK); - case CHEST -> skeletonConfig.getOffset(SkeletonConfigOffsets.CHEST); - case WAIST -> skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST); - case HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIP); - case LEFT_HIP, RIGHT_HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIPS_WIDTH) + case HEAD -> getOffset.apply(SkeletonConfigOffsets.HEAD); + case NECK -> getOffset.apply(SkeletonConfigOffsets.NECK); + case CHEST -> getOffset.apply(SkeletonConfigOffsets.CHEST); + case WAIST -> getOffset.apply(SkeletonConfigOffsets.WAIST); + case HIP -> getOffset.apply(SkeletonConfigOffsets.HIP); + case LEFT_HIP, RIGHT_HIP -> getOffset.apply(SkeletonConfigOffsets.HIPS_WIDTH) / 2f; - case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> skeletonConfig - .getOffset(SkeletonConfigOffsets.UPPER_LEG); - case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> skeletonConfig - .getOffset(SkeletonConfigOffsets.LOWER_LEG); + case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> getOffset + .apply(SkeletonConfigOffsets.UPPER_LEG); + case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> getOffset + .apply(SkeletonConfigOffsets.LOWER_LEG); default -> -1f; }; @@ -143,13 +148,13 @@ public class AutoBone { offsets.clear(); // Get current or default skeleton configs - Skeleton skeleton = getSkeleton(); - SkeletonConfig skeletonConfig = skeleton != null - ? skeleton.getSkeletonConfig() - : new SkeletonConfig(false); + HumanPoseManager skeleton = getHumanPoseManager(); + Function getOffset = skeleton != null + ? skeleton::getOffset + : new SkeletonConfigManager(false)::getOffset; for (BoneType bone : adjustOffsets) { - float offset = computeBoneOffset(bone, skeletonConfig); + float offset = computeBoneOffset(bone, getOffset); if (offset > 0f) { offsets.put(bone, offset); } @@ -157,7 +162,7 @@ public class AutoBone { } public Vector3f getBoneDirection( - HumanSkeleton skeleton, + HumanPoseManager skeleton, BoneType node, boolean rightSide, Vector3f buffer @@ -184,8 +189,8 @@ public class AutoBone { } public float getDotProductDiff( - HumanSkeleton skeleton1, - HumanSkeleton skeleton2, + HumanPoseManager skeleton1, + HumanPoseManager skeleton2, BoneType node, boolean rightSide, Vector3f offset @@ -203,20 +208,19 @@ public class AutoBone { } /** - * A simple utility method to get the {@link Skeleton} from the + * A simple utility method to get the {@link HumanSkeleton} from the * {@link VRServer} * - * @return The {@link Skeleton} associated with the {@link VRServer}, or - * null if there is none available - * @see {@link VRServer}, {@link Skeleton} + * @return The {@link HumanSkeleton} associated with the {@link VRServer}, + * or null if there is none available + * @see {@link VRServer}, {@link HumanSkeleton} */ - private Skeleton getSkeleton() { - HumanPoseProcessor humanPoseProcessor = server != null ? server.humanPoseProcessor : null; - return humanPoseProcessor != null ? humanPoseProcessor.getSkeleton() : null; + private HumanPoseManager getHumanPoseManager() { + return server != null ? server.humanPoseManager : null; } public void applyAndSaveConfig() { - if (!applyAndSaveConfig(getSkeleton())) { + if (!applyAndSaveConfig(getHumanPoseManager())) { // Unable to apply to skeleton, save directly // saveConfigs(); } @@ -305,28 +309,30 @@ public class AutoBone { return applyConfig(skeletonConfig, offsets); } - public boolean applyConfig(SkeletonConfig skeletonConfig, Map offsets) { - if (skeletonConfig == null) { + public boolean applyConfig( + HumanPoseManager humanPoseManager, + Map offsets + ) { + if (humanPoseManager == null) { return false; } - return applyConfig(skeletonConfig::setOffset, offsets); + return applyConfig(humanPoseManager::setOffset, offsets); } - public boolean applyConfig(SkeletonConfig skeletonConfig) { - return applyConfig(skeletonConfig, offsets); + public boolean applyConfig(HumanPoseManager humanPoseManager) { + return applyConfig(humanPoseManager, offsets); } - public boolean applyAndSaveConfig(Skeleton skeleton) { - if (skeleton == null) { + public boolean applyAndSaveConfig(HumanPoseManager humanPoseManager) { + if (humanPoseManager == null) { return false; } - SkeletonConfig skeletonConfig = skeleton.getSkeletonConfig(); - if (!applyConfig(skeletonConfig)) + if (!applyConfig(humanPoseManager)) return false; - skeletonConfig.save(); + humanPoseManager.saveConfig(); server.getConfigManager().saveConfig(); LogManager.info("[AutoBone] Configured skeleton bone lengths"); @@ -362,9 +368,9 @@ public class AutoBone { public float sumSelectConfigs( List selection, - SkeletonConfig config + HumanPoseManager humanPoseManager ) { - return sumSelectConfigs(selection, config::getOffset); + return sumSelectConfigs(selection, humanPoseManager::getOffset); } public float getLengthSum(Map configs) { @@ -396,11 +402,11 @@ public class AutoBone { public float getTargetHeight(PoseFrames frames) { float targetHeight; // Get the current skeleton from the server - Skeleton skeleton = getSkeleton(); - if (skeleton != null) { + HumanPoseManager humanPoseManager = getHumanPoseManager(); + if (humanPoseManager != null) { // If there is a skeleton available, calculate the target height // from its configs - targetHeight = sumSelectConfigs(legacyHeightConfigs, skeleton.getSkeletonConfig()); + targetHeight = sumSelectConfigs(legacyHeightConfigs, humanPoseManager); LogManager .warning( "[AutoBone] Target height loaded from skeleton (Make sure you reset before running!): " @@ -448,17 +454,20 @@ public class AutoBone { ) throws AutoBoneException { final int frameCount = frames.getMaxFrameCount(); - List trackers = frames.getTrackers(); - reloadConfigValues(trackers); // Reload configs and detect chest tracker - // from the first frame + final PoseFrames frames1 = new PoseFrames(frames); + final PoseFrames frames2 = new PoseFrames(frames); - final PoseFrameSkeleton skeleton1 = new PoseFrameSkeleton( - trackers, - null + List trackers1 = frames1.getTrackers(); + List trackers2 = frames2.getTrackers(); + + // Reload configs and detect chest tracker from the first frame + reloadConfigValues(trackers1); + + final HumanPoseManager skeleton1 = new HumanPoseManager( + trackers1 ); - final PoseFrameSkeleton skeleton2 = new PoseFrameSkeleton( - trackers, - null + final HumanPoseManager skeleton2 = new HumanPoseManager( + trackers2 ); EnumMap intermediateOffsets = new EnumMap<>( @@ -525,8 +534,8 @@ public class AutoBone { ) { int frameCursor2 = frameCursor + cursorOffset; - applyConfig(skeleton1.skeletonConfig); - skeleton2.skeletonConfig.setOffsets(skeleton1.skeletonConfig); + applyConfig(skeleton1); + applyConfig(skeleton2); if (config.randomizeFrameOrder) { trainingStep @@ -538,11 +547,11 @@ public class AutoBone { trainingStep.setCursors(frameCursor, frameCursor2); } - skeleton1.setCursor(trainingStep.getCursor1()); - skeleton2.setCursor(trainingStep.getCursor2()); + frames1.setCursors(trainingStep.getCursor1()); + frames2.setCursors(trainingStep.getCursor2()); - skeleton1.updatePose(); - skeleton2.updatePose(); + skeleton1.update(); + skeleton2.update(); float totalLength = getLengthSum(offsets); float curHeight = sumSelectConfigs(heightOffsets, offsets); @@ -558,7 +567,7 @@ public class AutoBone { .warning( "[AutoBone] Error value is invalid, resetting variables to recover" ); - reloadConfigValues(trackers); + reloadConfigValues(trackers1); // Reset error sum values errorStats.reset(); @@ -632,12 +641,12 @@ public class AutoBone { // Apply new offset length intermediateOffsets.put(entry.getKey(), newLength); - applyConfig(skeleton1.skeletonConfig, intermediateOffsets); - skeleton2.skeletonConfig.setOffsets(skeleton1.skeletonConfig); + applyConfig(skeleton1, intermediateOffsets); + applyConfig(skeleton2, intermediateOffsets); // Update the skeleton poses for the new offset length - skeleton1.updatePose(); - skeleton2.updatePose(); + skeleton1.update(); + skeleton2.update(); float newHeight = isHeightVar ? curHeight + curAdjustVal : curHeight; trainingStep.setCurrentHeight(newHeight); @@ -651,8 +660,8 @@ public class AutoBone { // Reset the length to minimize bias in other variables, // it's applied later intermediateOffsets.put(entry.getKey(), originalLength); - applyConfig(skeleton1.skeletonConfig, intermediateOffsets); - skeleton2.skeletonConfig.setOffsets(skeleton1.skeletonConfig); + applyConfig(skeleton1, intermediateOffsets); + applyConfig(skeleton2, intermediateOffsets); } if (config.scaleEachStep) { diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.java b/server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.java index 7540ca605..2e4752457 100644 --- a/server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.java +++ b/server/src/main/java/dev/slimevr/autobone/AutoBoneHandler.java @@ -4,8 +4,8 @@ import dev.slimevr.VRServer; import dev.slimevr.autobone.AutoBone.AutoBoneResults; import dev.slimevr.autobone.errors.AutoBoneException; import dev.slimevr.poserecorder.*; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.config.SkeletonConfigManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; import io.eiren.util.StringUtils; import io.eiren.util.logging.LogManager; import org.apache.commons.lang3.tuple.Pair; @@ -314,7 +314,7 @@ public class AutoBoneHandler { announceProcessStatus(AutoBoneProcessType.PROCESS, "Processing recording(s)..."); LogManager.info("[AutoBone] Processing frames..."); StatsCalculator errorStats = new StatsCalculator(); - SkeletonConfig skeletonConfigBuffer = new SkeletonConfig(false); + SkeletonConfigManager skeletonConfigManagerBuffer = new SkeletonConfigManager(false); for (Pair recording : frameRecordings) { LogManager .info("[AutoBone] Processing frames from \"" + recording.getKey() + "\"..."); @@ -355,23 +355,24 @@ public class AutoBoneHandler { LogManager.info("[AutoBone] Done processing!"); // #region Stats/Values - skeletonConfigBuffer.setOffsets(autoBoneResults.configValues); + skeletonConfigManagerBuffer.setOffsets(autoBoneResults.configValues); - float neckLength = skeletonConfigBuffer.getOffset(SkeletonConfigOffsets.NECK); - float chestLength = skeletonConfigBuffer + float neckLength = skeletonConfigManagerBuffer + .getOffset(SkeletonConfigOffsets.NECK); + float chestLength = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.CHEST); - float waistLength = skeletonConfigBuffer + float waistLength = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.WAIST); - float hipLength = skeletonConfigBuffer + float hipLength = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.HIP); float torsoLength = chestLength + waistLength + hipLength; - float hipWidth = skeletonConfigBuffer + float hipWidth = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.HIPS_WIDTH); - float legLength = skeletonConfigBuffer + float legLength = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.UPPER_LEG) - + skeletonConfigBuffer + + skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.LOWER_LEG); - float lowerLegLength = skeletonConfigBuffer + float lowerLegLength = skeletonConfigManagerBuffer .getOffset(SkeletonConfigOffsets.LOWER_LEG); float neckTorso = neckLength / torsoLength; diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneListener.java b/server/src/main/java/dev/slimevr/autobone/AutoBoneListener.java index d4fc1ef91..8c81dc3e2 100644 --- a/server/src/main/java/dev/slimevr/autobone/AutoBoneListener.java +++ b/server/src/main/java/dev/slimevr/autobone/AutoBoneListener.java @@ -1,10 +1,10 @@ package dev.slimevr.autobone; -import java.util.EnumMap; - import dev.slimevr.autobone.AutoBone.Epoch; import dev.slimevr.poserecorder.PoseFrames; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; + +import java.util.EnumMap; public interface AutoBoneListener { diff --git a/server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.java b/server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.java index debdc1799..688baaad2 100644 --- a/server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.java +++ b/server/src/main/java/dev/slimevr/autobone/AutoBoneTrainingStep.java @@ -1,10 +1,10 @@ package dev.slimevr.autobone; -import java.util.Map; - -import dev.slimevr.poserecorder.PoseFrameSkeleton; import dev.slimevr.poserecorder.PoseFrames; -import dev.slimevr.vr.processor.skeleton.BoneType; +import dev.slimevr.tracking.processor.BoneType; +import dev.slimevr.tracking.processor.HumanPoseManager; + +import java.util.Map; public class AutoBoneTrainingStep { @@ -14,8 +14,8 @@ public class AutoBoneTrainingStep { private float currentHeight; private final float targetHeight; - private final PoseFrameSkeleton skeleton1; - private final PoseFrameSkeleton skeleton2; + private final HumanPoseManager humanPoseManager1; + private final HumanPoseManager humanPoseManager2; private final PoseFrames trainingFrames; @@ -25,30 +25,30 @@ public class AutoBoneTrainingStep { int cursor1, int cursor2, float targetHeight, - PoseFrameSkeleton skeleton1, - PoseFrameSkeleton skeleton2, + HumanPoseManager humanPoseManager1, + HumanPoseManager humanPoseManager2, PoseFrames trainingFrames, Map intermediateOffsets ) { this.cursor1 = cursor1; this.cursor2 = cursor2; this.targetHeight = targetHeight; - this.skeleton1 = skeleton1; - this.skeleton2 = skeleton2; + this.humanPoseManager1 = humanPoseManager1; + this.humanPoseManager2 = humanPoseManager2; this.trainingFrames = trainingFrames; this.intermediateOffsets = intermediateOffsets; } public AutoBoneTrainingStep( float targetHeight, - PoseFrameSkeleton skeleton1, - PoseFrameSkeleton skeleton2, + HumanPoseManager humanPoseManager1, + HumanPoseManager humanPoseManager2, PoseFrames trainingFrames, Map intermediateOffsets ) { this.targetHeight = targetHeight; - this.skeleton1 = skeleton1; - this.skeleton2 = skeleton2; + this.humanPoseManager1 = humanPoseManager1; + this.humanPoseManager2 = humanPoseManager2; this.trainingFrames = trainingFrames; this.intermediateOffsets = intermediateOffsets; } @@ -86,12 +86,12 @@ public class AutoBoneTrainingStep { return targetHeight; } - public PoseFrameSkeleton getSkeleton1() { - return skeleton1; + public HumanPoseManager getHumanPoseManager1() { + return humanPoseManager1; } - public PoseFrameSkeleton getSkeleton2() { - return skeleton2; + public HumanPoseManager getHumanPoseManager2() { + return humanPoseManager2; } public PoseFrames getTrainingFrames() { diff --git a/server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.java b/server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.java index 593e5e696..5758fd616 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/BodyProportionError.java @@ -5,8 +5,8 @@ import com.jme3.math.FastMath; import dev.slimevr.autobone.AutoBoneTrainingStep; import dev.slimevr.autobone.errors.proportions.ProportionLimiter; import dev.slimevr.autobone.errors.proportions.RangeProportionLimiter; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; // The distance from average human proportions @@ -120,17 +120,17 @@ public class BodyProportionError implements IAutoBoneError { @Override public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException { return getBodyProportionError( - trainingStep.getSkeleton1().skeletonConfig, + trainingStep.getHumanPoseManager1(), trainingStep.getCurrentHeight() ); } - public float getBodyProportionError(SkeletonConfig config, float height) { + public float getBodyProportionError(HumanPoseManager humanPoseManager, float height) { float fullHeight = height / eyeHeightToHeightRatio; float sum = 0f; for (ProportionLimiter limiter : proportionLimits) { - sum += FastMath.abs(limiter.getProportionError(config, fullHeight)); + sum += FastMath.abs(limiter.getProportionError(humanPoseManager, fullHeight)); } return sum; diff --git a/server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.java b/server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.java index 5d33a9cf4..b5201e476 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/FootHeightOffsetError.java @@ -3,16 +3,19 @@ package dev.slimevr.autobone.errors; import com.jme3.math.FastMath; import dev.slimevr.autobone.AutoBoneTrainingStep; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.trackers.ComputedTracker; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.ComputedTracker; +import dev.slimevr.tracking.trackers.TrackerRole; // The offset between the height both feet at one instant and over time public class FootHeightOffsetError implements IAutoBoneError { @Override public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException { - return getSlideError(trainingStep.getSkeleton1(), trainingStep.getSkeleton2()); + return getSlideError( + trainingStep.getHumanPoseManager1().getSkeleton(), + trainingStep.getHumanPoseManager2().getSkeleton() + ); } public static float getSlideError(HumanSkeleton skeleton1, HumanSkeleton skeleton2) { diff --git a/server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.java b/server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.java index 2c72814a6..dc6a7d418 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/OffsetSlideError.java @@ -4,16 +4,19 @@ import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import dev.slimevr.autobone.AutoBoneTrainingStep; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.trackers.ComputedTracker; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.ComputedTracker; +import dev.slimevr.tracking.trackers.TrackerRole; // The change in distance between both of the ankles over time public class OffsetSlideError implements IAutoBoneError { @Override public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException { - return getSlideError(trainingStep.getSkeleton1(), trainingStep.getSkeleton2()); + return getSlideError( + trainingStep.getHumanPoseManager1().getSkeleton(), + trainingStep.getHumanPoseManager2().getSkeleton() + ); } public static float getSlideError(HumanSkeleton skeleton1, HumanSkeleton skeleton2) { diff --git a/server/src/main/java/dev/slimevr/autobone/errors/PositionError.java b/server/src/main/java/dev/slimevr/autobone/errors/PositionError.java index 5c011d631..608458158 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/PositionError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/PositionError.java @@ -8,8 +8,8 @@ import dev.slimevr.autobone.AutoBoneTrainingStep; import dev.slimevr.poserecorder.PoseFrameTracker; import dev.slimevr.poserecorder.TrackerFrame; import dev.slimevr.poserecorder.TrackerFrameData; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.trackers.ComputedTracker; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.ComputedTracker; // The distance of any points to the corresponding absolute position @@ -20,12 +20,12 @@ public class PositionError implements IAutoBoneError { return (getPositionError( trackers, trainingStep.getCursor1(), - trainingStep.getSkeleton1() + trainingStep.getHumanPoseManager1().getSkeleton() ) + getPositionError( trackers, trainingStep.getCursor2(), - trainingStep.getSkeleton2() + trainingStep.getHumanPoseManager2().getSkeleton() )) / 2f; } diff --git a/server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.java b/server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.java index 2c44f3f23..6630f84be 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/PositionOffsetError.java @@ -8,8 +8,8 @@ import dev.slimevr.autobone.AutoBoneTrainingStep; import dev.slimevr.poserecorder.PoseFrameTracker; import dev.slimevr.poserecorder.TrackerFrame; import dev.slimevr.poserecorder.TrackerFrameData; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.trackers.ComputedTracker; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.ComputedTracker; // The difference between offset of absolute position and the corresponding point over time @@ -21,8 +21,8 @@ public class PositionOffsetError implements IAutoBoneError { trackers, trainingStep.getCursor1(), trainingStep.getCursor2(), - trainingStep.getSkeleton1(), - trainingStep.getSkeleton2() + trainingStep.getHumanPoseManager1().getSkeleton(), + trainingStep.getHumanPoseManager2().getSkeleton() ); } diff --git a/server/src/main/java/dev/slimevr/autobone/errors/SlideError.java b/server/src/main/java/dev/slimevr/autobone/errors/SlideError.java index cd58eee54..a2d339550 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/SlideError.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/SlideError.java @@ -1,16 +1,19 @@ package dev.slimevr.autobone.errors; import dev.slimevr.autobone.AutoBoneTrainingStep; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.trackers.ComputedTracker; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.ComputedTracker; +import dev.slimevr.tracking.trackers.TrackerRole; // The change in position of the ankle over time public class SlideError implements IAutoBoneError { @Override public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException { - return getSlideError(trainingStep.getSkeleton1(), trainingStep.getSkeleton2()); + return getSlideError( + trainingStep.getHumanPoseManager1().getSkeleton(), + trainingStep.getHumanPoseManager2().getSkeleton() + ); } public static float getSlideError(HumanSkeleton skeleton1, HumanSkeleton skeleton2) { diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.java b/server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.java index 57943fe51..c0aaec262 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/proportions/HardProportionLimiter.java @@ -1,6 +1,6 @@ package dev.slimevr.autobone.errors.proportions; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; +import dev.slimevr.tracking.processor.HumanPoseManager; import java.util.function.Function; @@ -8,7 +8,7 @@ import java.util.function.Function; public class HardProportionLimiter implements ProportionLimiter { protected final float targetRatio; - protected final Function boneLengthFunction; + protected final Function boneLengthFunction; /** * @param targetRatio The bone to height ratio to target @@ -17,15 +17,15 @@ public class HardProportionLimiter implements ProportionLimiter { */ public HardProportionLimiter( float targetRatio, - Function boneLengthFunction + Function boneLengthFunction ) { this.targetRatio = targetRatio; this.boneLengthFunction = boneLengthFunction; } @Override - public float getProportionError(SkeletonConfig config, float height) { - float boneLength = boneLengthFunction.apply(config); + public float getProportionError(HumanPoseManager humanPoseManager, float height) { + float boneLength = boneLengthFunction.apply(humanPoseManager); return targetRatio - (boneLength / height); } diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.java b/server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.java index 69932552a..e8997db08 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/proportions/ProportionLimiter.java @@ -1,10 +1,10 @@ package dev.slimevr.autobone.errors.proportions; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; +import dev.slimevr.tracking.processor.HumanPoseManager; public interface ProportionLimiter { - public float getProportionError(SkeletonConfig config, float height); + public float getProportionError(HumanPoseManager humanPoseManager, float height); public float getTargetRatio(); } diff --git a/server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.java b/server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.java index 3955c8907..666d83127 100644 --- a/server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.java +++ b/server/src/main/java/dev/slimevr/autobone/errors/proportions/RangeProportionLimiter.java @@ -1,7 +1,7 @@ package dev.slimevr.autobone.errors.proportions; import com.jme3.math.FastMath; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; +import dev.slimevr.tracking.processor.HumanPoseManager; import java.util.function.Function; @@ -19,7 +19,7 @@ public class RangeProportionLimiter extends HardProportionLimiter { */ public RangeProportionLimiter( float targetRatio, - Function boneLengthFunction, + Function boneLengthFunction, float range ) { super(targetRatio, boneLengthFunction); @@ -41,7 +41,7 @@ public class RangeProportionLimiter extends HardProportionLimiter { */ public RangeProportionLimiter( float targetRatio, - Function boneLengthFunction, + Function boneLengthFunction, float positiveRange, float negativeRange ) { @@ -58,7 +58,7 @@ public class RangeProportionLimiter extends HardProportionLimiter { } @Override - public float getProportionError(SkeletonConfig config, float height) { + public float getProportionError(HumanPoseManager config, float height) { float boneLength = boneLengthFunction.apply(config); float ratioOffset = targetRatio - (boneLength / height); diff --git a/server/src/main/java/dev/slimevr/bridge/Bridge.java b/server/src/main/java/dev/slimevr/bridge/Bridge.java index 15b154beb..a2d82296b 100644 --- a/server/src/main/java/dev/slimevr/bridge/Bridge.java +++ b/server/src/main/java/dev/slimevr/bridge/Bridge.java @@ -1,7 +1,7 @@ package dev.slimevr.bridge; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.trackers.ShareableTracker; +import dev.slimevr.tracking.trackers.ShareableTracker; /** diff --git a/server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java b/server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java index 72e047772..500c2a398 100644 --- a/server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java +++ b/server/src/main/java/dev/slimevr/bridge/OpenVRNativeBridge.java @@ -1,7 +1,7 @@ package dev.slimevr.bridge; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.trackers.ShareableTracker; +import dev.slimevr.tracking.trackers.ShareableTracker; public class OpenVRNativeBridge implements Bridge { diff --git a/server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java b/server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java index 620adf6fb..940798770 100644 --- a/server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java +++ b/server/src/main/java/dev/slimevr/bridge/ProtobufBridge.java @@ -6,7 +6,7 @@ import dev.slimevr.Main; import dev.slimevr.bridge.ProtobufMessages.TrackerStatus; import dev.slimevr.bridge.ProtobufMessages.*; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.trackers.*; import io.eiren.util.ann.Synchronize; import io.eiren.util.ann.ThreadSafe; import io.eiren.util.collections.FastList; @@ -193,7 +193,8 @@ public abstract class ProtobufBridge implements Bridge { if (tracker != null) { tracker .setStatus( - dev.slimevr.vr.trackers.TrackerStatus.getById(trackerStatus.getStatusValue()) + dev.slimevr.tracking.trackers.TrackerStatus + .getById(trackerStatus.getStatusValue()) ); } } @@ -224,11 +225,11 @@ public abstract class ProtobufBridge implements Bridge { for (Entry integerTEntry : remoteTrackersByTrackerId.entrySet()) { integerTEntry .getValue() - .setStatus(dev.slimevr.vr.trackers.TrackerStatus.DISCONNECTED); + .setStatus(dev.slimevr.tracking.trackers.TrackerStatus.DISCONNECTED); } } if (hmdTracker != null) { - hmd.setStatus(dev.slimevr.vr.trackers.TrackerStatus.DISCONNECTED); + hmd.setStatus(dev.slimevr.tracking.trackers.TrackerStatus.DISCONNECTED); } } diff --git a/server/src/main/java/dev/slimevr/bridge/VMCBridge.java b/server/src/main/java/dev/slimevr/bridge/VMCBridge.java index aa70192e8..841f82fc1 100644 --- a/server/src/main/java/dev/slimevr/bridge/VMCBridge.java +++ b/server/src/main/java/dev/slimevr/bridge/VMCBridge.java @@ -1,6 +1,6 @@ package dev.slimevr.bridge; -import dev.slimevr.vr.trackers.ShareableTracker; +import dev.slimevr.tracking.trackers.ShareableTracker; import java.net.InetAddress; diff --git a/server/src/main/java/dev/slimevr/config/BridgeConfig.java b/server/src/main/java/dev/slimevr/config/BridgeConfig.java index 90e8dbeae..b0359c873 100644 --- a/server/src/main/java/dev/slimevr/config/BridgeConfig.java +++ b/server/src/main/java/dev/slimevr/config/BridgeConfig.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.StdKeySerializers; import dev.slimevr.config.serializers.BooleanMapDeserializer; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.trackers.TrackerRole; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/config/DriftCompensationConfig.java b/server/src/main/java/dev/slimevr/config/DriftCompensationConfig.java index ff350ccfd..ac4cea2fa 100644 --- a/server/src/main/java/dev/slimevr/config/DriftCompensationConfig.java +++ b/server/src/main/java/dev/slimevr/config/DriftCompensationConfig.java @@ -1,8 +1,8 @@ package dev.slimevr.config; import dev.slimevr.Main; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; public class DriftCompensationConfig { diff --git a/server/src/main/java/dev/slimevr/config/FiltersConfig.java b/server/src/main/java/dev/slimevr/config/FiltersConfig.java index 6594794fd..b1fdf77c7 100644 --- a/server/src/main/java/dev/slimevr/config/FiltersConfig.java +++ b/server/src/main/java/dev/slimevr/config/FiltersConfig.java @@ -2,8 +2,8 @@ package dev.slimevr.config; import dev.slimevr.Main; import dev.slimevr.filtering.TrackerFilters; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerWithFiltering; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerWithFiltering; public class FiltersConfig { diff --git a/server/src/main/java/dev/slimevr/config/OSCConfig.java b/server/src/main/java/dev/slimevr/config/OSCConfig.java index 92ab9964d..38d9b8a56 100644 --- a/server/src/main/java/dev/slimevr/config/OSCConfig.java +++ b/server/src/main/java/dev/slimevr/config/OSCConfig.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.StdKeySerializers; import dev.slimevr.config.serializers.BooleanMapDeserializer; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.trackers.TrackerRole; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/config/TrackerConfig.java b/server/src/main/java/dev/slimevr/config/TrackerConfig.java index 97883eb41..568f27a2b 100644 --- a/server/src/main/java/dev/slimevr/config/TrackerConfig.java +++ b/server/src/main/java/dev/slimevr/config/TrackerConfig.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import com.jme3.math.Quaternion; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; public class TrackerConfig { diff --git a/server/src/main/java/dev/slimevr/config/VRConfig.java b/server/src/main/java/dev/slimevr/config/VRConfig.java index 7f643560d..dd3a8c7d1 100644 --- a/server/src/main/java/dev/slimevr/config/VRConfig.java +++ b/server/src/main/java/dev/slimevr/config/VRConfig.java @@ -6,8 +6,8 @@ import com.fasterxml.jackson.databind.ser.std.StdKeySerializers; import com.github.jonpeterson.jackson.module.versioning.JsonVersionedModel; import dev.slimevr.config.serializers.BridgeConfigMapDeserializer; import dev.slimevr.config.serializers.TrackerConfigMapDeserializer; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerRole; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java b/server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java index a24e08f73..8098eb541 100644 --- a/server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java +++ b/server/src/main/java/dev/slimevr/osc/VRCOSCHandler.java @@ -10,11 +10,11 @@ import com.jme3.math.Vector3f; import dev.slimevr.VRServer; import dev.slimevr.config.OSCConfig; import dev.slimevr.platform.SteamVRBridge; -import dev.slimevr.vr.processor.HumanPoseProcessor; -import dev.slimevr.vr.trackers.HMDTracker; -import dev.slimevr.vr.trackers.ShareableTracker; -import dev.slimevr.vr.trackers.TrackerRole; -import dev.slimevr.vr.trackers.TrackerStatus; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.trackers.HMDTracker; +import dev.slimevr.tracking.trackers.ShareableTracker; +import dev.slimevr.tracking.trackers.TrackerRole; +import dev.slimevr.tracking.trackers.TrackerStatus; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; @@ -34,7 +34,7 @@ public class VRCOSCHandler implements OSCHandler { private final VRServer server; private final HMDTracker hmd; private final SteamVRBridge steamvrBridge; - private final HumanPoseProcessor humanPoseProcessor; + private final HumanPoseManager humanPoseManager; private final List shareableTrackers; private final FastList oscArgs = new FastList<>(3); private final Vector3f vec = new Vector3f(); @@ -52,14 +52,14 @@ public class VRCOSCHandler implements OSCHandler { public VRCOSCHandler( VRServer server, HMDTracker hmd, - HumanPoseProcessor humanPoseProcessor, + HumanPoseManager humanPoseManager, SteamVRBridge steamvrBridge, OSCConfig oscConfig, List shareableTrackers ) { this.server = server; this.hmd = hmd; - this.humanPoseProcessor = humanPoseProcessor; + this.humanPoseManager = humanPoseManager; this.steamvrBridge = steamvrBridge; this.config = oscConfig; this.shareableTrackers = shareableTrackers; @@ -185,7 +185,7 @@ public class VRCOSCHandler implements OSCHandler { (float) event .getMessage() .getArguments() - .get(0) * humanPoseProcessor.getUserHeightFromConfig(), + .get(0) * humanPoseManager.getUserHeightFromConfig(), 0f ); hmd.rotation.set(Quaternion.IDENTITY); diff --git a/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java b/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java index 877faaa29..b2dba97c2 100644 --- a/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java +++ b/server/src/main/java/dev/slimevr/platform/SteamVRBridge.java @@ -6,8 +6,8 @@ import dev.slimevr.bridge.ProtobufBridge; import dev.slimevr.bridge.ProtobufMessages; import dev.slimevr.config.BridgeConfig; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.trackers.*; import java.util.List; diff --git a/server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java b/server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java index 422af3996..c9682b164 100644 --- a/server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java +++ b/server/src/main/java/dev/slimevr/platform/linux/UnixSocketBridge.java @@ -6,7 +6,7 @@ import dev.slimevr.VRServer; import dev.slimevr.bridge.BridgeThread; import dev.slimevr.bridge.ProtobufMessages; import dev.slimevr.platform.SteamVRBridge; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.trackers.*; import io.eiren.util.logging.LogManager; import java.io.File; diff --git a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java b/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java index 3f6b53b3a..2b097deae 100644 --- a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java +++ b/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeBridge.java @@ -11,7 +11,7 @@ import dev.slimevr.bridge.BridgeThread; import dev.slimevr.bridge.PipeState; import dev.slimevr.bridge.ProtobufMessages.ProtobufMessage; import dev.slimevr.platform.SteamVRBridge; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.trackers.*; import io.eiren.util.logging.LogManager; import java.io.IOException; diff --git a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java b/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java index c0a8af0fb..6cc1d1b66 100644 --- a/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java +++ b/server/src/main/java/dev/slimevr/platform/windows/WindowsNamedPipeVRBridge.java @@ -9,7 +9,7 @@ import com.sun.jna.ptr.IntByReference; import dev.slimevr.VRServer; import dev.slimevr.bridge.Bridge; import dev.slimevr.bridge.PipeState; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.trackers.*; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; diff --git a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java b/server/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java index f8b390d66..1b9e52a80 100644 --- a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java +++ b/server/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java @@ -2,7 +2,7 @@ package dev.slimevr.poserecorder; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import dev.slimevr.vr.trackers.TrackerPosition; +import dev.slimevr.tracking.trackers.TrackerPosition; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; diff --git a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameSkeleton.java b/server/src/main/java/dev/slimevr/poserecorder/PoseFrameSkeleton.java deleted file mode 100644 index 45e0c37fb..000000000 --- a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameSkeleton.java +++ /dev/null @@ -1,88 +0,0 @@ -package dev.slimevr.poserecorder; - -import dev.slimevr.VRServer; -import dev.slimevr.vr.processor.ComputedHumanPoseTracker; -import dev.slimevr.vr.processor.skeleton.HumanSkeleton; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; -import dev.slimevr.vr.trackers.Tracker; - -import java.util.List; -import java.util.Map; - - -public class PoseFrameSkeleton extends HumanSkeleton { - - private int frameCursor = 0; - - protected PoseFrameSkeleton(List computedTrackers) { - super(computedTrackers); - } - - public PoseFrameSkeleton( - VRServer server, - List computedTrackers - ) { - super(server, computedTrackers); - } - - public PoseFrameSkeleton( - List trackers, - List computedTrackers - ) { - super(trackers, computedTrackers); - } - - public PoseFrameSkeleton( - List trackers, - List computedTrackers, - Map configs, - Map altConfigs - ) { - super(trackers, computedTrackers, configs, altConfigs); - } - - public PoseFrameSkeleton( - List trackers, - List computedTrackers, - Map configs - ) { - super(trackers, computedTrackers, configs); - } - - private int limitCursor() { - if (frameCursor < 0) { - frameCursor = 0; - } - - return frameCursor; - } - - public int setCursor(int index) { - frameCursor = index; - return limitCursor(); - } - - public int incrementCursor(int increment) { - frameCursor += increment; - return limitCursor(); - } - - public int incrementCursor() { - return incrementCursor(1); - } - - public int getCursor() { - return frameCursor; - } - - // Get tracker for specific frame - @Override - protected Tracker trackerPreUpdate(Tracker tracker) { - if (tracker instanceof PoseFrameTracker) { - // Return frame if available, otherwise return the original tracker - TrackerFrame frame = ((PoseFrameTracker) tracker).safeGetFrame(frameCursor); - return frame == null ? tracker : frame; - } - return tracker; - } -} diff --git a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java b/server/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java index 59057f822..3881264ac 100644 --- a/server/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java +++ b/server/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java @@ -3,10 +3,10 @@ package dev.slimevr.poserecorder; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.config.TrackerConfig; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerPosition; -import dev.slimevr.vr.trackers.TrackerStatus; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerPosition; +import dev.slimevr.tracking.trackers.TrackerStatus; import io.eiren.util.collections.FastList; import java.util.Iterator; @@ -45,6 +45,10 @@ public class PoseFrameTracker implements Tracker, Iterable { this(parent.getName()); } + public PoseFrameTracker(PoseFrameTracker parent) { + this(parent.name, parent.frames); + } + private int limitCursor() { if (frameCursor < 0 || frames.isEmpty()) { frameCursor = 0; diff --git a/server/src/main/java/dev/slimevr/poserecorder/PoseFrames.java b/server/src/main/java/dev/slimevr/poserecorder/PoseFrames.java index 947c54b0b..f8a9e76e4 100644 --- a/server/src/main/java/dev/slimevr/poserecorder/PoseFrames.java +++ b/server/src/main/java/dev/slimevr/poserecorder/PoseFrames.java @@ -1,7 +1,7 @@ package dev.slimevr.poserecorder; -import dev.slimevr.vr.trackers.TrackerPosition; -import dev.slimevr.vr.trackers.TrackerUtils; +import dev.slimevr.tracking.trackers.TrackerPosition; +import dev.slimevr.tracking.trackers.TrackerUtils; import io.eiren.util.collections.FastList; import java.util.Iterator; @@ -23,6 +23,22 @@ public final class PoseFrames implements Iterable { this.trackers = trackers; } + /** + * Creates a {@link PoseFrames} object with the provided {@link PoseFrames} + * object, wrapping the list of {@link PoseFrameTracker}s with new + * {@link PoseFrameTracker} objects as the internal {@link PoseFrameTracker} + * list + * + * @see {@link FastList}, {@link PoseFrameTracker} + */ + public PoseFrames(PoseFrames parent) { + trackers = new FastList<>(parent.trackers.size()); + for (PoseFrameTracker tracker : parent.trackers) { + // Wrap all the trackers so cursors can be per-instance + trackers.add(tracker != null ? new PoseFrameTracker(tracker) : null); + } + } + /** * Creates a {@link PoseFrames} object with the specified initial tracker * capacity @@ -113,6 +129,20 @@ public final class PoseFrames implements Iterable { return trackers; } + /** + * Sets the cursor index for all the {@link PoseFrameTracker} objects from + * the internal {@link PoseFrameTracker} list + * + * @see {@link List#remove(Object)}, {@link PoseFrameTracker} + */ + public void setCursors(int index) { + for (PoseFrameTracker tracker : trackers) { + if (tracker != null) { + tracker.setCursor(index); + } + } + } + // #region Data Utilities /** diff --git a/server/src/main/java/dev/slimevr/poserecorder/PoseRecorder.java b/server/src/main/java/dev/slimevr/poserecorder/PoseRecorder.java index a04e87cbd..f8fae24a1 100644 --- a/server/src/main/java/dev/slimevr/poserecorder/PoseRecorder.java +++ b/server/src/main/java/dev/slimevr/poserecorder/PoseRecorder.java @@ -10,7 +10,7 @@ import org.apache.commons.lang3.tuple.Pair; import dev.slimevr.VRServer; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.Tracker; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; diff --git a/server/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java b/server/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java index d491157a8..470220d2d 100644 --- a/server/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java +++ b/server/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java @@ -3,10 +3,10 @@ package dev.slimevr.poserecorder; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.config.TrackerConfig; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerPosition; -import dev.slimevr.vr.trackers.TrackerStatus; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerPosition; +import dev.slimevr.tracking.trackers.TrackerStatus; public final class TrackerFrame implements Tracker { diff --git a/server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java b/server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java index 49a49c916..f964c2864 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java +++ b/server/src/main/java/dev/slimevr/posestreamer/BVHFileStream.java @@ -4,8 +4,8 @@ import com.jme3.math.FastMath; import com.jme3.math.Quaternion; import com.jme3.math.Transform; import com.jme3.math.Vector3f; -import dev.slimevr.vr.processor.TransformNode; -import dev.slimevr.vr.processor.skeleton.Skeleton; +import dev.slimevr.tracking.processor.TransformNode; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; import org.apache.commons.lang3.StringUtils; import java.io.*; @@ -23,7 +23,7 @@ public class BVHFileStream extends PoseDataStream { private float[] angleBuf = new float[3]; private Quaternion rotBuf = new Quaternion(); - private Skeleton wrappedSkeleton; + private HumanSkeleton wrappedSkeleton; private TransformNodeWrapper rootNode; public BVHFileStream(OutputStream outputStream) { @@ -71,7 +71,7 @@ public class BVHFileStream extends PoseDataStream { return bufferCount > 0 ? frameString + StringUtils.repeat(' ', bufferCount) : frameString; } - private TransformNodeWrapper wrapSkeletonIfNew(Skeleton skeleton) { + private TransformNodeWrapper wrapSkeletonIfNew(HumanSkeleton skeleton) { TransformNodeWrapper wrapper = rootNode; // If the wrapped skeleton is missing or the skeleton is updated @@ -82,7 +82,7 @@ public class BVHFileStream extends PoseDataStream { return wrapper; } - private TransformNodeWrapper wrapSkeleton(Skeleton skeleton) { + private TransformNodeWrapper wrapSkeleton(HumanSkeleton skeleton) { TransformNodeWrapper wrapper = wrapSkeletonNodes(skeleton.getRootNode()); wrappedSkeleton = skeleton; @@ -179,7 +179,7 @@ public class BVHFileStream extends PoseDataStream { } @Override - public void writeHeader(Skeleton skeleton, PoseStreamer streamer) throws IOException { + public void writeHeader(HumanSkeleton skeleton, PoseStreamer streamer) throws IOException { if (skeleton == null) { throw new NullPointerException("skeleton must not be null"); } @@ -290,7 +290,7 @@ public class BVHFileStream extends PoseDataStream { } @Override - public void writeFrame(Skeleton skeleton) throws IOException { + public void writeFrame(HumanSkeleton skeleton) throws IOException { if (skeleton == null) { throw new NullPointerException("skeleton must not be null"); } @@ -318,7 +318,7 @@ public class BVHFileStream extends PoseDataStream { } @Override - public void writeFooter(Skeleton skeleton) throws IOException { + public void writeFooter(HumanSkeleton skeleton) throws IOException { // Write the final frame count for files if (outputStream instanceof FileOutputStream fileOutputStream) { // Flush before anything else diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java b/server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java index 8818f273a..5d5aec757 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java +++ b/server/src/main/java/dev/slimevr/posestreamer/PoseDataStream.java @@ -1,6 +1,6 @@ package dev.slimevr.posestreamer; -import dev.slimevr.vr.processor.skeleton.Skeleton; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; import java.io.*; @@ -22,12 +22,12 @@ public abstract class PoseDataStream implements AutoCloseable { this(new FileOutputStream(file)); } - public void writeHeader(Skeleton skeleton, PoseStreamer streamer) throws IOException { + public void writeHeader(HumanSkeleton skeleton, PoseStreamer streamer) throws IOException { } - abstract void writeFrame(Skeleton skeleton) throws IOException; + abstract void writeFrame(HumanSkeleton skeleton) throws IOException; - public void writeFooter(Skeleton skeleton) throws IOException { + public void writeFooter(HumanSkeleton skeleton) throws IOException { } public boolean isClosed() { diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.java b/server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.java index 18a4d199b..79d72dd7e 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.java +++ b/server/src/main/java/dev/slimevr/posestreamer/PoseFrameStreamer.java @@ -1,8 +1,8 @@ package dev.slimevr.posestreamer; import dev.slimevr.poserecorder.PoseFrameIO; -import dev.slimevr.poserecorder.PoseFrameSkeleton; import dev.slimevr.poserecorder.PoseFrames; +import dev.slimevr.tracking.processor.HumanPoseManager; import java.io.File; @@ -10,6 +10,7 @@ import java.io.File; public class PoseFrameStreamer extends PoseStreamer { private final PoseFrames frames; + private final HumanPoseManager humanPoseManager; public PoseFrameStreamer(String path) { this(new File(path)); @@ -20,8 +21,9 @@ public class PoseFrameStreamer extends PoseStreamer { } public PoseFrameStreamer(PoseFrames frames) { - super(new PoseFrameSkeleton(frames.getTrackers(), null)); - this.frames = frames; + this.frames = new PoseFrames(frames); + humanPoseManager = new HumanPoseManager(this.frames.getTrackers()); + skeleton = humanPoseManager.getSkeleton(); } public PoseFrames getFrames() { @@ -29,10 +31,9 @@ public class PoseFrameStreamer extends PoseStreamer { } public synchronized void streamAllFrames() { - PoseFrameSkeleton skeleton = (PoseFrameSkeleton) this.skeleton; for (int i = 0; i < frames.getMaxFrameCount(); i++) { - skeleton.setCursor(i); - skeleton.updatePose(); + frames.setCursors(i); + humanPoseManager.update(); captureFrame(); } } diff --git a/server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java b/server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java index cd4dcf935..047117004 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java +++ b/server/src/main/java/dev/slimevr/posestreamer/PoseStreamer.java @@ -1,6 +1,6 @@ package dev.slimevr.posestreamer; -import dev.slimevr.vr.processor.skeleton.Skeleton; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; import io.eiren.util.logging.LogManager; import java.io.IOException; @@ -10,10 +10,13 @@ public class PoseStreamer { protected long frameRecordingInterval = 60L; - protected Skeleton skeleton; + protected HumanSkeleton skeleton; protected PoseDataStream poseFileStream; - public PoseStreamer(Skeleton skeleton) { + protected PoseStreamer() { + } + + public PoseStreamer(HumanSkeleton skeleton) { this.skeleton = skeleton; } @@ -43,7 +46,7 @@ public class PoseStreamer { this.frameRecordingInterval = intervalMs; } - public synchronized Skeleton getSkeleton() { + public synchronized HumanSkeleton getSkeleton() { return skeleton; } diff --git a/server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java b/server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java index c04de3939..187fb2899 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java +++ b/server/src/main/java/dev/slimevr/posestreamer/ServerPoseStreamer.java @@ -2,7 +2,7 @@ package dev.slimevr.posestreamer; import dev.slimevr.VRServer; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.processor.skeleton.Skeleton; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; public class ServerPoseStreamer extends TickPoseStreamer { @@ -19,7 +19,7 @@ public class ServerPoseStreamer extends TickPoseStreamer { } @VRServerThread - public void onSkeletonUpdated(Skeleton skeleton) { + public void onSkeletonUpdated(HumanSkeleton skeleton) { this.skeleton = skeleton; } diff --git a/server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java b/server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java index b2e1692b9..5e5671a5f 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java +++ b/server/src/main/java/dev/slimevr/posestreamer/StdBVHFileStream.java @@ -1,6 +1,6 @@ package dev.slimevr.posestreamer; -import dev.slimevr.vr.processor.TransformNode; +import dev.slimevr.tracking.processor.TransformNode; import java.io.File; import java.io.FileNotFoundException; diff --git a/server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java b/server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java index 5ef2e93a8..de0b85763 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java +++ b/server/src/main/java/dev/slimevr/posestreamer/TickPoseStreamer.java @@ -1,6 +1,6 @@ package dev.slimevr.posestreamer; -import dev.slimevr.vr.processor.skeleton.Skeleton; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; import java.io.IOException; @@ -9,7 +9,7 @@ public class TickPoseStreamer extends PoseStreamer { protected long nextFrameTimeMs = -1L; - public TickPoseStreamer(Skeleton skeleton) { + public TickPoseStreamer(HumanSkeleton skeleton) { super(skeleton); } @@ -19,7 +19,7 @@ public class TickPoseStreamer extends PoseStreamer { return; } - Skeleton skeleton = this.skeleton; + HumanSkeleton skeleton = this.skeleton; if (skeleton == null) { return; } diff --git a/server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java b/server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java index df62fe309..5bbc92289 100644 --- a/server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java +++ b/server/src/main/java/dev/slimevr/posestreamer/TransformNodeWrapper.java @@ -2,7 +2,7 @@ package dev.slimevr.posestreamer; import com.jme3.math.Quaternion; import com.jme3.math.Transform; -import dev.slimevr.vr.processor.TransformNode; +import dev.slimevr.tracking.processor.TransformNode; import io.eiren.util.collections.FastList; import java.util.List; diff --git a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java b/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java index f1584cdc7..a64bfc876 100644 --- a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java +++ b/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedBuilder.java @@ -3,9 +3,9 @@ package dev.slimevr.protocol.datafeed; import com.google.flatbuffers.FlatBufferBuilder; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.processor.skeleton.BoneInfo; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.processor.BoneInfo; +import dev.slimevr.tracking.trackers.*; import solarxr_protocol.data_feed.Bone; import solarxr_protocol.data_feed.DataFeedUpdate; import solarxr_protocol.data_feed.device_data.DeviceData; diff --git a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java b/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java index c7c6014ca..5e5728af0 100644 --- a/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java +++ b/server/src/main/java/dev/slimevr/protocol/datafeed/DataFeedHandler.java @@ -89,12 +89,12 @@ public class DataFeedHandler extends ProtocolHandler { .collect(Collectors.toList()) ); - var s = this.api.server.humanPoseProcessor.getSkeleton(); + var h = this.api.server.humanPoseManager; int bonesOffset = DataFeedBuilder .createBonesData( fbb, config.getBoneMask(), - s.currentBoneInfo + h.getCurrentBoneInfo() ); return DataFeedUpdate.createDataFeedUpdate(fbb, devicesOffset, trackersOffset, bonesOffset); diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java b/server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java index 9fc027889..05bdf4116 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java +++ b/server/src/main/java/dev/slimevr/protocol/rpc/RPCBuilder.java @@ -1,8 +1,8 @@ package dev.slimevr.protocol.rpc; import com.google.flatbuffers.FlatBufferBuilder; -import dev.slimevr.vr.processor.HumanPoseProcessor; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; import solarxr_protocol.rpc.SkeletonConfigResponse; import solarxr_protocol.rpc.SkeletonPart; @@ -11,14 +11,14 @@ public class RPCBuilder { public static int createSkeletonConfig( FlatBufferBuilder fbb, - HumanPoseProcessor humanPoseProcessor + HumanPoseManager humanPoseManager ) { int[] partsOffsets = new int[SkeletonConfigOffsets.values().length]; for (int index = 0; index < SkeletonConfigOffsets.values().length; index++) { SkeletonConfigOffsets val = SkeletonConfigOffsets.values[index]; int part = SkeletonPart - .createSkeletonPart(fbb, val.id, humanPoseProcessor.getSkeletonConfig(val)); + .createSkeletonPart(fbb, val.id, humanPoseManager.getOffset(val)); partsOffsets[index] = part; } diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java b/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java index 9acfa966a..3437c4a4f 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java +++ b/server/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.java @@ -12,10 +12,10 @@ import dev.slimevr.protocol.ProtocolAPI; import dev.slimevr.protocol.ProtocolHandler; import dev.slimevr.protocol.rpc.serial.RPCSerialHandler; import dev.slimevr.protocol.rpc.settings.RPCSettingsHandler; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigOffsets; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerPosition; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerPosition; import io.eiren.util.logging.LogManager; import solarxr_protocol.MessageBundle; import solarxr_protocol.datatypes.TransactionId; @@ -101,13 +101,13 @@ public class RPCHandler extends ProtocolHandler if (req == null) return; - this.api.server.humanPoseProcessor.getSkeletonConfig().resetOffsets(); - this.api.server.humanPoseProcessor.getSkeletonConfig().save(); + this.api.server.humanPoseManager.resetOffsets(); + this.api.server.humanPoseManager.saveConfig(); this.api.server.getConfigManager().saveConfig(); // might not be a good idea maybe let the client ask again FlatBufferBuilder fbb = new FlatBufferBuilder(300); - int config = RPCBuilder.createSkeletonConfig(fbb, this.api.server.humanPoseProcessor); + int config = RPCBuilder.createSkeletonConfig(fbb, this.api.server.humanPoseManager); int outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config); fbb.finish(outbound); conn.send(fbb.dataBuffer()); @@ -120,7 +120,7 @@ public class RPCHandler extends ProtocolHandler return; FlatBufferBuilder fbb = new FlatBufferBuilder(300); - int config = RPCBuilder.createSkeletonConfig(fbb, this.api.server.humanPoseProcessor); + int config = RPCBuilder.createSkeletonConfig(fbb, this.api.server.humanPoseManager); int outbound = this.createRPCMessage(fbb, RpcMessage.SkeletonConfigResponse, config); fbb.finish(outbound); conn.send(fbb.dataBuffer()); @@ -137,8 +137,8 @@ public class RPCHandler extends ProtocolHandler SkeletonConfigOffsets joint = SkeletonConfigOffsets.getById(req.bone()); - this.api.server.humanPoseProcessor.setSkeletonConfig(joint, req.value()); - this.api.server.humanPoseProcessor.getSkeletonConfig().save(); + this.api.server.humanPoseManager.setOffset(joint, req.value()); + this.api.server.humanPoseManager.saveConfig(); this.api.server.getConfigManager().saveConfig(); } diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java b/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java index 874cb3130..fc391f062 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java +++ b/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java @@ -4,10 +4,10 @@ import com.google.flatbuffers.FlatBufferBuilder; import dev.slimevr.config.*; import dev.slimevr.filtering.TrackerFilters; import dev.slimevr.platform.SteamVRBridge; -import dev.slimevr.vr.processor.skeleton.SkeletonConfig; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigToggles; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigValues; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigToggles; +import dev.slimevr.tracking.processor.config.SkeletonConfigValues; +import dev.slimevr.tracking.trackers.TrackerRole; import solarxr_protocol.rpc.*; import solarxr_protocol.rpc.settings.LegTweaksSettings; import solarxr_protocol.rpc.settings.ModelRatios; @@ -141,29 +141,29 @@ public class RPCSettingsBuilder { public static int createModelSettings( FlatBufferBuilder fbb, - SkeletonConfig config, + HumanPoseManager humanPoseManager, LegTweaksConfig legTweaksConfig ) { int togglesOffset = ModelToggles .createModelToggles( fbb, - config.getToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL), - config.getToggle(SkeletonConfigToggles.EXTENDED_PELVIS_MODEL), - config.getToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL), - config.getToggle(SkeletonConfigToggles.FORCE_ARMS_FROM_HMD), - config.getToggle(SkeletonConfigToggles.FLOOR_CLIP), - config.getToggle(SkeletonConfigToggles.SKATING_CORRECTION), - config.getToggle(SkeletonConfigToggles.VIVE_EMULATION) + humanPoseManager.getToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL), + humanPoseManager.getToggle(SkeletonConfigToggles.EXTENDED_PELVIS_MODEL), + humanPoseManager.getToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL), + humanPoseManager.getToggle(SkeletonConfigToggles.FORCE_ARMS_FROM_HMD), + humanPoseManager.getToggle(SkeletonConfigToggles.FLOOR_CLIP), + humanPoseManager.getToggle(SkeletonConfigToggles.SKATING_CORRECTION), + humanPoseManager.getToggle(SkeletonConfigToggles.VIVE_EMULATION) ); int ratiosOffset = ModelRatios .createModelRatios( fbb, - config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_HIP_AVERAGING), - config.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_LEGS_AVERAGING), - config.getValue(SkeletonConfigValues.HIP_FROM_CHEST_LEGS_AVERAGING), - config.getValue(SkeletonConfigValues.HIP_FROM_WAIST_LEGS_AVERAGING), - config.getValue(SkeletonConfigValues.HIP_LEGS_AVERAGING), - config.getValue(SkeletonConfigValues.KNEE_TRACKER_ANKLE_AVERAGING) + humanPoseManager.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_HIP_AVERAGING), + humanPoseManager.getValue(SkeletonConfigValues.WAIST_FROM_CHEST_LEGS_AVERAGING), + humanPoseManager.getValue(SkeletonConfigValues.HIP_FROM_CHEST_LEGS_AVERAGING), + humanPoseManager.getValue(SkeletonConfigValues.HIP_FROM_WAIST_LEGS_AVERAGING), + humanPoseManager.getValue(SkeletonConfigValues.HIP_LEGS_AVERAGING), + humanPoseManager.getValue(SkeletonConfigValues.KNEE_TRACKER_ANKLE_AVERAGING) ); int legTweaksOffset = LegTweaksSettings .createLegTweaksSettings( diff --git a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java b/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java index b2b4eac14..8d81ef3a3 100644 --- a/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java +++ b/server/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.java @@ -12,9 +12,9 @@ import dev.slimevr.platform.SteamVRBridge; import dev.slimevr.protocol.GenericConnection; import dev.slimevr.protocol.ProtocolAPI; import dev.slimevr.protocol.rpc.RPCHandler; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigToggles; -import dev.slimevr.vr.processor.skeleton.SkeletonConfigValues; -import dev.slimevr.vr.trackers.TrackerRole; +import dev.slimevr.tracking.processor.config.SkeletonConfigToggles; +import dev.slimevr.tracking.processor.config.SkeletonConfigValues; +import dev.slimevr.tracking.trackers.TrackerRole; import solarxr_protocol.rpc.ChangeSettingsRequest; import solarxr_protocol.rpc.RpcMessage; import solarxr_protocol.rpc.RpcMessageHeader; @@ -68,7 +68,7 @@ public record RPCSettingsHandler(RPCHandler rpcHandler, ProtocolAPI api) { RPCSettingsBuilder .createModelSettings( fbb, - this.api.server.humanPoseProcessor.getSkeletonConfig(), + this.api.server.humanPoseManager, this.api.server.getConfigManager().getVrConfig().getLegTweaks() ), RPCSettingsBuilder @@ -227,13 +227,13 @@ public record RPCSettingsHandler(RPCHandler rpcHandler, ProtocolAPI api) { .setMountingResetTaps(tapDetectionSettings.tapMountingResetTaps()); } - this.api.server.humanPoseProcessor.getSkeleton().updateTapDetectionConfig(); + this.api.server.humanPoseManager.updateTapDetectionConfig(); } } var modelSettings = req.modelSettings(); if (modelSettings != null) { - var cfg = this.api.server.humanPoseProcessor.getSkeletonConfig(); + var hpm = this.api.server.humanPoseManager; var legTweaksConfig = this.api.server.getConfigManager().getVrConfig().getLegTweaks(); var toggles = modelSettings.toggles(); var ratios = modelSettings.ratios(); @@ -242,73 +242,73 @@ public record RPCSettingsHandler(RPCHandler rpcHandler, ProtocolAPI api) { if (toggles != null) { // Note: toggles.has____ returns the same as toggles._____ this // seems like a bug - cfg.setToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL, toggles.extendedSpine()); - cfg + hpm.setToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL, toggles.extendedSpine()); + hpm .setToggle( SkeletonConfigToggles.EXTENDED_PELVIS_MODEL, toggles.extendedPelvis() ); - cfg.setToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL, toggles.extendedKnee()); - cfg + hpm.setToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL, toggles.extendedKnee()); + hpm .setToggle( SkeletonConfigToggles.FORCE_ARMS_FROM_HMD, toggles.forceArmsFromHmd() ); - cfg.setToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL, toggles.extendedSpine()); - cfg + hpm.setToggle(SkeletonConfigToggles.EXTENDED_SPINE_MODEL, toggles.extendedSpine()); + hpm .setToggle( SkeletonConfigToggles.EXTENDED_PELVIS_MODEL, toggles.extendedPelvis() ); - cfg.setToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL, toggles.extendedKnee()); - cfg + hpm.setToggle(SkeletonConfigToggles.EXTENDED_KNEE_MODEL, toggles.extendedKnee()); + hpm .setToggle( SkeletonConfigToggles.FORCE_ARMS_FROM_HMD, toggles.forceArmsFromHmd() ); - cfg.setToggle(SkeletonConfigToggles.FLOOR_CLIP, toggles.floorClip()); - cfg + hpm.setToggle(SkeletonConfigToggles.FLOOR_CLIP, toggles.floorClip()); + hpm .setToggle( SkeletonConfigToggles.SKATING_CORRECTION, toggles.skatingCorrection() ); - cfg.setToggle(SkeletonConfigToggles.VIVE_EMULATION, toggles.viveEmulation()); + hpm.setToggle(SkeletonConfigToggles.VIVE_EMULATION, toggles.viveEmulation()); } if (ratios != null) { if (ratios.hasImputeWaistFromChestHip()) { - cfg + hpm .setValue( SkeletonConfigValues.WAIST_FROM_CHEST_HIP_AVERAGING, ratios.imputeWaistFromChestHip() ); } if (ratios.hasImputeWaistFromChestLegs()) { - cfg + hpm .setValue( SkeletonConfigValues.WAIST_FROM_CHEST_LEGS_AVERAGING, ratios.imputeWaistFromChestLegs() ); } if (ratios.hasImputeHipFromChestLegs()) { - cfg + hpm .setValue( SkeletonConfigValues.HIP_FROM_CHEST_LEGS_AVERAGING, ratios.imputeHipFromChestLegs() ); } if (ratios.hasImputeHipFromWaistLegs()) { - cfg + hpm .setValue( SkeletonConfigValues.HIP_FROM_WAIST_LEGS_AVERAGING, ratios.imputeHipFromWaistLegs() ); } if (ratios.hasInterpHipLegs()) { - cfg.setValue(SkeletonConfigValues.HIP_LEGS_AVERAGING, ratios.interpHipLegs()); + hpm.setValue(SkeletonConfigValues.HIP_LEGS_AVERAGING, ratios.interpHipLegs()); } if (ratios.hasInterpKneeTrackerAnkle()) { - cfg + hpm .setValue( SkeletonConfigValues.KNEE_TRACKER_ANKLE_AVERAGING, ratios.interpKneeTrackerAnkle() @@ -320,10 +320,10 @@ public record RPCSettingsHandler(RPCHandler rpcHandler, ProtocolAPI api) { if (legTweaks.hasCorrectionStrength()) { legTweaksConfig.setCorrectionStrength(legTweaks.correctionStrength()); } - this.api.server.humanPoseProcessor.getSkeleton().updateLegTweaksConfig(); + this.api.server.humanPoseManager.updateLegTweaksConfig(); } - cfg.save(); + hpm.saveConfig(); } diff --git a/server/src/main/java/dev/slimevr/vr/Device.java b/server/src/main/java/dev/slimevr/tracking/Device.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/Device.java rename to server/src/main/java/dev/slimevr/tracking/Device.java index ea7c36cd7..575f2df71 100644 --- a/server/src/main/java/dev/slimevr/vr/Device.java +++ b/server/src/main/java/dev/slimevr/tracking/Device.java @@ -1,6 +1,6 @@ -package dev.slimevr.vr; +package dev.slimevr.tracking; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.Tracker; import java.net.InetAddress; import java.util.HashMap; diff --git a/server/src/main/java/dev/slimevr/vr/DeviceManager.java b/server/src/main/java/dev/slimevr/tracking/DeviceManager.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/DeviceManager.java rename to server/src/main/java/dev/slimevr/tracking/DeviceManager.java index 8cc2bfe97..ab47f7e1b 100644 --- a/server/src/main/java/dev/slimevr/vr/DeviceManager.java +++ b/server/src/main/java/dev/slimevr/tracking/DeviceManager.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr; +package dev.slimevr.tracking; import dev.slimevr.VRServer; import io.eiren.util.collections.FastList; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneInfo.java b/server/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneInfo.java rename to server/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java index 86423099a..51203bdf8 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneInfo.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/BoneInfo.java @@ -1,9 +1,7 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor; import com.jme3.math.Quaternion; -import dev.slimevr.vr.processor.TransformNode; - /** * Provides an easy way to access pose information of a particular skeletal bone diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneType.java b/server/src/main/java/dev/slimevr/tracking/processor/BoneType.java similarity index 96% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneType.java rename to server/src/main/java/dev/slimevr/tracking/processor/BoneType.java index 11e99800a..b58e61682 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/BoneType.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/BoneType.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor; import solarxr_protocol.datatypes.BodyPart; diff --git a/server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java b/server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java new file mode 100644 index 000000000..d42917bf0 --- /dev/null +++ b/server/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.java @@ -0,0 +1,579 @@ +package dev.slimevr.tracking.processor; + +import com.jme3.math.Vector3f; +import dev.slimevr.VRServer; +import dev.slimevr.tracking.processor.config.SkeletonConfigManager; +import dev.slimevr.tracking.processor.config.SkeletonConfigOffsets; +import dev.slimevr.tracking.processor.config.SkeletonConfigToggles; +import dev.slimevr.tracking.processor.config.SkeletonConfigValues; +import dev.slimevr.tracking.processor.skeleton.HumanSkeleton; +import dev.slimevr.tracking.trackers.*; +import dev.slimevr.util.ann.VRServerThread; +import io.eiren.util.ann.ThreadSafe; +import io.eiren.util.collections.FastList; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + + +/** + * Class to handle communicate between classes in "skeleton" package and outside + */ +public class HumanPoseManager { + + private VRServer server; + private final List computedTrackers = new FastList<>(); + private final List> onSkeletonUpdated = new FastList<>(); + private final SkeletonConfigManager skeletonConfigManager; + private HumanSkeleton skeleton; + + // #region Constructors + private HumanPoseManager() { + skeletonConfigManager = new SkeletonConfigManager(true, this); + initializeComputedHumanPoseTracker(); + } + + /** + * Creates a new HumanPoseManager that uses the VRServer + * + * @param server the used VRServer + */ + public HumanPoseManager(VRServer server) { + this(); + this.server = server; + } + + /** + * Creates a new HumanPoseManager that uses the given trackers for the + * HumanSkeleton and the default config + * + * @param trackers a list of all trackers + */ + public HumanPoseManager(List trackers) { + this(); + skeleton = new HumanSkeleton(this, trackers); + } + + /** + * Creates a new HumanPoseManager that uses the given trackers for the + * HumanSkeleton and the given offsets for config + * + * @param trackers a list of all trackers + * @param offsetConfigs a map of the SkeletonConfigOffsets and values for + * them + */ + public HumanPoseManager( + List trackers, + Map offsetConfigs + ) { + this(); + skeleton = new HumanSkeleton(this, trackers); + // Set offsetConfigs from given offsetConfigs on creation + skeletonConfigManager.setOffsets(offsetConfigs); + } + + /** + * Creates a new HumanPoseManager that uses the given trackers for the + * HumanSkeleton and the given offsets for config + * + * @param trackers a list of all trackers + * @param offsetConfigs a map of the SkeletonConfigOffsets and values for + * them + * @param altOffsetConfigs an alternative map of the SkeletonConfigOffsets + * and values for them + */ + public HumanPoseManager( + List trackers, + Map offsetConfigs, + Map altOffsetConfigs + ) { + this(); + skeleton = new HumanSkeleton(this, trackers); + // Set offsetConfigs from given offsetConfigs on creation + if (altOffsetConfigs != null) { + // Set alts first, so if there's any overlap it doesn't affect + // the values + skeletonConfigManager.setOffsets(altOffsetConfigs); + } + skeletonConfigManager.setOffsets(offsetConfigs); + } + + // #endregion + // #region private methods + private void initializeComputedHumanPoseTracker() { + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.HEAD, + TrackerRole.HEAD + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.CHEST, + TrackerRole.CHEST + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.WAIST, + TrackerRole.WAIST + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.LEFT_FOOT, + TrackerRole.LEFT_FOOT + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.RIGHT_FOOT, + TrackerRole.RIGHT_FOOT + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.LEFT_KNEE, + TrackerRole.LEFT_KNEE + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.RIGHT_KNEE, + TrackerRole.RIGHT_KNEE + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.LEFT_ELBOW, + TrackerRole.LEFT_ELBOW + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.RIGHT_ELBOW, + TrackerRole.RIGHT_ELBOW + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.LEFT_HAND, + TrackerRole.LEFT_HAND + ) + ); + computedTrackers + .add( + new ComputedHumanPoseTracker( + Tracker.getNextLocalTrackerId(), + ComputedHumanPoseTrackerPosition.RIGHT_HAND, + TrackerRole.RIGHT_HAND + ) + ); + } + + @VRServerThread + private void updateSkeletonModelFromServer() { + disconnectAllTrackers(); + skeleton = new HumanSkeleton(this, server); + skeletonConfigManager.loadFromConfig(server.getConfigManager()); + for (Consumer sc : onSkeletonUpdated) + sc.accept(skeleton); + } + + @VRServerThread + private void disconnectAllTrackers() { + for (ComputedHumanPoseTracker t : computedTrackers) { + t.setStatus(TrackerStatus.DISCONNECTED); + } + } + + // #endregion + // #region public methods + // #region skeleton methods + @VRServerThread + public void trackerAdded(Tracker tracker) { + updateSkeletonModelFromServer(); + } + + @VRServerThread + public void trackerUpdated(Tracker tracker) { + updateSkeletonModelFromServer(); + } + + @VRServerThread + public void addSkeletonUpdatedCallback(Consumer consumer) { + onSkeletonUpdated.add(consumer); + if (isSkeletonPresent()) + consumer.accept(skeleton); + } + + /** + * @return True if the skeleton isn't null, or false if it's null + */ + @ThreadSafe + public boolean isSkeletonPresent() { + return skeleton != null; + } + + /** + * Updates the pose of the skeleton from trackers rotations + */ + @VRServerThread + public void update() { + if (isSkeletonPresent()) + skeleton.updatePose(); + } + + @ThreadSafe + public HumanSkeleton getSkeleton() { + return skeleton; + } + + // #endregion + // #region tracker/nodes/bones methods + /** + * @return a list of the computed trackers as ShareableTrackers + */ + @ThreadSafe + public List getShareableTracker() { + return computedTrackers; + } + + /** + * @return a list of the computed trackers as ComputedHumanPoseTracker + */ + @ThreadSafe + public List getComputedTracker() { + return computedTrackers; + } + + /** + * Get the corresponding computed tracker for a given TrackerRole + * + * @param trackerRole the role of the tracker which we want + * @return the corresponding computed tracker for the trackerRole + */ + @ThreadSafe + public ComputedHumanPoseTracker getComputedTracker(TrackerRole trackerRole) { + if (isSkeletonPresent()) + return skeleton.getComputedTracker(trackerRole); + return null; + } + + /** + * @return the root node of the skeleton, which is the HMD + */ + @ThreadSafe + public TransformNode getRootNode() { + if (isSkeletonPresent()) + return skeleton.getRootNode(); + return null; + } + + /** + * Get the tail node (away from the tracking root) of the given bone + * + * @param bone the bone from which we want the tail node + * @return the tail node of the bone + */ + @ThreadSafe + public TransformNode getTailNodeOfBone(BoneType bone) { + if (isSkeletonPresent()) + return skeleton.getTailNodeOfBone(bone); + return null; + } + + /** + * @return the HMD's y position from the skeleton + */ + @ThreadSafe + public float getHmdHeight() { + if (isSkeletonPresent()) + return skeleton.getHmdHeight(); + return 0.0f; + } + + /** + * Runs checks to know if we should (and are) performing the tracking of the + * left arm from the controller. + * + * @return a bool telling us if we are tracking the left arm from the + * controller or not. + */ + @ThreadSafe + public boolean isTrackingLeftArmFromController() { + if (isSkeletonPresent()) + return skeleton.isTrackingLeftArmFromController(); + return false; + } + + /** + * Runs checks to know if we should (and are) performing the tracking of the + * right arm from the controller. + * + * @return a bool telling us if we are tracking the right arm from the + * controller or not. + */ + @ThreadSafe + public boolean isTrackingRightArmFromController() { + if (isSkeletonPresent()) + return skeleton.isTrackingRightArmFromController(); + return false; + } + + @ThreadSafe + public List getCurrentBoneInfo() { + if (isSkeletonPresent()) + return skeleton.currentBoneInfo; + return null; + } + + // #endregion + // #region config methods + /** + * @param key the offset from which to get the corresponding value + * @return the offset in config corresponding to the key + */ + @ThreadSafe + public float getOffset(SkeletonConfigOffsets key) { + return skeletonConfigManager.getOffset(key); + } + + /** + * @param key the offset to set the length to + * @param newLength the new attributed length to the offset + */ + @ThreadSafe + public void setOffset(SkeletonConfigOffsets key, Float newLength) { + skeletonConfigManager.setOffset(key, newLength); + } + + /** + * Resets all the offsets in the current SkeletonConfigManager + */ + @ThreadSafe + public void resetOffsets() { + skeletonConfigManager.resetOffsets(); + } + + /** + * @param key the toggle from which to get the corresponding value + * @return the toggle in config corresponding to the key + */ + @ThreadSafe + public boolean getToggle(SkeletonConfigToggles key) { + return skeletonConfigManager.getToggle(key); + } + + /** + * @param key the toggle to set the value to + * @param newValue the new attributed value to the toggle + */ + @ThreadSafe + public void setToggle(SkeletonConfigToggles key, Boolean newValue) { + skeletonConfigManager.setToggle(key, newValue); + } + + /** + * Resets all the toggles in the current SkeletonConfigManager + */ + @ThreadSafe + public void resetToggles() { + skeletonConfigManager.resetToggles(); + } + + /** + * @param key the value from which to get the corresponding value + * @return the value in config corresponding to the key + */ + @ThreadSafe + public float getValue(SkeletonConfigValues key) { + return skeletonConfigManager.getValue(key); + } + + /** + * @param key the value to set the value to + * @param newValue the new attributed value to the value + */ + @ThreadSafe + public void setValue(SkeletonConfigValues key, Float newValue) { + skeletonConfigManager.setValue(key, newValue); + } + + /** + * Resets all the values in the current SkeletonConfigManager + */ + @ThreadSafe + public void resetValues() { + skeletonConfigManager.resetValues(); + } + + /** + * Resets all the skeleton configs in the current SkeletonConfigManager + */ + @ThreadSafe + public void resetAllConfigs() { + skeletonConfigManager.resetAllConfigs(); + } + + /** + * Writes the skeleton configs + */ + @ThreadSafe + public void saveConfig() { + skeletonConfigManager.save(); + } + + /** + * Update the given node with the given offset + * + * @param node the node to update + * @param offset the new offset to apply to the node + */ + @ThreadSafe + public void updateNodeOffset(BoneType node, Vector3f offset) { + if (isSkeletonPresent()) + skeleton.updateNodeOffset(node, offset); + } + + /** + * Update the given toggle to the new given value in the skeleton + * + * @param configToggle the toggle to update + * @param newValue the new value to apply to the toggle + */ + @ThreadSafe + public void updateToggleState(SkeletonConfigToggles configToggle, boolean newValue) { + if (isSkeletonPresent()) + skeleton.updateToggleState(configToggle, newValue); + } + + /** + * Update the given value to the new given value in the skeleton + * + * @param configValue the value to update + * @param newValue the new value to apply to the value + */ + @ThreadSafe + public void updateValueState(SkeletonConfigValues configValue, float newValue) { + if (isSkeletonPresent()) + skeleton.updateValueState(configValue, newValue); + } + + /** + * Compute the offset for the given node and apply the new offset + * + * @param node the node to update + */ + public void computeNodeOffset(BoneType node) { + skeletonConfigManager.computeNodeOffset(node); + } + + @VRServerThread + public void resetTrackersFull() { + if (isSkeletonPresent()) { + skeleton.resetTrackersFull(); + if (server != null) + server.getVrcOSCHandler().yawAlign(); + } + } + + @VRServerThread + public void resetTrackersMounting() { + if (isSkeletonPresent()) + skeleton.resetTrackersMounting(); + } + + @VRServerThread + public void resetTrackersYaw() { + if (isSkeletonPresent()) { + skeleton.resetTrackersYaw(); + if (server != null) + server.getVrcOSCHandler().yawAlign(); + } + } + + @ThreadSafe + public boolean[] getLegTweaksState() { + return skeleton.getLegTweaksState(); + } + + @VRServerThread + public void setLegTweaksEnabled(boolean value) { + if (isSkeletonPresent()) + skeleton.setLegTweaksEnabled(value); + } + + @VRServerThread + public void setFloorClipEnabled(boolean value) { + if (isSkeletonPresent()) { + skeleton.setFloorclipEnabled(value); + if (server != null) { + server + .getConfigManager() + .getVrConfig() + .getSkeleton() + .getToggles() + .put(SkeletonConfigToggles.FLOOR_CLIP.configKey, value); + server.getConfigManager().saveConfig(); + } + } + } + + @VRServerThread + public void setSkatingCorrectionEnabled(boolean value) { + if (isSkeletonPresent()) { + skeleton.setSkatingCorrectionEnabled(value); + if (server != null) { + server + .getConfigManager() + .getVrConfig() + .getSkeleton() + .getToggles() + .put(SkeletonConfigToggles.SKATING_CORRECTION.configKey, value); + server.getConfigManager().saveConfig(); + } + } + } + + public void updateTapDetectionConfig() { + if (isSkeletonPresent()) + skeleton.updateTapDetectionConfig(); + } + + public void updateLegTweaksConfig() { + if (isSkeletonPresent()) + skeleton.updateLegTweaksConfig(); + } + + @ThreadSafe + public float getUserHeightFromConfig() { + if (isSkeletonPresent()) { + return skeletonConfigManager.getUserHeightFromOffsets(); + } + return 0f; + } + // #endregion + // #endregion +} diff --git a/server/src/main/java/dev/slimevr/vr/processor/TransformNode.java b/server/src/main/java/dev/slimevr/tracking/processor/TransformNode.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/processor/TransformNode.java rename to server/src/main/java/dev/slimevr/tracking/processor/TransformNode.java index 38c2b1154..46feffb0b 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/TransformNode.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/TransformNode.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor; +package dev.slimevr.tracking.processor; import com.jme3.math.Transform; import io.eiren.util.collections.FastList; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfig.java b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java similarity index 75% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfig.java rename to server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java index 537cbc4f3..05ef77e43 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfig.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigManager.java @@ -1,16 +1,18 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.config; import com.jme3.math.Vector3f; import dev.slimevr.Main; +import dev.slimevr.autobone.errors.BodyProportionError; import dev.slimevr.config.ConfigManager; -import io.eiren.util.logging.LogManager; +import dev.slimevr.tracking.processor.BoneType; +import dev.slimevr.tracking.processor.HumanPoseManager; import java.util.Arrays; import java.util.EnumMap; import java.util.Map; -public class SkeletonConfig { +public class SkeletonConfigManager { protected final EnumMap configOffsets = new EnumMap<>( SkeletonConfigOffsets.class @@ -30,73 +32,46 @@ public class SkeletonConfig { ); protected final boolean autoUpdateOffsets; - protected final SkeletonConfigCallback callback; - protected Skeleton skeleton; + protected HumanPoseManager humanPoseManager; protected float userHeight; + static final float FLOOR_OFFSET = 0.05f; - public SkeletonConfig(boolean autoUpdateOffsets) { + public SkeletonConfigManager(boolean autoUpdateOffsets) { this.autoUpdateOffsets = autoUpdateOffsets; - this.callback = null; - callCallbackOnAll(true); + updateSettingsInSkeleton(); if (autoUpdateOffsets) { computeAllNodeOffsets(); } } - public SkeletonConfig( + public SkeletonConfigManager( boolean autoUpdateOffsets, - SkeletonConfigCallback callback, - Skeleton skeleton + HumanPoseManager humanPoseManager ) { this.autoUpdateOffsets = autoUpdateOffsets; - this.callback = callback; - this.skeleton = skeleton; + this.humanPoseManager = humanPoseManager; - callCallbackOnAll(true); + updateSettingsInSkeleton(); if (autoUpdateOffsets) { computeAllNodeOffsets(); } } - private void callCallbackOnAll(boolean defaultOnly) { - if (callback == null) { + public void updateSettingsInSkeleton() { + if (humanPoseManager == null) return; - } - - for (SkeletonConfigOffsets config : SkeletonConfigOffsets.values) { - try { - Float val = configOffsets.get(config); - if (!defaultOnly || val == null) { - callback.updateOffsetsState(config, val == null ? config.defaultValue : val); - } - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } - } for (SkeletonConfigToggles config : SkeletonConfigToggles.values) { - try { - Boolean val = configToggles.get(config); - if (!defaultOnly || val == null) { - callback.updateTogglesState(config, val == null ? config.defaultValue : val); - } - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + Boolean val = configToggles.get(config); + humanPoseManager.updateToggleState(config, val == null ? config.defaultValue : val); } for (SkeletonConfigValues config : SkeletonConfigValues.values) { - try { - Float val = configValues.get(config); - if (!defaultOnly || val == null) { - callback.updateValuesState(config, val == null ? config.defaultValue : val); - } - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + Float val = configValues.get(config); + humanPoseManager.updateValueState(config, val == null ? config.defaultValue : val); } } @@ -118,16 +93,6 @@ public class SkeletonConfig { } } - // Calls callback - if (callback != null) { - try { - callback - .updateOffsetsState(config, newValue != null ? newValue : config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } - } - // Re-calculate user height userHeight = getOffset(SkeletonConfigOffsets.NECK) + getOffset(SkeletonConfigOffsets.CHEST) @@ -164,13 +129,10 @@ public class SkeletonConfig { configToggles.remove(config); } - if (callback != null) { - try { - callback - .updateTogglesState(config, newValue != null ? newValue : config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + // Updates in skeleton + if (humanPoseManager != null) { + humanPoseManager + .updateToggleState(config, newValue != null ? newValue : config.defaultValue); } } @@ -193,13 +155,10 @@ public class SkeletonConfig { configValues.remove(config); } - if (callback != null) { - try { - callback - .updateValuesState(config, newValue != null ? newValue : config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + // Updates in skeleton + if (humanPoseManager != null) { + humanPoseManager + .updateValueState(config, newValue != null ? newValue : config.defaultValue); } } @@ -222,12 +181,9 @@ public class SkeletonConfig { offset.set(x, y, z); } - if (callback != null) { - try { - callback.updateNodeOffset(nodeOffset, offset); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + // Updates in skeleton + if (humanPoseManager != null) { + humanPoseManager.updateNodeOffset(nodeOffset, offset); } } @@ -367,23 +323,23 @@ public class SkeletonConfig { setOffsets(configOffsets, true); } - public void setOffsets(SkeletonConfig skeletonConfig) { + public void setOffsets(SkeletonConfigManager skeletonConfigManager) { // Don't recalculate node offsets, just re-use them from skeletonConfig setOffsets( - skeletonConfig.configOffsets, + skeletonConfigManager.configOffsets, false ); // Copy skeletonConfig's nodeOffsets as the configs are all the same - skeletonConfig.nodeOffsets.forEach((key, value) -> { + skeletonConfigManager.nodeOffsets.forEach((key, value) -> { setNodeOffset(key, value.x, value.y, value.z); }); } public void resetOffsets() { - if (skeleton != null) { + if (humanPoseManager != null) { for (SkeletonConfigOffsets config : SkeletonConfigOffsets.values) { - skeleton.resetSkeletonConfig(config); + resetOffset(config); } } else { configOffsets.clear(); @@ -391,60 +347,16 @@ public class SkeletonConfig { computeAllNodeOffsets(); } } - - // Calls offset callback - if (callback != null) { - for (SkeletonConfigOffsets config : SkeletonConfigOffsets.values) { - try { - callback - .updateOffsetsState(config, config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } - } - } } - public void resetValues() { - configValues.clear(); - - // Calls values callback - if (callback != null) { - for (SkeletonConfigValues config : SkeletonConfigValues.values) { - try { - callback - .updateValuesState(config, config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } - } - } - - // Remove from config to use default if they change in the future. - Arrays.fill(changedValues, false); - for (SkeletonConfigValues value : SkeletonConfigValues.values) { - Main - .getVrServer() - .getConfigManager() - .getVrConfig() - .getSkeleton() - .getValues() - .remove(value.configKey); - } - } public void resetToggles() { configToggles.clear(); - // Calls toggles callback - if (callback != null) { - for (SkeletonConfigOffsets config : SkeletonConfigOffsets.values) { - try { - callback - .updateOffsetsState(config, config.defaultValue); - } catch (Exception e) { - LogManager.severe("[SkeletonConfig] Exception while calling callback", e); - } + // Updates in skeleton + if (humanPoseManager != null) { + for (SkeletonConfigToggles config : SkeletonConfigToggles.values) { + humanPoseManager.updateToggleState(config, config.defaultValue); } } @@ -458,11 +370,69 @@ public class SkeletonConfig { .getSkeleton() .getToggles() .remove(value.configKey); + // Set default in skeleton + setToggle(value, value.defaultValue); + } + } + + public void resetValues() { + configValues.clear(); + + // Updates in skeleton + if (humanPoseManager != null) { + for (SkeletonConfigValues config : SkeletonConfigValues.values) { + humanPoseManager.updateValueState(config, config.defaultValue); + } + } + + // Remove from config to use default if they change in the future. + Arrays.fill(changedValues, false); + for (SkeletonConfigValues value : SkeletonConfigValues.values) { + Main + .getVrServer() + .getConfigManager() + .getVrConfig() + .getSkeleton() + .getValues() + .remove(value.configKey); + // Set default in skeleton + setValue(value, value.defaultValue); + } + } + + public void resetAllConfigs() { + resetOffsets(); + resetToggles(); + resetValues(); + } + + public void resetOffset(SkeletonConfigOffsets config) { + if (config == null) { + return; + } + + switch (config) { + case CHEST, WAIST, HIP, UPPER_LEG, LOWER_LEG -> { + float height = humanPoseManager.getHmdHeight() + / BodyProportionError.eyeHeightToHeightRatio; + if (height > 0.5f) { // Reset only if floor level seems right, + setOffset( + config, + height + * BodyProportionError + .getProportionLimitForOffset(config) + .getTargetRatio() + ); + } else { // if floor level is incorrect + setOffset(config, null); + } + } + default -> setOffset(config, null); } } public void loadFromConfig(ConfigManager configManager) { - + // Load offsets for (SkeletonConfigOffsets configValue : SkeletonConfigOffsets.values) { Float val = configManager .getVrConfig() @@ -476,6 +446,7 @@ public class SkeletonConfig { } } + // Load toggles for (SkeletonConfigToggles configValue : SkeletonConfigToggles.values) { Boolean val = configManager .getVrConfig() @@ -487,6 +458,7 @@ public class SkeletonConfig { } } + // Load values for (SkeletonConfigValues configValue : SkeletonConfigValues.values) { Float val = configManager .getVrConfig() @@ -498,7 +470,7 @@ public class SkeletonConfig { } } - + // Updates all offsets if (autoUpdateOffsets) { computeAllNodeOffsets(); } diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigOffsets.java b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigOffsets.java rename to server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java index 0c1aac94a..6ef8c742a 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigOffsets.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigOffsets.java @@ -1,4 +1,6 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.config; + +import dev.slimevr.tracking.processor.BoneType; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigToggles.java b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigToggles.java rename to server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java index bfb00c23a..0366194b2 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigToggles.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigToggles.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.config; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigValues.java b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigValues.java rename to server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java index 24301c6b4..4f9d50ab8 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigValues.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/config/SkeletonConfigValues.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.config; import java.util.HashMap; import java.util.Map; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/HumanSkeleton.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java similarity index 92% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/HumanSkeleton.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java index f8599bc10..2c20175dd 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/HumanSkeleton.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.java @@ -1,25 +1,26 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import com.jme3.math.FastMath; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.VRServer; -import dev.slimevr.autobone.errors.BodyProportionError; +import dev.slimevr.tracking.processor.BoneInfo; +import dev.slimevr.tracking.processor.BoneType; +import dev.slimevr.tracking.processor.HumanPoseManager; +import dev.slimevr.tracking.processor.TransformNode; +import dev.slimevr.tracking.processor.config.SkeletonConfigToggles; +import dev.slimevr.tracking.processor.config.SkeletonConfigValues; +import dev.slimevr.tracking.trackers.*; import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.processor.ComputedHumanPoseTracker; -import dev.slimevr.vr.processor.ComputedHumanPoseTrackerPosition; -import dev.slimevr.vr.processor.TransformNode; -import dev.slimevr.vr.trackers.*; import io.eiren.util.collections.FastList; +import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Objects; -public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { - - public final SkeletonConfig skeletonConfig; +public class HumanSkeleton { + protected final HumanPoseManager humanPoseManager; // #region Upper body nodes (torso) // @formatter:off protected final TransformNode hmdNode = new TransformNode("HMD", false); @@ -64,6 +65,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { protected final TransformNode leftControllerNode = new TransformNode("Left-Controller", false); protected final TransformNode rightControllerNode = new TransformNode("Right-Controller", false); // @formatter:on + public final List currentBoneInfo = new ArrayList<>(); // #endregion // #region Buffers private final Vector3f posBuf = new Vector3f(); @@ -117,7 +119,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { protected ComputedHumanPoseTracker computedRightHandTracker; // #endregion - // #region FK Settings + // #region Settings // Toggles protected boolean extendedSpineModel; protected boolean extendedPelvisModel; @@ -147,27 +149,27 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { // #endregion // #region Constructors - protected HumanSkeleton(List computedTrackers) { - assembleSkeleton(false); + protected HumanSkeleton( + HumanPoseManager humanPoseManager + ) { + this.humanPoseManager = humanPoseManager; - // Set default skeleton configuration (callback automatically sets - // initial offsets) - skeletonConfig = new SkeletonConfig(true, this, this); + assembleSkeleton(); - if (computedTrackers != null) { - setComputedTrackers(computedTrackers); + if (humanPoseManager.getComputedTracker() != null) { + setComputedTrackers(humanPoseManager.getComputedTracker()); } fillNullComputedTrackers(); resetBones(); } public HumanSkeleton( - VRServer server, - List computedTrackers + HumanPoseManager humanPoseManager, + VRServer server ) { - this(computedTrackers); + this(humanPoseManager); + setTrackersFromServer(server); - skeletonConfig.loadFromConfig(server.getConfigManager()); tapDetectionManager = new TapDetectionManager( this, @@ -175,52 +177,19 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { server.getConfigManager().getVrConfig().getTapDetection() ); legTweaks.setConfig(server.getConfigManager().getVrConfig().getLegTweaks()); - } public HumanSkeleton( - List trackers, - List computedTrackers + HumanPoseManager humanPoseManager, + List trackers ) { - this(computedTrackers); + this(humanPoseManager); setTrackersFromList(Objects.requireNonNullElseGet(trackers, () -> new FastList<>(0))); } - - public HumanSkeleton( - List trackers, - List computedTrackers, - Map configs, - Map altConfigs - ) { - // Initialize - this(trackers, computedTrackers); - - // Set configs - if (altConfigs != null) { - // Set alts first, so if there's any overlap it doesn't affect the - // values - skeletonConfig.setOffsets(altConfigs); - } - skeletonConfig.setOffsets(configs); - } - - public HumanSkeleton( - List trackers, - List computedTrackers, - Map configs - ) { - this(trackers, computedTrackers, configs, null); - } // #endregion - protected void assembleSkeleton(boolean reset) { - if (reset) { - for (TransformNode node : getAllNodes()) { - node.detachWithChildren(); - } - } - + protected void assembleSkeleton() { // #region Assemble skeleton from hmd to hip hmdNode.attachChild(headNode); headNode.attachChild(neckNode); @@ -500,7 +469,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { // #region Set trackers inputs - public void setTrackersFromList(List trackers) { + protected void setTrackersFromList(List trackers) { this.hmdTracker = TrackerUtils .findNonComputedHumanPoseTrackerForBodyPosition( trackers, @@ -623,19 +592,19 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { assembleSkeletonArms(true); // Refresh node offsets for arms - skeletonConfig.computeNodeOffset(BoneType.LEFT_LOWER_ARM); - skeletonConfig.computeNodeOffset(BoneType.RIGHT_LOWER_ARM); + humanPoseManager.computeNodeOffset(BoneType.LEFT_LOWER_ARM); + humanPoseManager.computeNodeOffset(BoneType.RIGHT_LOWER_ARM); // Rebuild the bone list resetBones(); } - public void setTrackersFromServer(VRServer server) { + protected void setTrackersFromServer(VRServer server) { this.hmdTracker = server.hmdTracker; setTrackersFromList(server.getAllTrackers()); } - public void setComputedTracker(ComputedHumanPoseTracker tracker) { + protected void setComputedTracker(ComputedHumanPoseTracker tracker) { switch (tracker.getTrackerRole()) { case HEAD -> computedHeadTracker = tracker; case CHEST -> computedChestTracker = tracker; @@ -652,7 +621,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } } - public void setComputedTrackers(List trackers) { + protected void setComputedTrackers(List trackers) { for (ComputedHumanPoseTracker t : trackers) { setComputedTracker(t); } @@ -660,7 +629,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { // #endregion // #endregion - public void fillNullComputedTrackers() { + protected void fillNullComputedTrackers() { if (computedHeadTracker == null) { computedHeadTracker = new ComputedHumanPoseTracker( Tracker.getNextLocalTrackerId(), @@ -751,7 +720,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } } - // #region Get Trackers + // #region Get trackers public ComputedHumanPoseTracker getComputedTracker(TrackerRole trackerRole) { switch (trackerRole) { case HEAD: @@ -784,7 +753,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } // #region Processing - // Useful for sub-classes that need to return a sub-tracker (like + // Useful for subclasses that need to return a sub-tracker (like // PoseFrameTracker -> TrackerFrame) protected Tracker trackerPreUpdate(Tracker tracker) { return tracker; @@ -792,7 +761,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { // Updates the pose from tracker positions @VRServerThread - @Override public void updatePose() { tapDetectionManager.update(); updateLocalTransforms(); @@ -1345,13 +1313,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { // #endregion // #region Skeleton Config - @Override - public void updateOffsetsState(SkeletonConfigOffsets configOffset, float newValue) { - // Do nothing, the node offset callback handles all that's needed - } - - @Override - public void updateTogglesState(SkeletonConfigToggles configToggle, boolean newValue) { + public void updateToggleState(SkeletonConfigToggles configToggle, boolean newValue) { if (configToggle == null) { return; } @@ -1373,8 +1335,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } } - @Override - public void updateValuesState(SkeletonConfigValues configValue, float newValue) { + public void updateValueState(SkeletonConfigValues configValue, float newValue) { if (configValue == null) { return; } @@ -1390,7 +1351,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } } - @Override public void updateNodeOffset(BoneType nodeOffset, Vector3f offset) { if (nodeOffset == null) { return; @@ -1583,13 +1543,11 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } // #endregion - @Override public TransformNode getRootNode() { return hmdNode; } - @Override - public TransformNode[] getAllNodes() { + protected TransformNode[] getAllNodes() { return new TransformNode[] { hmdNode, headNode, @@ -1631,7 +1589,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { }; } - public TransformNode[] getArmNodes() { + protected TransformNode[] getArmNodes() { return new TransformNode[] { leftShoulderHeadNode, rightShoulderHeadNode, @@ -1652,37 +1610,10 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { }; } - @Override - public SkeletonConfig getSkeletonConfig() { - return skeletonConfig; - } - - @Override - public void resetSkeletonConfig(SkeletonConfigOffsets config) { - if (config == null) { - return; - } - - switch (config) { - case CHEST, WAIST, HIP, UPPER_LEG, LOWER_LEG -> { - Vector3f vec = new Vector3f(); - hmdTracker.getPosition(vec); - float height = vec.y / BodyProportionError.eyeHeightToHeightRatio; - if (height > 0.5f) { // Reset only if floor level seems right, - skeletonConfig - .setOffset( - config, - height - * BodyProportionError - .getProportionLimitForOffset(config) - .getTargetRatio() - ); - } else { // if floor level is incorrect - skeletonConfig.setOffset(config, null); - } - } - default -> skeletonConfig.setOffset(config, null); - } + public float getHmdHeight() { + Vector3f hmdVec = new Vector3f(); + hmdTracker.getPosition(hmdVec); + return hmdVec.y; } /** @@ -1730,7 +1661,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { }; } - @Override public void resetTrackersFull() { // Pass all trackers through trackerPreUpdate Tracker hmdTracker = trackerPreUpdate(this.hmdTracker); @@ -1761,16 +1691,14 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } private boolean shouldReverseYaw(TrackerPosition position) { - return position != null - && (position == TrackerPosition.LEFT_UPPER_LEG - || position == TrackerPosition.RIGHT_UPPER_LEG - || position == TrackerPosition.LEFT_LOWER_ARM - || position == TrackerPosition.RIGHT_LOWER_ARM - || position == TrackerPosition.LEFT_HAND - || position == TrackerPosition.RIGHT_HAND); + return position == TrackerPosition.LEFT_UPPER_LEG + || position == TrackerPosition.RIGHT_UPPER_LEG + || position == TrackerPosition.LEFT_LOWER_ARM + || position == TrackerPosition.RIGHT_LOWER_ARM + || position == TrackerPosition.LEFT_HAND + || position == TrackerPosition.RIGHT_HAND; } - @Override @VRServerThread public void resetTrackersMounting() { // Pass all trackers through trackerPreUpdate @@ -1784,7 +1712,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { this.legTweaks.resetBuffer(); } - @Override @VRServerThread public void resetTrackersYaw() { // Pass all trackers through trackerPreUpdate @@ -1811,7 +1738,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { legTweaks.updateConfig(); } - @Override public boolean[] getLegTweaksState() { boolean[] state = new boolean[2]; state[0] = this.legTweaks.getFloorclipEnabled(); @@ -1820,21 +1746,18 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback { } // master enable/disable of all leg tweaks (for autobone) - @Override @VRServerThread public void setLegTweaksEnabled(boolean value) { this.legTweaks.setEnabled(value); } - @Override @VRServerThread public void setFloorclipEnabled(boolean value) { - this.skeletonConfig.setToggle(SkeletonConfigToggles.FLOOR_CLIP, value); + humanPoseManager.setToggle(SkeletonConfigToggles.FLOOR_CLIP, value); } - @Override @VRServerThread public void setSkatingCorrectionEnabled(boolean value) { - this.skeletonConfig.setToggle(SkeletonConfigToggles.SKATING_CORRECTION, value); + humanPoseManager.setToggle(SkeletonConfigToggles.SKATING_CORRECTION, value); } } diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweakBuffer.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java similarity index 99% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweakBuffer.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java index 4626e8ebc..d08d9ab0e 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweakBuffer.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweakBuffer.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweaks.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java similarity index 99% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweaks.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java index 595e7ec1a..85d0ca61e 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/LegTweaks.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/LegTweaks.java @@ -1,11 +1,11 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import com.jme3.math.FastMath; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.config.LegTweaksConfig; -import dev.slimevr.vr.processor.TransformNode; +import dev.slimevr.tracking.processor.TransformNode; public class LegTweaks { diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonData.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonData.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java index 4373de416..03f22acf3 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonData.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/SkeletonData.java @@ -1,12 +1,10 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import dev.slimevr.tracking.processor.BoneType; +import dev.slimevr.tracking.processor.TransformNode; +import dev.slimevr.tracking.processor.config.SkeletonConfigManager; -import dev.slimevr.vr.processor.TransformNode; +import java.util.*; /** @@ -17,7 +15,7 @@ public class SkeletonData { public final Joint[] joints; public final List bones = new ArrayList<>(); - private final SkeletonConfig config; + private final SkeletonConfigManager config; private Map> bonesByOffsetKey = new EnumMap<>( BoneType.class @@ -60,7 +58,7 @@ public class SkeletonData { protected final Joint trackerRightHandJoint = new Joint("Right-Hand-Tracker"); // #endregion - public SkeletonData(SkeletonConfig config) { + public SkeletonData(SkeletonConfigManager config) { this.config = config; List jointsList = new ArrayList<>(); diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetection.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetection.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java index b9ccd6455..169f92852 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetection.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetection.java @@ -1,9 +1,9 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import java.util.LinkedList; import com.jme3.math.Vector3f; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.Tracker; // class that monitors the acceleration of the waist, hip, or chest trackers to detect taps diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetectionManager.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetectionManager.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java index 846ba641a..6faaba54a 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/TapDetectionManager.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/TapDetectionManager.java @@ -1,9 +1,9 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import dev.slimevr.config.TapDetectionConfig; import dev.slimevr.osc.VRCOSCHandler; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.trackers.Tracker; // handles tap detection for the skeleton diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/ViveEmulation.java b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/processor/skeleton/ViveEmulation.java rename to server/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java index fb47358c4..658b08ea1 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/ViveEmulation.java +++ b/server/src/main/java/dev/slimevr/tracking/processor/skeleton/ViveEmulation.java @@ -1,7 +1,8 @@ -package dev.slimevr.vr.processor.skeleton; +package dev.slimevr.tracking.processor.skeleton; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; + import java.util.Random; @@ -10,10 +11,10 @@ import java.util.Random; public class ViveEmulation { // skeleton - private HumanSkeleton skeleton; + private final HumanSkeleton skeleton; // random number generator - private Random random = new Random(); + private final Random random = new Random(); // hyperparameters private static final int CHANCE = (int) 1e5; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/CalibratingTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/CalibratingTracker.java similarity index 86% rename from server/src/main/java/dev/slimevr/vr/trackers/CalibratingTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/CalibratingTracker.java index bc2f7f1b2..7e31b8dfe 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/CalibratingTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/CalibratingTracker.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import java.util.function.Consumer; diff --git a/server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTracker.java similarity index 92% rename from server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTracker.java index 1a3283b1d..b48daa261 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTracker.java @@ -1,7 +1,6 @@ -package dev.slimevr.vr.processor; +package dev.slimevr.tracking.trackers; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.Device; import io.eiren.util.BufferedTimer; diff --git a/server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTrackerPosition.java b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTrackerPosition.java similarity index 81% rename from server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTrackerPosition.java rename to server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTrackerPosition.java index fcab02373..96aafed96 100644 --- a/server/src/main/java/dev/slimevr/vr/processor/ComputedHumanPoseTrackerPosition.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedHumanPoseTrackerPosition.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.processor; +package dev.slimevr.tracking.trackers; public enum ComputedHumanPoseTrackerPosition { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/ComputedTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedTracker.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/trackers/ComputedTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/ComputedTracker.java index 90667993f..ab41e66fe 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/ComputedTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/ComputedTracker.java @@ -1,9 +1,9 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.config.TrackerConfig; -import dev.slimevr.vr.Device; +import dev.slimevr.tracking.Device; import java.util.Optional; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/DeviceType.java b/server/src/main/java/dev/slimevr/tracking/trackers/DeviceType.java similarity index 65% rename from server/src/main/java/dev/slimevr/vr/trackers/DeviceType.java rename to server/src/main/java/dev/slimevr/tracking/trackers/DeviceType.java index 4967cc9ad..ec8bda50b 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/DeviceType.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/DeviceType.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public enum DeviceType { HMD, CONTROLLER, TRACKER, TRACKING_REFERENCE diff --git a/server/src/main/java/dev/slimevr/vr/trackers/HMDTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/HMDTracker.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/HMDTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/HMDTracker.java index 281422fbc..b468edffa 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/HMDTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/HMDTracker.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import io.eiren.util.BufferedTimer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/IMUTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/IMUTracker.java similarity index 99% rename from server/src/main/java/dev/slimevr/vr/trackers/IMUTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/IMUTracker.java index 9dc6ee9fa..6e39e482f 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/IMUTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/IMUTracker.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import com.jme3.math.FastMath; import com.jme3.math.Quaternion; @@ -8,9 +8,9 @@ import dev.slimevr.config.TrackerConfig; import dev.slimevr.filtering.CircularArrayList; import dev.slimevr.filtering.QuaternionMovingAverage; import dev.slimevr.filtering.TrackerFilters; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.udp.TrackersUDPServer; -import dev.slimevr.vr.trackers.udp.UDPDevice; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.trackers.udp.TrackersUDPServer; +import dev.slimevr.tracking.trackers.udp.UDPDevice; import io.eiren.util.BufferedTimer; import io.eiren.util.collections.FastList; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/SensorTap.java b/server/src/main/java/dev/slimevr/tracking/trackers/SensorTap.java similarity index 87% rename from server/src/main/java/dev/slimevr/vr/trackers/SensorTap.java rename to server/src/main/java/dev/slimevr/tracking/trackers/SensorTap.java index 464bf5efe..db8c14c52 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/SensorTap.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/SensorTap.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public class SensorTap { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/ShareableTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/ShareableTracker.java similarity index 69% rename from server/src/main/java/dev/slimevr/vr/trackers/ShareableTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/ShareableTracker.java index 575f4bfe0..758da5145 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/ShareableTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/ShareableTracker.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public interface ShareableTracker extends Tracker { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/Tracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.java similarity index 94% rename from server/src/main/java/dev/slimevr/vr/trackers/Tracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/Tracker.java index 3a9f672be..58b72c68c 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/Tracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/Tracker.java @@ -1,9 +1,9 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.config.TrackerConfig; -import dev.slimevr.vr.Device; +import dev.slimevr.tracking.Device; import java.util.concurrent.atomic.AtomicInteger; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerPosition.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.java similarity index 99% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerPosition.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.java index 98df902eb..ab608f762 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerPosition.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerPosition.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import solarxr_protocol.datatypes.BodyPart; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerRole.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerRole.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.java index e0f94b40c..c4e6c733a 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerRole.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerRole.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; /** * The tracker role classifies the position and the role of a tracker on user's diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerStatus.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerStatus.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.java index 6f9aa51ff..d70dbe1a2 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerStatus.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerStatus.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public enum TrackerStatus { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerUtils.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerUtils.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.java index f51f8c874..f2c66f532 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerUtils.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerUtils.java @@ -1,6 +1,4 @@ -package dev.slimevr.vr.trackers; - -import dev.slimevr.vr.processor.ComputedHumanPoseTracker; +package dev.slimevr.tracking.trackers; import java.util.List; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithBattery.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithBattery.java similarity index 71% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerWithBattery.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithBattery.java index 2b1a8f83d..cca1b88a3 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithBattery.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithBattery.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public interface TrackerWithBattery { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithFiltering.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithFiltering.java similarity index 79% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerWithFiltering.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithFiltering.java index 9d5ad370a..1eb264e12 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithFiltering.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithFiltering.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import dev.slimevr.filtering.TrackerFilters; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithTPS.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithTPS.java similarity index 65% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerWithTPS.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithTPS.java index 10d8add50..48ca6be62 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithTPS.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithTPS.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public interface TrackerWithTPS { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithWireless.java b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithWireless.java similarity index 68% rename from server/src/main/java/dev/slimevr/vr/trackers/TrackerWithWireless.java rename to server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithWireless.java index 483ccf201..15d25374b 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/TrackerWithWireless.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/TrackerWithWireless.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; public interface TrackerWithWireless { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/VRTracker.java b/server/src/main/java/dev/slimevr/tracking/trackers/VRTracker.java similarity index 96% rename from server/src/main/java/dev/slimevr/vr/trackers/VRTracker.java rename to server/src/main/java/dev/slimevr/tracking/trackers/VRTracker.java index 400892313..822e8788b 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/VRTracker.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/VRTracker.java @@ -1,7 +1,7 @@ -package dev.slimevr.vr.trackers; +package dev.slimevr.tracking.trackers; import com.jme3.math.Quaternion; -import dev.slimevr.vr.Device; +import dev.slimevr.tracking.Device; import io.eiren.util.BufferedTimer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/SensorSpecificPacket.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/SensorSpecificPacket.java similarity index 85% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/SensorSpecificPacket.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/SensorSpecificPacket.java index 2d978af73..249750578 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/SensorSpecificPacket.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/SensorSpecificPacket.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; public interface SensorSpecificPacket { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/TrackersUDPServer.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/TrackersUDPServer.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.java index 12f65280f..65c0b91c0 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/TrackersUDPServer.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/TrackersUDPServer.java @@ -1,13 +1,13 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import com.jme3.math.FastMath; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import dev.slimevr.Main; import dev.slimevr.NetworkProtocol; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerStatus; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; +import dev.slimevr.tracking.trackers.TrackerStatus; import io.eiren.util.Util; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPDevice.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.java similarity index 90% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPDevice.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.java index cf6cba514..6be2bf23b 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPDevice.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPDevice.java @@ -1,9 +1,9 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import dev.slimevr.NetworkProtocol; -import dev.slimevr.vr.Device; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.Device; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; import java.net.InetAddress; import java.net.SocketAddress; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.java index a08d50ef2..23df5eb7a 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket0Heartbeat.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket0Heartbeat.java similarity index 90% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket0Heartbeat.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket0Heartbeat.java index 06f2157b5..d19dd362e 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket0Heartbeat.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket0Heartbeat.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket10PingPong.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket10PingPong.java similarity index 91% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket10PingPong.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket10PingPong.java index 913704881..60857e3d1 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket10PingPong.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket10PingPong.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket11Serial.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket11Serial.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket11Serial.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket11Serial.java index df2f64398..1f6aa1a3e 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket11Serial.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket11Serial.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket12BatteryLevel.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket12BatteryLevel.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket12BatteryLevel.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket12BatteryLevel.java index 056c3a836..beac17e83 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket12BatteryLevel.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket12BatteryLevel.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket13Tap.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket13Tap.java similarity index 86% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket13Tap.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket13Tap.java index 0bbcfed09..2771f0dc0 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket13Tap.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket13Tap.java @@ -1,6 +1,6 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; -import dev.slimevr.vr.trackers.SensorTap; +import dev.slimevr.tracking.trackers.SensorTap; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket14Error.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket14Error.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket14Error.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket14Error.java index 548757b0c..0aef532b4 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket14Error.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket14Error.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket15SensorInfo.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket15SensorInfo.java similarity index 90% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket15SensorInfo.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket15SensorInfo.java index 0cb505d77..16fb42fdb 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket15SensorInfo.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket15SensorInfo.java @@ -1,6 +1,6 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; -import dev.slimevr.vr.trackers.TrackerStatus; +import dev.slimevr.tracking.trackers.TrackerStatus; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket16Rotation2.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket16Rotation2.java similarity index 83% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket16Rotation2.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket16Rotation2.java index b7f14590c..3e26bf04e 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket16Rotation2.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket16Rotation2.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; public class UDPPacket16Rotation2 extends UDPPacket1Rotation { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket17RotationData.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket17RotationData.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket17RotationData.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket17RotationData.java index 9209f988c..618ba5a07 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket17RotationData.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket17RotationData.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import com.jme3.math.Quaternion; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket18MagnetometerAccuracy.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket18MagnetometerAccuracy.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket18MagnetometerAccuracy.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket18MagnetometerAccuracy.java index 8525b88a6..e73b91374 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket18MagnetometerAccuracy.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket18MagnetometerAccuracy.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket19SignalStrength.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket19SignalStrength.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket19SignalStrength.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket19SignalStrength.java index d949b6f02..c02c0dfaf 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket19SignalStrength.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket19SignalStrength.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Heartbeat.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Heartbeat.java similarity index 73% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Heartbeat.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Heartbeat.java index c5f313ddd..2bd04c167 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Heartbeat.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Heartbeat.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; public class UDPPacket1Heartbeat extends UDPPacket0Heartbeat { diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Rotation.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Rotation.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Rotation.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Rotation.java index 5efba3e5b..1da469a3f 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket1Rotation.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket1Rotation.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import com.jme3.math.Quaternion; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket200ProtocolChange.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket200ProtocolChange.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket200ProtocolChange.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket200ProtocolChange.java index f077f8718..4479890bf 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket200ProtocolChange.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket200ProtocolChange.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket20Temperature.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket20Temperature.java similarity index 93% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket20Temperature.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket20Temperature.java index 9a55ec0a2..8da8c3653 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket20Temperature.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket20Temperature.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket21UserAction.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket21UserAction.java similarity index 92% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket21UserAction.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket21UserAction.java index 572d1d99b..658588bb4 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket21UserAction.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket21UserAction.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket3Handshake.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket3Handshake.java similarity index 97% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket3Handshake.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket3Handshake.java index 550fc1962..98469410b 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket3Handshake.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket3Handshake.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket4Acceleration.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket4Acceleration.java similarity index 95% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket4Acceleration.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket4Acceleration.java index 4c13791af..37b73c5b8 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPPacket4Acceleration.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPPacket4Acceleration.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.BufferUnderflowException; diff --git a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPProtocolParser.java b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.java similarity index 98% rename from server/src/main/java/dev/slimevr/vr/trackers/udp/UDPProtocolParser.java rename to server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.java index be1087dce..ba8132a87 100644 --- a/server/src/main/java/dev/slimevr/vr/trackers/udp/UDPProtocolParser.java +++ b/server/src/main/java/dev/slimevr/tracking/trackers/udp/UDPProtocolParser.java @@ -1,4 +1,4 @@ -package dev.slimevr.vr.trackers.udp; +package dev.slimevr.tracking.trackers.udp; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/server/src/main/java/dev/slimevr/vr/processor/HumanPoseProcessor.java b/server/src/main/java/dev/slimevr/vr/processor/HumanPoseProcessor.java deleted file mode 100644 index 6397334b4..000000000 --- a/server/src/main/java/dev/slimevr/vr/processor/HumanPoseProcessor.java +++ /dev/null @@ -1,264 +0,0 @@ -package dev.slimevr.vr.processor; - -import dev.slimevr.VRServer; -import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.processor.skeleton.*; -import dev.slimevr.vr.trackers.ShareableTracker; -import dev.slimevr.vr.trackers.Tracker; -import dev.slimevr.vr.trackers.TrackerRole; -import dev.slimevr.vr.trackers.TrackerStatus; -import io.eiren.util.ann.ThreadSafe; -import io.eiren.util.collections.FastList; - -import java.util.List; -import java.util.function.Consumer; - - -public class HumanPoseProcessor { - - private final VRServer server; - private final List computedTrackers = new FastList<>(); - private final List> onSkeletonUpdated = new FastList<>(); - private Skeleton skeleton; - - public HumanPoseProcessor(VRServer server) { - this.server = server; - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.HEAD, - TrackerRole.HEAD - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.CHEST, - TrackerRole.CHEST - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.WAIST, - TrackerRole.WAIST - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.LEFT_FOOT, - TrackerRole.LEFT_FOOT - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.RIGHT_FOOT, - TrackerRole.RIGHT_FOOT - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.LEFT_KNEE, - TrackerRole.LEFT_KNEE - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.RIGHT_KNEE, - TrackerRole.RIGHT_KNEE - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.LEFT_ELBOW, - TrackerRole.LEFT_ELBOW - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.RIGHT_ELBOW, - TrackerRole.RIGHT_ELBOW - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.LEFT_HAND, - TrackerRole.LEFT_HAND - ) - ); - computedTrackers - .add( - new ComputedHumanPoseTracker( - Tracker.getNextLocalTrackerId(), - ComputedHumanPoseTrackerPosition.RIGHT_HAND, - TrackerRole.RIGHT_HAND - ) - ); - } - - public Skeleton getSkeleton() { - return skeleton; - } - - @VRServerThread - public void addSkeletonUpdatedCallback(Consumer consumer) { - onSkeletonUpdated.add(consumer); - if (skeleton != null) - consumer.accept(skeleton); - } - - @ThreadSafe - public void setSkeletonConfig(SkeletonConfigOffsets key, float newLength) { - if (skeleton != null) - skeleton.getSkeletonConfig().setOffset(key, newLength); - } - - @ThreadSafe - public void resetSkeletonConfig(SkeletonConfigOffsets key) { - if (skeleton != null) - skeleton.resetSkeletonConfig(key); - } - - @ThreadSafe - public void resetAllSkeletonConfigs() { - if (skeleton != null) - skeleton.resetAllSkeletonConfigs(); - } - - @ThreadSafe - public SkeletonConfig getSkeletonConfig() { - return skeleton.getSkeletonConfig(); - } - - @ThreadSafe - public float getSkeletonConfig(SkeletonConfigOffsets key) { - if (skeleton != null) { - return skeleton.getSkeletonConfig().getOffset(key); - } - return 0.0f; - } - - @ThreadSafe - public List getComputedTrackers() { - return computedTrackers; - } - - @VRServerThread - public void trackerAdded(Tracker tracker) { - updateSkeletonModel(); - } - - @VRServerThread - public void trackerUpdated(Tracker tracker) { - updateSkeletonModel(); - } - - @VRServerThread - private void updateSkeletonModel() { - disconnectAllTrackers(); - skeleton = new HumanSkeleton(server, computedTrackers); - for (Consumer sc : onSkeletonUpdated) - sc.accept(skeleton); - } - - @VRServerThread - private void disconnectAllTrackers() { - for (ComputedHumanPoseTracker t : computedTrackers) { - t.setStatus(TrackerStatus.DISCONNECTED); - } - } - - @VRServerThread - public void update() { - if (skeleton != null) - skeleton.updatePose(); - } - - @VRServerThread - public void resetTrackers() { - if (skeleton != null) { - skeleton.resetTrackersFull(); - server.getVrcOSCHandler().yawAlign(); - } - } - - @VRServerThread - public void resetTrackersMounting() { - if (skeleton != null) - skeleton.resetTrackersMounting(); - } - - @VRServerThread - public void resetTrackersYaw() { - if (skeleton != null) { - skeleton.resetTrackersYaw(); - server.getVrcOSCHandler().yawAlign(); - } - } - - @ThreadSafe - public boolean[] getLegTweaksState() { - return skeleton.getLegTweaksState(); - } - - @VRServerThread - public void setLegTweaksEnabled(boolean value) { - if (skeleton != null) - skeleton.setLegTweaksEnabled(value); - } - - @VRServerThread - public void setFloorClipEnabled(boolean value) { - if (skeleton != null) { - skeleton.setFloorclipEnabled(value); - server - .getConfigManager() - .getVrConfig() - .getSkeleton() - .getToggles() - .put(SkeletonConfigToggles.FLOOR_CLIP.configKey, value); - - server.getConfigManager().saveConfig(); - } - } - - @VRServerThread - public void setSkatingCorrectionEnabled(boolean value) { - if (skeleton != null) { - skeleton.setSkatingCorrectionEnabled(value); - server - .getConfigManager() - .getVrConfig() - .getSkeleton() - .getToggles() - .put(SkeletonConfigToggles.SKATING_CORRECTION.configKey, value); - - server.getConfigManager().saveConfig(); - } - } - - @VRServerThread - public float getUserHeightFromConfig() { - if (skeleton != null) { - return getSkeletonConfig().getUserHeightFromOffsets(); - } - return 0f; - } -} diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/Skeleton.java b/server/src/main/java/dev/slimevr/vr/processor/skeleton/Skeleton.java deleted file mode 100644 index 75c5d7562..000000000 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/Skeleton.java +++ /dev/null @@ -1,63 +0,0 @@ -package dev.slimevr.vr.processor.skeleton; - -import java.util.ArrayList; -import java.util.List; - -import dev.slimevr.util.ann.VRServerThread; -import dev.slimevr.vr.processor.TransformNode; -import io.eiren.util.ann.ThreadSafe; - - -public abstract class Skeleton { - - public final List currentBoneInfo = new ArrayList<>(); - - @VRServerThread - public abstract void updatePose(); - - @ThreadSafe - public abstract TransformNode getRootNode(); - - @ThreadSafe - public abstract TransformNode[] getAllNodes(); - - @ThreadSafe - public abstract SkeletonConfig getSkeletonConfig(); - - @ThreadSafe - public abstract void resetSkeletonConfig(SkeletonConfigOffsets config); - - @ThreadSafe - public void resetAllSkeletonConfigs() { - for (SkeletonConfigOffsets config : SkeletonConfigOffsets.values) { - resetSkeletonConfig(config); - } - } - - @VRServerThread - public abstract void resetTrackersFull(); - - @VRServerThread - public abstract void resetTrackersMounting(); - - @VRServerThread - public abstract void resetTrackersYaw(); - - @VRServerThread - public abstract void updateLegTweaksConfig(); - - @VRServerThread - public abstract void updateTapDetectionConfig(); - - @VRServerThread - public abstract boolean[] getLegTweaksState(); - - @VRServerThread - public abstract void setLegTweaksEnabled(boolean value); - - @VRServerThread - public abstract void setFloorclipEnabled(boolean value); - - @VRServerThread - public abstract void setSkatingCorrectionEnabled(boolean value); -} diff --git a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigCallback.java b/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigCallback.java deleted file mode 100644 index 7f6a45f2a..000000000 --- a/server/src/main/java/dev/slimevr/vr/processor/skeleton/SkeletonConfigCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.slimevr.vr.processor.skeleton; - -import com.jme3.math.Vector3f; - - -public interface SkeletonConfigCallback { - - void updateOffsetsState(SkeletonConfigOffsets offset, float newValue); - - void updateTogglesState(SkeletonConfigToggles toggle, boolean newValue); - - void updateValuesState(SkeletonConfigValues value, float newValue); - - void updateNodeOffset(BoneType nodeOffset, Vector3f offset); -} diff --git a/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java b/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java index 7614ac859..e978eb0ac 100644 --- a/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java +++ b/server/src/main/java/dev/slimevr/websocketapi/WebSocketVRBridge.java @@ -7,7 +7,7 @@ import com.jme3.math.Vector3f; import dev.slimevr.Main; import dev.slimevr.VRServer; import dev.slimevr.bridge.Bridge; -import dev.slimevr.vr.trackers.*; +import dev.slimevr.tracking.trackers.*; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; import org.java_websocket.WebSocket; diff --git a/server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java b/server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java index 2a5d360a1..5d79e3866 100644 --- a/server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java +++ b/server/src/test/java/dev/slimevr/unit/ReferenceAdjustmentsTests.java @@ -2,9 +2,9 @@ package dev.slimevr.unit; import com.jme3.math.FastMath; import com.jme3.math.Quaternion; -import dev.slimevr.vr.processor.TransformNode; -import dev.slimevr.vr.trackers.IMUTracker; -import dev.slimevr.vr.trackers.Tracker; +import dev.slimevr.tracking.processor.TransformNode; +import dev.slimevr.tracking.trackers.IMUTracker; +import dev.slimevr.tracking.trackers.Tracker; import io.eiren.math.FloatMath; import io.eiren.util.StringUtils; import org.junit.jupiter.api.DynamicTest;