101 lines
3.4 KiB
C++
101 lines
3.4 KiB
C++
// @lint-ignore-every LICENSELINT
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
#include "OculusXRInputFunctionLibrary.h"
|
|
#include "Components/PoseableMeshComponent.h"
|
|
#include "OculusXRHandComponent.generated.h"
|
|
|
|
UENUM(BlueprintType)
|
|
enum class EOculusXRConfidenceBehavior : uint8
|
|
{
|
|
None,
|
|
HideActor
|
|
};
|
|
|
|
UENUM(BlueprintType)
|
|
enum class EOculusXRSystemGestureBehavior : uint8
|
|
{
|
|
None,
|
|
SwapMaterial
|
|
};
|
|
|
|
static const FQuat HandRootFixupRotation = FQuat(-0.5f, -0.5f, 0.5f, 0.5f);
|
|
|
|
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = OculusHand)
|
|
class OCULUSXRINPUT_API UOculusXRHandComponent : public UPoseableMeshComponent
|
|
{
|
|
GENERATED_UCLASS_BODY()
|
|
|
|
public:
|
|
virtual void BeginPlay() override;
|
|
|
|
virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
|
|
|
/** The hand skeleton that will be loaded */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
EOculusXRHandType SkeletonType;
|
|
|
|
/** The hand mesh that will be applied to the skeleton */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
EOculusXRHandType MeshType;
|
|
|
|
/** Behavior for when hand tracking loses high confidence tracking */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
EOculusXRConfidenceBehavior ConfidenceBehavior = EOculusXRConfidenceBehavior::HideActor;
|
|
|
|
/** Behavior for when the system gesture is actived */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
EOculusXRSystemGestureBehavior SystemGestureBehavior = EOculusXRSystemGestureBehavior::SwapMaterial;
|
|
|
|
/** Material that gets applied to the hands when the system gesture is active */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
class UMaterialInterface* SystemGestureMaterial;
|
|
|
|
/** Whether or not to initialize physics capsules on the skeletal mesh */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
bool bInitializePhysics;
|
|
|
|
/** Whether or not the hand scale should update based on values from the runtime to match the users hand scale */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
bool bUpdateHandScale;
|
|
|
|
/** Material override for the runtime skeletal mesh */
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "HandProperties")
|
|
class UMaterialInterface* MaterialOverride;
|
|
|
|
/** Bone mapping for custom hand skeletal meshes */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CustomSkeletalMesh")
|
|
TMap<EOculusXRBone, FName> BoneNameMappings;
|
|
|
|
/** List of capsule colliders created for the skeletal mesh */
|
|
UPROPERTY(BlueprintReadOnly, Category = "HandProperties")
|
|
TArray<FOculusXRCapsuleCollider> CollisionCapsules;
|
|
|
|
/** Whether or not the runtime skeletal mesh has been loaded and initialized */
|
|
UPROPERTY(BlueprintReadOnly, Category = "HandProperties")
|
|
bool bSkeletalMeshInitialized = false;
|
|
|
|
protected:
|
|
virtual void SystemGesturePressed();
|
|
virtual void SystemGestureReleased();
|
|
|
|
private:
|
|
/** Whether or not this component has authority within the frame */
|
|
bool bHasAuthority;
|
|
|
|
/** Whether or not a custom hand mesh is being used */
|
|
bool bCustomHandMesh = false;
|
|
|
|
/** Whether or not the physics capsules have been initialized */
|
|
bool bInitializedPhysics = false;
|
|
|
|
USkeletalMesh* RuntimeSkeletalMesh;
|
|
|
|
UMaterialInterface* CachedBaseMaterial;
|
|
|
|
void InitializeSkeletalMesh();
|
|
|
|
void UpdateBonePose();
|
|
};
|