Space Plunder
Loading...
Searching...
No Matches
FAnimNode_RecoilAnimationNode Struct Reference

#include <AnimNode_RecoilAnimationNode.h>

Inheritance diagram for FAnimNode_RecoilAnimationNode:

Public Member Functions

virtual void EvaluateSkeletalControl_AnyThread (FComponentSpacePoseContext &Output, TArray< FBoneTransform > &OutBoneTransforms) override
 
virtual bool IsValidToEvaluate (const USkeleton *Skeleton, const FBoneContainer &RequiredBones) override
 
virtual bool HasPreUpdate () const override
 
virtual void PreUpdate (const UAnimInstance *InAnimInstance) override
 

Public Attributes

FBoneReference BoneToModify
 
FVector TranslationScale = FVector::OneVector
 
FVector RotationScale = FVector::OneVector
 
TEnumAsByte< ERecoilAxesOrderAxesOrder = ERecoilAxesOrder::XYZ
 
bool bUseAutoUpdate = true
 
FVector Translation = FVector::ZeroVector
 
FRotator Rotation = FRotator::ZeroRotator
 
TEnumAsByte< enum EBoneControlSpace > TranslationSpace = BCS_BoneSpace
 
TEnumAsByte< enum EBoneControlSpace > RotationSpace = BCS_BoneSpace
 

Private Member Functions

virtual void InitializeBoneReferences (const FBoneContainer &RequiredBones) override
 
FTransform ComputeRecoilTransform ()
 

Private Attributes

bool bIsInitialized = false
 
TWeakObjectPtr< URecoilAnimationComponent > RecoilComponent
 
FTransform RecoilTransform
 

Member Function Documentation

◆ ComputeRecoilTransform()

FTransform FAnimNode_RecoilAnimationNode::ComputeRecoilTransform ( )
private
8{
9 FTransform FinalTransform = bUseAutoUpdate
11 : FTransform(Rotation.Quaternion(), Translation);
12
13 switch (AxesOrder)
14 {
15 case ERecoilAxesOrder::XZY:
16 FinalTransform.SetLocation(FVector(FinalTransform.GetLocation().X, FinalTransform.GetLocation().Z,
17 FinalTransform.GetLocation().Y));
18 FinalTransform.SetRotation(FRotator(FinalTransform.Rotator().Pitch, FinalTransform.Rotator().Roll,
19 FinalTransform.Rotator().Yaw).Quaternion());
20 break;
21 case ERecoilAxesOrder::YXZ:
22 FinalTransform.SetLocation(FVector(FinalTransform.GetLocation().Y, FinalTransform.GetLocation().X,
23 FinalTransform.GetLocation().Z));
24 FinalTransform.SetRotation(FRotator(FinalTransform.Rotator().Roll, FinalTransform.Rotator().Yaw,
25 FinalTransform.Rotator().Pitch).Quaternion());
26 break;
27 case ERecoilAxesOrder::YZX:
28 FinalTransform.SetLocation(FVector(FinalTransform.GetLocation().Y, FinalTransform.GetLocation().Z,
29 FinalTransform.GetLocation().X));
30 FinalTransform.SetRotation(FRotator(FinalTransform.Rotator().Roll, FinalTransform.Rotator().Pitch,
31 FinalTransform.Rotator().Yaw).Quaternion());
32 break;
33 case ERecoilAxesOrder::ZXY:
34 FinalTransform.SetLocation(FVector(FinalTransform.GetLocation().Z, FinalTransform.GetLocation().X,
35 FinalTransform.GetLocation().Y));
36 FinalTransform.SetRotation(FRotator(FinalTransform.Rotator().Yaw, FinalTransform.Rotator().Pitch,
37 FinalTransform.Rotator().Roll).Quaternion());
38 break;
39 case ERecoilAxesOrder::ZYX:
40 FinalTransform.SetLocation(FVector(FinalTransform.GetLocation().Z, FinalTransform.GetLocation().Y,
41 FinalTransform.GetLocation().X));
42 FinalTransform.SetRotation(FRotator(FinalTransform.Rotator().Yaw, FinalTransform.Rotator().Roll,
43 FinalTransform.Rotator().Pitch).Quaternion());
44 break;
45 default:
46 break;
47 }
48
49 return FinalTransform;
50}
FTransform RecoilTransform
Definition AnimNode_RecoilAnimationNode.h:70
bool bUseAutoUpdate
Definition AnimNode_RecoilAnimationNode.h:40
FVector Translation
Definition AnimNode_RecoilAnimationNode.h:43
TEnumAsByte< ERecoilAxesOrder > AxesOrder
Definition AnimNode_RecoilAnimationNode.h:37
FRotator Rotation
Definition AnimNode_RecoilAnimationNode.h:46

