diff --git a/Source/SenseGlove/Private/SenseGlove/Components/SGVirtualHandComponent.cpp b/Source/SenseGlove/Private/SenseGlove/Components/SGVirtualHandComponent.cpp index 0a4f95fb..170d5949 100644 --- a/Source/SenseGlove/Private/SenseGlove/Components/SGVirtualHandComponent.cpp +++ b/Source/SenseGlove/Private/SenseGlove/Components/SGVirtualHandComponent.cpp @@ -109,8 +109,6 @@ struct USGVirtualHandComponent::FImpl ECollisionEnabled::Type CachedCollisionEnabled; FCollisionResponseContainer CachedCollisionResponse; - FXRMotionControllerData MotionControllerData; - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 FXRMotionControllerState MotionControllerState; FXRHandTrackingState HandTrackingState; @@ -475,11 +473,6 @@ USGHapticGlove* USGVirtualHandComponent::GetConnectedGlove() const return Glove; } -const FXRMotionControllerData& USGVirtualHandComponent::GetMotionControllerData() const -{ - return Pimpl->MotionControllerData; -} - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 const FXRHandTrackingState& USGVirtualHandComponent::GetHandTrackingState() const { @@ -879,6 +872,8 @@ void USGVirtualHandComponent::FImpl::StartXRDataRetrievalTimer() { const EControllerHand Hand = Owner->IsRight() ? EControllerHand::Right : EControllerHand::Left; + +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7 { FXRMotionControllerData Data; Data.bValid = false; @@ -891,6 +886,7 @@ void USGVirtualHandComponent::FImpl::StartXRDataRetrievalTimer() (void) bGotMotionControllerData; MotionControllerData = MoveTemp(Data); } +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7 */ #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 { diff --git a/Source/SenseGlove/Private/SenseGlove/Components/SGWristTrackerComponent.cpp b/Source/SenseGlove/Private/SenseGlove/Components/SGWristTrackerComponent.cpp index ca755fe4..56b11fc4 100644 --- a/Source/SenseGlove/Private/SenseGlove/Components/SGWristTrackerComponent.cpp +++ b/Source/SenseGlove/Private/SenseGlove/Components/SGWristTrackerComponent.cpp @@ -66,8 +66,6 @@ struct USGWristTrackerComponent::FImpl bool bOverridePluginSettingsPropertyAlreadyModified; - FXRMotionControllerData MotionControllerData; - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 FXRMotionControllerState MotionControllerState; FXRHandTrackingState HandTrackingState; @@ -258,11 +256,6 @@ void USGWristTrackerComponent::EditorTick( { } -const FXRMotionControllerData& USGWristTrackerComponent::GetMotionControllerData() const -{ - return Pimpl->MotionControllerData; -} - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 const FXRHandTrackingState& USGWristTrackerComponent::GetHandTrackingState() const { @@ -386,19 +379,6 @@ void USGWristTrackerComponent::FImpl::StartXRDataRetrievalTimer() { const EControllerHand Hand = Owner->IsRight() ? EControllerHand::Right : EControllerHand::Left; - { - FXRMotionControllerData Data; - Data.bValid = false; - - PRAGMA_DISABLE_DEPRECATION_WARNINGS - const bool bGotMotionControllerData = - FSGXRTracker::GetMotionControllerData(Owner, Hand, Data); - PRAGMA_ENABLE_DEPRECATION_WARNINGS - - (void) bGotMotionControllerData; - MotionControllerData = MoveTemp(Data); - } - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 { FXRHandTrackingState State; diff --git a/Source/SenseGlove/Public/SenseGlove/Components/SGVirtualHandComponent.h b/Source/SenseGlove/Public/SenseGlove/Components/SGVirtualHandComponent.h index 9286ffe4..a5b63918 100644 --- a/Source/SenseGlove/Public/SenseGlove/Components/SGVirtualHandComponent.h +++ b/Source/SenseGlove/Public/SenseGlove/Components/SGVirtualHandComponent.h @@ -181,9 +181,6 @@ public: bool IsGloveConnected() const; USGHapticGlove* GetConnectedGlove() const; - UE_DEPRECATED(5.5, "Deprecated by UE 5.5 in favor of GetMotionControllerState and GetHandTrackingState") - const FXRMotionControllerData& GetMotionControllerData() const; - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 const FXRHandTrackingState& GetHandTrackingState() const; #endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ diff --git a/Source/SenseGlove/Public/SenseGlove/Components/SGWristTrackerComponent.h b/Source/SenseGlove/Public/SenseGlove/Components/SGWristTrackerComponent.h index 92de042a..62bb106d 100644 --- a/Source/SenseGlove/Public/SenseGlove/Components/SGWristTrackerComponent.h +++ b/Source/SenseGlove/Public/SenseGlove/Components/SGWristTrackerComponent.h @@ -165,9 +165,6 @@ protected: FActorComponentTickFunction* ThisTickFunction); public: - UE_DEPRECATED(5.5, "Deprecated by UE 5.5 in favor of GetMotionControllerState and GetHandTrackingState") - const FXRMotionControllerData& GetMotionControllerData() const; - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 const FXRHandTrackingState& GetHandTrackingState() const; #endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ diff --git a/Source/SenseGloveDebug/Private/SGDebug/SGDebugVirtualHand.cpp b/Source/SenseGloveDebug/Private/SGDebug/SGDebugVirtualHand.cpp index fd0e5793..fce875aa 100644 --- a/Source/SenseGloveDebug/Private/SGDebug/SGDebugVirtualHand.cpp +++ b/Source/SenseGloveDebug/Private/SGDebug/SGDebugVirtualHand.cpp @@ -44,49 +44,6 @@ #include "SGDebug/SGDebugCube.h" #include "SGDebug/SGDebugGizmo.h" -void FSGDebugVirtualHand::Draw( - const UWorld* World, - const FXRMotionControllerData& MotionControllerData, - const FSGVirtualHandDebuggingSettings& Settings) -{ - if (!ensureAlwaysMsgf( - Settings.DrawingMode != ESGDebugVirtualHandDrawingMode::None, - TEXT("Invalid virtual hand drawing mode!"))) - { - return; - } - - if (!ensureAlwaysMsgf( - MotionControllerData.bValid, - TEXT("Invalid motion controller data!"))) - { - return; - } - - if (!ensureAlwaysMsgf( - MotionControllerData.HandKeyPositions.Num() == MotionControllerData.HandKeyRotations.Num(), - TEXT("Mismatched motion controller data positions and rotations!"))) - { - return; - } - - for (TArray::SizeType HandKeyIndex = 0; - HandKeyIndex < MotionControllerData.HandKeyPositions.Num(); ++HandKeyIndex) - { - const FVector& HandKeyPosition{MotionControllerData.HandKeyPositions[HandKeyIndex]}; - const FQuat& HandKeyRotation{MotionControllerData.HandKeyRotations[HandKeyIndex]}; - - if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints) - { - FSGDebugCube::Draw(World, HandKeyPosition, HandKeyRotation, Settings.DebugCubicHandSettings); - } - else if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints) - { - FSGDebugGizmo::Draw(World, HandKeyPosition, HandKeyRotation, Settings.DebugGizmoHandSettings); - } - } -} - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 void FSGDebugVirtualHand::Draw( const UWorld* World, diff --git a/Source/SenseGloveDebug/Public/SGDebug/SGDebugVirtualHand.h b/Source/SenseGloveDebug/Public/SGDebug/SGDebugVirtualHand.h index 267791d3..c9545eaf 100644 --- a/Source/SenseGloveDebug/Public/SGDebug/SGDebugVirtualHand.h +++ b/Source/SenseGloveDebug/Public/SGDebug/SGDebugVirtualHand.h @@ -48,12 +48,6 @@ class UWorld; class SENSEGLOVEDEBUG_API FSGDebugVirtualHand final { public: - UE_DEPRECATED(5.5, "Deprecated in favor of the variant that accepts FXRHandTrackingState") - static void Draw( - const UWorld* World, - const FXRMotionControllerData& MotionControllerData, - const FSGVirtualHandDebuggingSettings& Settings); - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 static void Draw( const UWorld* World, diff --git a/Source/SenseGloveDebugKismet/Private/SGDebugKismet/SGDebugVirtualHandKismetLibrary.cpp b/Source/SenseGloveDebugKismet/Private/SGDebugKismet/SGDebugVirtualHandKismetLibrary.cpp index 19cf4c2a..f8c71793 100644 --- a/Source/SenseGloveDebugKismet/Private/SGDebugKismet/SGDebugVirtualHandKismetLibrary.cpp +++ b/Source/SenseGloveDebugKismet/Private/SGDebugKismet/SGDebugVirtualHandKismetLibrary.cpp @@ -37,18 +37,6 @@ #include "SGDebug/SGDebugVirtualHand.h" -void USGDebugVirtualHandKismetLibrary::Draw_FXRMotionControllerData( - UObject* WorldContextObject, - const FXRMotionControllerData& MotionControllerData, - const FSGVirtualHandDebuggingSettings& Settings) -{ - ensureAlwaysMsgf(WorldContextObject, TEXT("Invalid world context object!")); - - PRAGMA_DISABLE_DEPRECATION_WARNINGS - FSGDebugVirtualHand::Draw(WorldContextObject->GetWorld(), MotionControllerData, Settings); - PRAGMA_ENABLE_DEPRECATION_WARNINGS -} - void USGDebugVirtualHandKismetLibrary::Draw_FXRHandTrackingState( UObject* WorldContextObject, const FXRHandTrackingState& HandTrackingState, diff --git a/Source/SenseGloveDebugKismet/Public/SGDebugKismet/SGDebugVirtualHandKismetLibrary.h b/Source/SenseGloveDebugKismet/Public/SGDebugKismet/SGDebugVirtualHandKismetLibrary.h index 9c30cb50..64072702 100644 --- a/Source/SenseGloveDebugKismet/Public/SGDebugKismet/SGDebugVirtualHandKismetLibrary.h +++ b/Source/SenseGloveDebugKismet/Public/SGDebugKismet/SGDebugVirtualHandKismetLibrary.h @@ -50,13 +50,6 @@ class SENSEGLOVEDEBUGKISMET_API USGDebugVirtualHandKismetLibrary final : public GENERATED_BODY() public: - UFUNCTION(BlueprintCallable, DisplayName="Draw", Category="SenseGlove | Debug | Virtual Hand", - meta=(WorldContext="WorldContextObject")) - static void Draw_FXRMotionControllerData( - UObject* WorldContextObject, - const FXRMotionControllerData& MotionControllerData, - const FSGVirtualHandDebuggingSettings& Settings); - UFUNCTION(BlueprintCallable, DisplayName="Draw", Category="SenseGlove | Debug | Virtual Hand", meta=(WorldContext="WorldContextObject")) static void Draw_FXRHandTrackingState( diff --git a/Source/SenseGloveKismet/Private/SGKismet/SGVirtualHandComponentKismetLibrary.cpp b/Source/SenseGloveKismet/Private/SGKismet/SGVirtualHandComponentKismetLibrary.cpp index d51bd6fb..c5c83415 100644 --- a/Source/SenseGloveKismet/Private/SGKismet/SGVirtualHandComponentKismetLibrary.cpp +++ b/Source/SenseGloveKismet/Private/SGKismet/SGVirtualHandComponentKismetLibrary.cpp @@ -110,14 +110,6 @@ USGHapticGlove* UVirtualHandComponentKismetLibrary::GetConnectedGlove( return VirtualHandComponent->GetConnectedGlove(); } -const FXRMotionControllerData& UVirtualHandComponentKismetLibrary::GetMotionControllerData( - USGVirtualHandComponent* VirtualHandComponent) -{ - PRAGMA_DISABLE_DEPRECATION_WARNINGS - return VirtualHandComponent->GetMotionControllerData(); - PRAGMA_ENABLE_DEPRECATION_WARNINGS -} - const FXRHandTrackingState& UVirtualHandComponentKismetLibrary::GetHandTrackingState( USGVirtualHandComponent* VirtualHandComponent) { diff --git a/Source/SenseGloveKismet/Private/SGKismet/SGWristTrackerComponentKismetLibrary.cpp b/Source/SenseGloveKismet/Private/SGKismet/SGWristTrackerComponentKismetLibrary.cpp index 9409493a..cf563a34 100644 --- a/Source/SenseGloveKismet/Private/SGKismet/SGWristTrackerComponentKismetLibrary.cpp +++ b/Source/SenseGloveKismet/Private/SGKismet/SGWristTrackerComponentKismetLibrary.cpp @@ -90,14 +90,6 @@ const FRotator& UWristTrackerComponentKismetLibrary::GetWristRotation( return WristTrackerComponent->GetWristRotation(); } -const FXRMotionControllerData& UWristTrackerComponentKismetLibrary::GetMotionControllerData( - USGWristTrackerComponent* WristTrackerComponent) -{ - PRAGMA_DISABLE_DEPRECATION_WARNINGS - return WristTrackerComponent->GetMotionControllerData(); - PRAGMA_ENABLE_DEPRECATION_WARNINGS -} - const FXRHandTrackingState& UWristTrackerComponentKismetLibrary::GetHandTrackingState( USGWristTrackerComponent* WristTrackerComponent) { diff --git a/Source/SenseGloveKismet/Public/SGKismet/SGVirtualHandComponentKismetLibrary.h b/Source/SenseGloveKismet/Public/SGKismet/SGVirtualHandComponentKismetLibrary.h index 2533ecfa..2a11c350 100644 --- a/Source/SenseGloveKismet/Public/SGKismet/SGVirtualHandComponentKismetLibrary.h +++ b/Source/SenseGloveKismet/Public/SGKismet/SGVirtualHandComponentKismetLibrary.h @@ -102,10 +102,6 @@ public: UFUNCTION(BlueprintPure, Category="SenseGlove | Components | Virtual Hand Component") static USGHapticGlove* GetConnectedGlove(const USGVirtualHandComponent* VirtualHandComponent); - UFUNCTION(BlueprintCallable, Category="SenseGlove | Components | Virtual Hand Component") - static const FXRMotionControllerData& GetMotionControllerData( - UPARAM(ref) USGVirtualHandComponent* VirtualHandComponent); - UFUNCTION(BlueprintCallable, Category="SenseGlove | Components | Virtual Hand Component") static const FXRHandTrackingState& GetHandTrackingState( UPARAM(ref) USGVirtualHandComponent* VirtualHandComponent); diff --git a/Source/SenseGloveKismet/Public/SGKismet/SGWristTrackerComponentKismetLibrary.h b/Source/SenseGloveKismet/Public/SGKismet/SGWristTrackerComponentKismetLibrary.h index 0d02ad24..e1b4f5e7 100644 --- a/Source/SenseGloveKismet/Public/SGKismet/SGWristTrackerComponentKismetLibrary.h +++ b/Source/SenseGloveKismet/Public/SGKismet/SGWristTrackerComponentKismetLibrary.h @@ -83,10 +83,6 @@ public: UFUNCTION(BlueprintCallable, Category="SenseGlove | Components | Wrist Tracker Component") static const FRotator& GetWristRotation(const USGWristTrackerComponent* WristTrackerComponent); - UFUNCTION(BlueprintCallable, Category="SenseGlove | Components | Wrist Tracker Component") - static const FXRMotionControllerData& GetMotionControllerData( - UPARAM(ref) USGWristTrackerComponent* WristTrackerComponent); - UFUNCTION(BlueprintCallable, Category="SenseGlove | Components | Wrist Tracker Component") static const FXRHandTrackingState& GetHandTrackingState( UPARAM(ref) USGWristTrackerComponent* WristTrackerComponent); diff --git a/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp b/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp index 9a54c849..3dce390b 100644 --- a/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp +++ b/Source/SenseGloveTracking/Private/SGTracking/SGXRTracker.cpp @@ -650,6 +650,10 @@ struct FSGXRTracker::FImpl void BuildMotionSourceToKeypointMap(); +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 + void CreateHandTracker(XrSession InSession, XrHandEXT HandEXT, FSGXRHandState& HandState) const; +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ + bool CanOutputTrackingData(EControllerHand Hand) const; bool UpdateXRHandTrackingData(FSGXRHandState& OutHandState, const XrHandJointsLocateInfoEXT& LocateInfo) const; @@ -1009,231 +1013,6 @@ FTransform FSGXRTracker::FImpl::GetMeshFingerStartBoneRefTransform( return Transform; } -bool FSGXRTracker::GetMotionControllerData( - UObject* WorldContextObject, - const EControllerHand Hand, - FXRMotionControllerData& OutMotionControllerData) -{ - OutMotionControllerData.DeviceName = NAME_None; - OutMotionControllerData.ApplicationInstanceID = FApp::GetInstanceId(); - OutMotionControllerData.DeviceVisualType = EXRVisualType::Controller; - OutMotionControllerData.TrackingStatus = ETrackingStatus::NotTracked; - OutMotionControllerData.HandIndex = Hand; - OutMotionControllerData.bValid = false; - - if (!IsValid(WorldContextObject)) - { - return false; - } - - IXRTrackingSystem* XRTrackingSystem{GEngine ? GEngine->XRSystem.Get() : nullptr}; - if (!XRTrackingSystem) - { - return false; - } - -#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 4 - IOpenXRHMD* OpenXRHMD{XRTrackingSystem->GetIOpenXRHMD()}; -#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 4 */ - FOpenXRHMD* OpenXRHMD{static_cast(GEngine->XRSystem.Get())}; -#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 4 */ - if (!OpenXRHMD) - { - return false; - } - - TArray Devices; - const int32 HandIndex = static_cast(Hand); - const bool bGotDevices = - XRTrackingSystem->EnumerateTrackedDevices(Devices, EXRTrackedDeviceType::Controller); - if (bGotDevices && Devices.IsValidIndex(HandIndex)) - { - const XrSession Session{OpenXRHMD->GetSession()}; - if (Session) - { - XrInteractionProfileState Profile = {XR_TYPE_INTERACTION_PROFILE_STATE}; - const XrPath TopLevelUserPath{OpenXRHMD->GetTrackedDevicePath(Devices[HandIndex])}; - const XrResult CurrentInteractionProfile{ - xrGetCurrentInteractionProfile(Session, TopLevelUserPath, &Profile) - }; - if (XR_SUCCEEDED(CurrentInteractionProfile) && Profile.interactionProfile != XR_NULL_PATH) - { - OutMotionControllerData.DeviceName = FOpenXRPath(Profile.interactionProfile); - } - } - } - - static const FName HandTrackerName{"OpenXRHandTracking"}; - TArray HandTrackers = IModularFeatures::Get().GetModularFeatureImplementations( - IHandTracker::GetModularFeatureName()); - IHandTracker* HandTracker{nullptr}; - for (IHandTracker* HandTrackerIterator: HandTrackers) - { - if (!HandTrackerIterator) - { - continue; - } - - const FName DeviceTypeName{HandTrackerIterator->GetHandTrackerDeviceTypeName()}; - if (DeviceTypeName != HandTrackerName) - { - continue; - } - - FSGXRTracker* SGXRTracker{static_cast(HandTrackerIterator)}; - if (!SGXRTracker) - { - continue; - } - - HandTracker = SGXRTracker; - break; - } - - if (Hand == EControllerHand::Left || Hand == EControllerHand::Right) - { - static const FName MotionControllerName("OpenXR"); - TArray MotionControllers{ - IModularFeatures::Get().GetModularFeatureImplementations( - IMotionController::GetModularFeatureName()) - }; - IMotionController* MotionController{nullptr}; - for (IMotionController* MotionControllerIterator: MotionControllers) - { - if (!MotionControllerIterator) - { - continue; - } - - const FName DeviceTypeName{MotionControllerIterator->GetMotionControllerDeviceTypeName()}; - if (DeviceTypeName != MotionControllerName) - { - continue; - } - - MotionController = MotionControllerIterator; - break; - } - - const float WorldToMeters = XRTrackingSystem->GetWorldToMetersScale(); - if (MotionController) - { - const FTransform TrackingToWorld{XRTrackingSystem->GetTrackingToWorldTransform()}; - - { - const FName AimSource{Hand == EControllerHand::Left ? FName{TEXT("LeftAim")} : FName{TEXT("RightAim")}}; - FRotator AimSourceRotation; - FVector AimSourcePosition; - const bool bGotAimOrientationAndPosition = - MotionController->GetControllerOrientationAndPosition( - 0, AimSource, AimSourceRotation, AimSourcePosition, WorldToMeters); - if (bGotAimOrientationAndPosition) - { - OutMotionControllerData.AimPosition = TrackingToWorld.TransformPosition(AimSourcePosition); - OutMotionControllerData.AimRotation = - TrackingToWorld.TransformRotation(AimSourceRotation.Quaternion()); - } - OutMotionControllerData.bValid |= bGotAimOrientationAndPosition; - } - - const FName GripSource{Hand == EControllerHand::Left ? FName{TEXT("LeftGrip")} : FName{TEXT("RightGrip")}}; - { - FRotator GripRotation; - FVector GripPosition; - const bool bGotGripSourceOrientationAndPosition = - MotionController->GetControllerOrientationAndPosition( - 0, GripSource, GripRotation, GripPosition, WorldToMeters); - if (bGotGripSourceOrientationAndPosition) - { - OutMotionControllerData.GripPosition = TrackingToWorld.TransformPosition(GripPosition); - OutMotionControllerData.GripRotation = - TrackingToWorld.TransformRotation(GripRotation.Quaternion()); - } - OutMotionControllerData.bValid |= bGotGripSourceOrientationAndPosition; - } - - { - const FName PalmSource{ - Hand == EControllerHand::Left ? FName{TEXT("LeftPalm")} : FName{TEXT("RightPalm")} - }; - FRotator PalmRotation; - FVector PalmPosition; - const bool bGotPalmOrientationAndPosition = MotionController->GetControllerOrientationAndPosition( - 0, PalmSource, PalmRotation, PalmPosition, WorldToMeters); - if (bGotPalmOrientationAndPosition) - { - OutMotionControllerData.GripPosition = TrackingToWorld.TransformPosition(PalmPosition); - OutMotionControllerData.GripRotation = - TrackingToWorld.TransformRotation(PalmRotation.Quaternion()); - } - OutMotionControllerData.bValid |= bGotPalmOrientationAndPosition; - } - - OutMotionControllerData.TrackingStatus = MotionController->GetControllerTrackingStatus(0, GripSource); - } - - const bool bHandTrackingStateValid = HandTracker && HandTracker->IsHandTrackingStateValid(); - if (bHandTrackingStateValid) - { - OutMotionControllerData.DeviceVisualType = EXRVisualType::Hand; - -#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 - bool bTracked = false; -#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ - - OutMotionControllerData.bValid = HandTracker->GetAllKeypointStates( - Hand, - OutMotionControllerData.HandKeyPositions, - OutMotionControllerData.HandKeyRotations, - OutMotionControllerData.HandKeyRadii -#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 - , bTracked -#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ - ); - -#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 - // Unused! - (void) bTracked; -#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ - -#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 - // TODO - // Begin backward compatibility with the deprecated function, remove this block along with the deprecated - // GetAllKeypointStates (though it should be time to remove this entire function as well)! - if (!OutMotionControllerData.bValid) - { - PRAGMA_DISABLE_DEPRECATION_WARNINGS - OutMotionControllerData.bValid = HandTracker->GetAllKeypointStates( - Hand, - OutMotionControllerData.HandKeyPositions, - OutMotionControllerData.HandKeyRotations, - OutMotionControllerData.HandKeyRadii); - PRAGMA_ENABLE_DEPRECATION_WARNINGS - } - // End backward compability. -#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */ - - if (!ensureAlwaysMsgf( - !OutMotionControllerData.bValid - || (OutMotionControllerData.HandKeyPositions.Num() == EHandKeypointCount - && OutMotionControllerData.HandKeyRotations.Num() == EHandKeypointCount - && OutMotionControllerData.HandKeyRadii.Num() == EHandKeypointCount), - TEXT("Corrupted OutMotionControllerData!"))) - { - OutMotionControllerData.bValid = false; - return false; - } - } - } - - if (OutMotionControllerData.bValid) - { - OutMotionControllerData.TrackingStatus = ETrackingStatus::Tracked; - } - - return OutMotionControllerData.bValid; -} - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 bool FSGXRTracker::GetMotionControllerState( @@ -1478,6 +1257,7 @@ bool FSGXRTracker::GetHandTrackingState( OutHandTrackingState.HandKeyRadii, bTracked); +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7 /// TODO // Begin backward compatibility with the deprecated function, remove this block along with the deprecated // GetAllKeypointStates. @@ -1494,6 +1274,7 @@ bool FSGXRTracker::GetHandTrackingState( // The inability to distinguish this is the reason for the deprecation. } // End backward compability. +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7 */ if (!ensureAlwaysMsgf( !OutHandTrackingState.bValid @@ -1589,7 +1370,7 @@ bool FSGXRTracker::GetRequiredExtensions(TArray& OutExtensions) } } - OutExtensions.Add("XR_EXT_hand_tracking"); + OutExtensions.Add(XR_EXT_HAND_TRACKING_EXTENSION_NAME); return true; } @@ -1638,21 +1419,29 @@ const void* FSGXRTracker::OnBeginSession(const XrSession InSession, const void* // Create a hand tracker for the left hand that tracks default set of hand joints. FSGXRHandState& LeftHandState{Pimpl->GetLeftHandState()}; +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 + Pimpl->CreateHandTracker(InSession, XR_HAND_LEFT_EXT, LeftHandState); +#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ { XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT}; CreateInfo.hand = XR_HAND_LEFT_EXT; CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT; XR_ENSURE(Pimpl->XRCreateHandTrackerEXT(InSession, &CreateInfo, &LeftHandState.HandTracker)); } +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ // Create a hand tracker for the right hand that tracks default set of hand joints. FSGXRHandState& RightHandState{Pimpl->GetRightHandState()}; +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 + Pimpl->CreateHandTracker(InSession, XR_HAND_RIGHT_EXT, RightHandState); +#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ { XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT}; CreateInfo.hand = XR_HAND_RIGHT_EXT; CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT; XR_ENSURE(Pimpl->XRCreateHandTrackerEXT(InSession, &CreateInfo, &RightHandState.HandTracker)); } +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ } return InNext; @@ -2030,6 +1819,27 @@ void FSGXRTracker::FImpl::BuildMotionSourceToKeypointMap() RightHandSGMotionSourceName, FSGMotionSourceInfo(EHandKeypoint::Wrist, false)); } +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 +void FSGXRTracker::FImpl::CreateHandTracker(XrSession InSession, XrHandEXT HandEXT, FSGXRHandState& HandState) const +{ + XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT}; + CreateInfo.hand = HandEXT; + CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT; + + IOpenXRHMD* OpenXRHMD{XRTrackingSystem ? XRTrackingSystem->GetIOpenXRHMD() : nullptr}; + if (OpenXRHMD) + { + TArray ExtensionPlugins{OpenXRHMD->GetExtensionPlugins()}; + for (IOpenXRExtensionPlugin* Plugin : ExtensionPlugins) + { + CreateInfo.next = Plugin->OnCreateHandTracker(CreateInfo.next); + } + } + + XR_ENSURE(XRCreateHandTrackerEXT(InSession, &CreateInfo, &HandState.HandTracker)); +} +#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */ + bool FSGXRTracker::FImpl::CanOutputTrackingData(const EControllerHand Hand) const { const bool bFallbackToHandTrackingIfNoGloveDetected = ShouldFallbackToHandTrackingIfNoGloveDetected(); diff --git a/Source/SenseGloveTracking/Public/SGTracking/SGXRTracker.h b/Source/SenseGloveTracking/Public/SGTracking/SGXRTracker.h index a32b205b..a71bfa90 100644 --- a/Source/SenseGloveTracking/Public/SGTracking/SGXRTracker.h +++ b/Source/SenseGloveTracking/Public/SGTracking/SGXRTracker.h @@ -55,12 +55,6 @@ class SENSEGLOVETRACKING_API FSGXRTracker final : public IOpenXRExtensionPlugin, public IHandTracker { public: - UE_DEPRECATED(5.5, "Deprecated by UE 5.5 in favor of GetMotionControllerState and GetHandTrackingState") - static bool GetMotionControllerData( - UObject* WorldContextObject, - EControllerHand Hand, - FXRMotionControllerData& OutMotionControllerData); - #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 static bool GetMotionControllerState( UObject* WorldContextObject, diff --git a/Source/SenseGloveTrackingKismet/Private/SGTrackingKismet/SGXRTrackerKismetLibrary.cpp b/Source/SenseGloveTrackingKismet/Private/SGTrackingKismet/SGXRTrackerKismetLibrary.cpp index 931720ab..01fa0aae 100644 --- a/Source/SenseGloveTrackingKismet/Private/SGTrackingKismet/SGXRTrackerKismetLibrary.cpp +++ b/Source/SenseGloveTrackingKismet/Private/SGTrackingKismet/SGXRTrackerKismetLibrary.cpp @@ -39,14 +39,6 @@ #include "SGTracking/SGXRTracker.h" -bool USGXRTrackerKismetLibrary::GetMotionControllerData( - UObject* WorldContextObject, const EControllerHand Hand, FXRMotionControllerData& OutMotionControllerData) -{ - PRAGMA_DISABLE_DEPRECATION_WARNINGS - return FSGXRTracker::GetMotionControllerData(WorldContextObject, Hand, OutMotionControllerData); - PRAGMA_ENABLE_DEPRECATION_WARNINGS -} - bool USGXRTrackerKismetLibrary::GetMotionControllerState( UObject* WorldContextObject, const EXRSpaceType XRSpaceType, const EControllerHand Hand, const EXRControllerPoseType XRControllerPoseType, diff --git a/Source/SenseGloveTrackingKismet/Public/SGTrackingKismet/SGXRTrackerKismetLibrary.h b/Source/SenseGloveTrackingKismet/Public/SGTrackingKismet/SGXRTrackerKismetLibrary.h index 906159ba..4912df03 100644 --- a/Source/SenseGloveTrackingKismet/Public/SGTrackingKismet/SGXRTrackerKismetLibrary.h +++ b/Source/SenseGloveTrackingKismet/Public/SGTrackingKismet/SGXRTrackerKismetLibrary.h @@ -51,13 +51,6 @@ class SENSEGLOVETRACKINGKISMET_API USGXRTrackerKismetLibrary final : public USGB GENERATED_BODY() public: - UFUNCTION(BlueprintCallable, Category="SenseGlove | Tracking | XR Tracker", - meta=(WorldContext="WorldContextObject")) - static bool GetMotionControllerData( - UObject* WorldContextObject, - EControllerHand Hand, - FXRMotionControllerData& OutMotionControllerData); - UFUNCTION(BlueprintCallable, Category="SenseGlove | Tracking | XR Tracker", meta=(WorldContext="WorldContextObject")) static bool GetMotionControllerState(