A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
AnimNode_ApplyOpenXRHandPose.h
Go to the documentation of this file.
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4#include "CoreMinimal.h"
5#include "Runtime/AnimGraphRuntime/Public/BoneControllers/AnimNode_SkeletalControlBase.h"
7//#include "Skeleton/BodyStateSkeleton.h"
8//#include "BodyStateAnimInstance.h"
9
10#include "AnimNode_ApplyOpenXRHandPose.generated.h"
11
12
13USTRUCT()
14struct OPENXREXPANSIONPLUGIN_API FAnimNode_ApplyOpenXRHandPose : public FAnimNode_SkeletalControlBase
15{
16 GENERATED_USTRUCT_BODY()
17
18public:
19
20 // Generally used when not passing in custom bone mappings, defines the auto mapping style
21 UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
22 EVROpenXRSkeletonType SkeletonType;
23
24 // If your hand is part of a full body or arm skeleton and you don't have a proxy bone to retain the position enable this
25 UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
26 bool bSkipRootBone;
28 // If you only want to use the wrist transform part of this
29 // This will also automatically add the deform to the wrist as it doesn't make much sense without it
30 UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
31 bool bOnlyApplyWristTransform;
32
33 // Generally used when not passing in custom bone mappings, defines the auto mapping style
34 UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
35 FBPOpenXRActionSkeletalData OptionalStoredActionInfo;
36
37 // MappedBonePairs, if you leave it blank then they will auto generate based off of the SkeletonType
38 // Otherwise, fill out yourself.
39 UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinHiddenByDefault))
40 FBPOpenXRSkeletalMappingData MappedBonePairs;
41
42 bool bIsOpenInputAnimationInstance;
43
44 void ConvertHandTransformsSpace(TArray<FTransform>& OutTransforms, TArray<FTransform>& WorldTransforms, FTransform AddTrans, bool bMirrorLeftRight, bool bMergeMissingUE4Bones);
45
46 FTransform GetRefBoneInCS(TArray<FTransform>& RefBones, TArray<FMeshBoneInfo>& RefBonesInfo, int32 BoneIndex)
47 {
48 FTransform BoneTransform;
50 if (BoneIndex >= 0)
51 {
52 BoneTransform = RefBones[BoneIndex];
53 if (RefBonesInfo[BoneIndex].ParentIndex >= 0)
54 {
55 BoneTransform *= GetRefBoneInCS(RefBones, RefBonesInfo, RefBonesInfo[BoneIndex].ParentIndex);
56 }
57 }
58
59 return BoneTransform;
60 }
61
62 void SetVectorToMaxElement(FVector& vec)
63 {
64 float aX = FMath::Abs(vec.X);
65 float aY = FMath::Abs(vec.Y);
66
67 if (aY < aX)
68 {
69 vec.Y = 0.f;
70 if (FMath::Abs(vec.Z) < aX)
71 vec.Z = 0.f;
72 else
73 vec.X = 0.f;
74 }
75 else
76 {
77 vec.X = 0.f;
78 if (FMath::Abs(vec.Z) < aY)
79 vec.Z = 0;
80 else
81 vec.Y = 0;
82 }
83 }
84
85 // FAnimNode_SkeletalControlBase interface
86 //virtual void UpdateInternal(const FAnimationUpdateContext& Context) override;
87 virtual void EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext& Output, TArray<FBoneTransform>& OutBoneTransforms) override;
88 virtual bool IsValidToEvaluate(const USkeleton* Skeleton, const FBoneContainer& RequiredBones) override;
89 // End of FAnimNode_SkeletalControlBase interface
90 virtual void OnInitializeAnimInstance(const FAnimInstanceProxy* InProxy, const UAnimInstance* InAnimInstance) override;
91 virtual bool NeedsOnInitializeAnimInstance() const override { return true; }
92 virtual void InitializeBoneReferences(const FBoneContainer& RequiredBones) override;
93
94 virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;
95 virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override;
96
97 // Constructor
99
100protected:
101 bool WorldIsGame;
102 AActor* OwningActor;
103
104private:
105};
EVROpenXRSkeletonType
UENUM(BlueprintType)
FTransform GetRefBoneInCS(TArray< FTransform > &RefBones, TArray< FMeshBoneInfo > &RefBonesInfo, int32 BoneIndex)
bool bSkipRootBone
UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
bool bOnlyApplyWristTransform
UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
EVROpenXRSkeletonType SkeletonType
UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
FBPOpenXRSkeletalMappingData MappedBonePairs
UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinHiddenByDefault))
virtual bool NeedsOnInitializeAnimInstance() const override
FBPOpenXRActionSkeletalData OptionalStoredActionInfo
UPROPERTY(EditAnywhere, Category = Skeletal, meta = (PinShownByDefault))
USTRUCT(BlueprintType, Category = "VRExpansionFunctions|OpenXR|HandSkeleton")
USTRUCT(BlueprintType, Category = "VRExpansionFunctions|SteamVR|HandSkeleton")