◆ EvaluateSkeletalControl_AnyThread()

void FAnimNode_RecoilAnimationNode::EvaluateSkeletalControl_AnyThread ( FComponentSpacePoseContext & Output,
TArray< FBoneTransform > & OutBoneTransforms )
overridevirtual
79{
80 DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(EvaluateSkeletalControl_AnyThread)
81 check(OutBoneTransforms.Num() == 0);
82
83 const FBoneContainer& BoneContainer = Output.Pose.GetPose().GetBoneContainer();
84
85 FCompactPoseBoneIndex CompactPoseBoneToModify = BoneToModify.GetCompactPoseIndex(BoneContainer);
86 FTransform NewBoneTM = Output.Pose.GetComponentSpaceTransform(CompactPoseBoneToModify);
87 FTransform ComponentTransform = Output.AnimInstanceProxy->GetComponentTransform();
88
89 FAnimationRuntime::ConvertCSTransformToBoneSpace(ComponentTransform, Output.Pose, NewBoneTM,
90 CompactPoseBoneToModify, RotationSpace);
91
92 FTransform FinalTransform = ComputeRecoilTransform();
93
94 FVector FinalPosition = FinalTransform.GetTranslation();
95 FRotator FinalRotation = FinalTransform.Rotator();
96
97 FinalPosition.X *= TranslationScale.X;
98 FinalPosition.Y *= TranslationScale.Y;
99 FinalPosition.Z *= TranslationScale.Z;
100
101 FinalRotation.Pitch *= RotationScale.Y;
102 FinalRotation.Yaw *= RotationScale.Z;
103 FinalRotation.Roll *= RotationScale.X;
104
105 FinalTransform.SetTranslation(FinalPosition);
106 FinalTransform.SetRotation(FinalRotation.Quaternion());
107
108 const FQuat BoneQuat = FinalTransform.GetRotation();
109
110 NewBoneTM.SetRotation(BoneQuat * NewBoneTM.GetRotation());
111
112 FAnimationRuntime::ConvertBoneSpaceTransformToCS(ComponentTransform, Output.Pose, NewBoneTM,
113 CompactPoseBoneToModify, RotationSpace);
114
115 FAnimationRuntime::ConvertCSTransformToBoneSpace(ComponentTransform, Output.Pose, NewBoneTM,
116 CompactPoseBoneToModify, TranslationSpace);
117
118 NewBoneTM.AddToTranslation(FinalTransform.GetTranslation());
119
120
121 FAnimationRuntime::ConvertBoneSpaceTransformToCS(ComponentTransform, Output.Pose, NewBoneTM,
122 CompactPoseBoneToModify, TranslationSpace);
123
124
125 OutBoneTransforms.Add(FBoneTransform(BoneToModify.GetCompactPoseIndex(BoneContainer), NewBoneTM));
126
127 TRACE_ANIM_NODE_VALUE(Output, TEXT("Target"), BoneToModify.BoneName);
128}
FBoneReference BoneToModify
Definition AnimNode_RecoilAnimationNode.h:28
TEnumAsByte< enum EBoneControlSpace > TranslationSpace
Definition AnimNode_RecoilAnimationNode.h:49
FVector TranslationScale
Definition AnimNode_RecoilAnimationNode.h:31
virtual void EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext &Output, TArray< FBoneTransform > &OutBoneTransforms) override
Definition AnimNode_RecoilAnimationNode.cpp:77
FVector RotationScale
Definition AnimNode_RecoilAnimationNode.h:34
TEnumAsByte< enum EBoneControlSpace > RotationSpace
Definition AnimNode_RecoilAnimationNode.h:52
FTransform ComputeRecoilTransform()
Definition AnimNode_RecoilAnimationNode.cpp:7

