// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "CoreMinimal.h" #include "Features/IModularFeature.h" #include "Math/Quat.h" #include "Math/Transform.h" #include "Math/UnrealMathSSE.h" #include "UObject/NameTypes.h" enum class EControllerHand : uint8; enum class EHandKeypoint : uint8; /** */ class IHandTracker : public IModularFeature { public: static FName GetModularFeatureName() { static FName FeatureName = FName(TEXT("HandTracker")); return FeatureName; } /** * Returns the device type of the controller. * * @return Device type of the controller. */ virtual FName GetHandTrackerDeviceTypeName() const = 0; /** * Returns true if hand tracking is available and tracking. * * @return true/false */ virtual bool IsHandTrackingStateValid() const = 0; /** * Get the transform and radius (or 0 if radius is not available on this platform) for the given hand keypoint. * * @return true if data was fetched */ virtual bool GetKeypointState(EControllerHand Hand, EHandKeypoint Keypoint, FTransform& OutTransform, float& OutRadius) const = 0; UE_DEPRECATED(5.5, "Deprecated in favor of the version that explicitly returns OutIsTracked") virtual bool GetAllKeypointStates(EControllerHand Hand, TArray&OutPositions, TArray&OutRotations, TArray&OutRadii) const { return false; } // No longer pure virtual so that it can be removed. virtual bool GetAllKeypointStates(EControllerHand Hand, TArray& OutPositions, TArray& OutRotations, TArray& OutRadii, bool& OutIsTracked) const { return false; }; // This will be made pure virtual when the deprecated function is removed. virtual bool HasHandMeshData() const { return false; } virtual bool GetHandMeshData(EControllerHand Hand, TArray& OutVertices, TArray& OutNormals, TArray& OutIndices, FTransform& OutHandMeshTransform) const { return false; } };