◆ HasPreUpdate()

virtual bool FAnimNode_RecoilAnimationNode::HasPreUpdate ( ) const
inlineoverridevirtual
58{ return bUseAutoUpdate; }

◆ InitializeBoneReferences()

void FAnimNode_RecoilAnimationNode::InitializeBoneReferences ( const FBoneContainer & RequiredBones)
overrideprivatevirtual
136{
137 DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(InitializeBoneReferences)
138 BoneToModify.Initialize(RequiredBones);
139}
virtual void InitializeBoneReferences(const FBoneContainer &RequiredBones) override
Definition AnimNode_RecoilAnimationNode.cpp:135

◆ IsValidToEvaluate()

bool FAnimNode_RecoilAnimationNode::IsValidToEvaluate ( const USkeleton * Skeleton,
const FBoneContainer & RequiredBones )
overridevirtual
131{
132 return (BoneToModify.IsValidToEvaluate(RequiredBones));
133}

◆ PreUpdate()

void FAnimNode_RecoilAnimationNode::PreUpdate ( const UAnimInstance * InAnimInstance)
overridevirtual
53{
54 if (!bIsInitialized)
55 {
56 if (auto Owner = InAnimInstance->GetOwningActor())
57 {
58 if (!Owner->HasActorBegunPlay())
59 {
60 return;
61 }
62
63 if (auto Component = Owner->FindComponentByClass<URecoilAnimationComponent>())
64 {
65 RecoilComponent = Component;
66 }
67 }
68
69 bIsInitialized = true;
70 }
71 if (RecoilComponent.IsValid())
72 {
73 RecoilTransform = RecoilComponent->GetOutput();
74 }
75}
TWeakObjectPtr< URecoilAnimationComponent > RecoilComponent
Definition AnimNode_RecoilAnimationNode.h:69
bool bIsInitialized
Definition AnimNode_RecoilAnimationNode.h:67

Member Data Documentation

◆ AxesOrder

TEnumAsByte<ERecoilAxesOrder> FAnimNode_RecoilAnimationNode::AxesOrder = ERecoilAxesOrder::XYZ

◆ bIsInitialized

bool FAnimNode_RecoilAnimationNode::bIsInitialized = false
private

◆ BoneToModify

FBoneReference FAnimNode_RecoilAnimationNode::BoneToModify

◆ bUseAutoUpdate

bool FAnimNode_RecoilAnimationNode::bUseAutoUpdate = true

◆ RecoilComponent

TWeakObjectPtr<URecoilAnimationComponent> FAnimNode_RecoilAnimationNode::RecoilComponent
private

◆ RecoilTransform

FTransform FAnimNode_RecoilAnimationNode::RecoilTransform
private

◆ Rotation

FRotator FAnimNode_RecoilAnimationNode::Rotation = FRotator::ZeroRotator

◆ RotationScale

FVector FAnimNode_RecoilAnimationNode::RotationScale = FVector::OneVector

◆ RotationSpace

TEnumAsByte<enum EBoneControlSpace> FAnimNode_RecoilAnimationNode::RotationSpace = BCS_BoneSpace

◆ Translation

FVector FAnimNode_RecoilAnimationNode::Translation = FVector::ZeroVector

◆ TranslationScale

FVector FAnimNode_RecoilAnimationNode::TranslationScale = FVector::OneVector

◆ TranslationSpace

TEnumAsByte<enum EBoneControlSpace> FAnimNode_RecoilAnimationNode::TranslationSpace = BCS_BoneSpace

The documentation for this struct was generated from the following files: