UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimNode_Mirror.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
9#include "AnimNode_Mirror.generated.h"
10
11USTRUCT(BlueprintInternalUseOnly)
13{
15public:
19
20 ANIMGRAPHRUNTIME_API virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;
21 ANIMGRAPHRUNTIME_API virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override;
22 ANIMGRAPHRUNTIME_API virtual void Update_AnyThread(const FAnimationUpdateContext& Context) override;
23 ANIMGRAPHRUNTIME_API virtual void Evaluate_AnyThread(FPoseContext& Output) override;
24 ANIMGRAPHRUNTIME_API virtual void GatherDebugData(FNodeDebugData& DebugData) override;
25
26 // Get the MirrorDataTable
27 ANIMGRAPHRUNTIME_API virtual UMirrorDataTable* GetMirrorDataTable() const;
28
29 // Set the MirrorDataTable
30 ANIMGRAPHRUNTIME_API virtual bool SetMirrorDataTable(UMirrorDataTable* MirrorTable);
31
32 // Get Mirror State
33 ANIMGRAPHRUNTIME_API virtual bool GetMirror() const;
34 // How long to blend using inertialization when switching mirrored state
35 ANIMGRAPHRUNTIME_API virtual float GetBlendTimeOnMirrorStateChange() const;
36
37 // Should bones mirror
38 ANIMGRAPHRUNTIME_API virtual bool GetBoneMirroring() const;
39
40 // Should the curves mirror
41 ANIMGRAPHRUNTIME_API virtual bool GetCurveMirroring() const;
42
43 // Should attributes mirror (based on the bone mirroring data in the mirror data table)
44 ANIMGRAPHRUNTIME_API virtual bool GetAttributeMirroring() const;
45
46 // Whether to reset (reinitialize) the child (source) pose when the mirror state changes
47 ANIMGRAPHRUNTIME_API virtual bool GetResetChildOnMirrorStateChange() const;
48
49 // Set Mirror State
50 ANIMGRAPHRUNTIME_API virtual bool SetMirror(bool bInMirror);
51
52 // Set how long to blend using inertialization when switching mirrored state
53 // @return true if the value was set (it is dynamic), or false if it could not (it is not dynamic or pin exposed)
54 ANIMGRAPHRUNTIME_API virtual bool SetBlendTimeOnMirrorStateChange(float InBlendTime);
55
56 // Set if bones mirror
57 // @return true if the value was set (it is dynamic), or false if it could not (it is not dynamic or pin exposed)
58 ANIMGRAPHRUNTIME_API virtual bool SetBoneMirroring(bool bInBoneMirroring);
59
60 // Set if curves mirror
61 // @return true if the value was set (it is dynamic), or false if it could not (it is not dynamic or pin exposed)
62 ANIMGRAPHRUNTIME_API virtual bool SetCurveMirroring(bool bInCurveMirroring);
63
64 // Set if attributes mirror
65 // @return true if the value was set (it is dynamic), or false if it could not (it is not dynamic or pin exposed)
66 ANIMGRAPHRUNTIME_API virtual bool SetAttributeMirroring(bool bInAttributeMirroring);
67
68 // Set whether to reset (reinitialize) the child (source) pose when the mirror state changes
69 // @return true if the value was set (it is dynamic), or false if it could not (it is not dynamic or pin exposed)
70 ANIMGRAPHRUNTIME_API virtual bool SetResetChildOnMirrorStateChange(bool bInResetChildOnMirrorStateChange);
71
73 ANIMGRAPHRUNTIME_API virtual void SetSourceLinkNode(FAnimNode_Base* NewLinkNode);
74
76 ANIMGRAPHRUNTIME_API virtual FAnimNode_Base* GetSourceLinkNode();
77protected:
78 UPROPERTY(EditAnywhere, Category = Links)
79 FPoseLink Source;
80
82 bool bMirrorState;
83 bool bMirrorStateIsValid;
84
85 void FillCompactPoseAndComponentRefRotations(const FBoneContainer& BoneContainer);
86 // Compact pose format of Mirror Bone Map
88
89 // Pre-calculated component space of reference pose, which allows mirror to work with any joint orient
90 TCustomBoneIndexArray<FQuat, FCompactPoseBoneIndex> ComponentSpaceRefRotations;
91};
92
93
94USTRUCT(BlueprintInternalUseOnly)
96{
98
99 friend class UAnimGraphNode_Mirror;
100
101public:
104
105 ANIMGRAPHRUNTIME_API virtual UMirrorDataTable* GetMirrorDataTable() const override;
106 ANIMGRAPHRUNTIME_API virtual bool SetMirrorDataTable(UMirrorDataTable* MirrorTable) override;
107
108 ANIMGRAPHRUNTIME_API virtual bool GetMirror() const override;
109 ANIMGRAPHRUNTIME_API virtual float GetBlendTimeOnMirrorStateChange() const override;
110 ANIMGRAPHRUNTIME_API virtual bool GetBoneMirroring() const override;
111 ANIMGRAPHRUNTIME_API virtual bool GetCurveMirroring() const override;
112 ANIMGRAPHRUNTIME_API virtual bool GetAttributeMirroring() const override;
113 ANIMGRAPHRUNTIME_API virtual bool GetResetChildOnMirrorStateChange() const override;
114
115 ANIMGRAPHRUNTIME_API virtual bool SetMirror(bool bInMirror) override;
116 ANIMGRAPHRUNTIME_API virtual bool SetBlendTimeOnMirrorStateChange(float InBlendTime) override;
117 ANIMGRAPHRUNTIME_API virtual bool SetBoneMirroring(bool bInBoneMirroring) override;
118 ANIMGRAPHRUNTIME_API virtual bool SetCurveMirroring(bool bInCurveMirroring) override;
119 ANIMGRAPHRUNTIME_API virtual bool SetAttributeMirroring(bool bInAttributeMirroring) override;
120 ANIMGRAPHRUNTIME_API virtual bool SetResetChildOnMirrorStateChange(bool bInResetChildOnMirrorStateChange) override;
121
123
124#if WITH_EDITORONLY_DATA
125 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinShownByDefault, FoldProperty))
126 bool bMirror = true;
127
128 UPROPERTY(EditAnywhere, Category = Settings, meta = (FoldProperty))
129 TObjectPtr<UMirrorDataTable> MirrorDataTable = nullptr;
130
131 // Inertialization blend time to use when transitioning between mirrored and unmirrored states
132 UPROPERTY(EditAnywhere, Category = MirrorTransition, meta = (PinHiddenByDefault, FoldProperty))
133 float BlendTime = 0.0f;
134 // Whether to reset (reinitialize) the child (source) pose when the mirror state changes
135 UPROPERTY(EditAnywhere, Category = MirrorTransition, meta = (FoldProperty))
136 bool bResetChild = false;
137
138 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta=(DisplayName="Bone", FoldProperty))
139 bool bBoneMirroring = true;
140
141 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta=(DisplayName = "Curve", FoldProperty))
142 bool bCurveMirroring = true;
143
144 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta=(DisplayName = "Attributes", FoldProperty))
145 bool bAttributeMirroring = true;
146#endif
147};
148
149
150USTRUCT(BlueprintInternalUseOnly)
152{
154
155 friend class UAnimGraphNode_Mirror;
156
157public:
161
162 ANIMGRAPHRUNTIME_API virtual UMirrorDataTable* GetMirrorDataTable() const override;
163 ANIMGRAPHRUNTIME_API virtual bool SetMirrorDataTable(UMirrorDataTable* MirrorTable) override;
164
165 ANIMGRAPHRUNTIME_API virtual bool GetMirror() const override;
166 ANIMGRAPHRUNTIME_API virtual float GetBlendTimeOnMirrorStateChange() const override;
167 ANIMGRAPHRUNTIME_API virtual bool GetBoneMirroring() const override;
168 ANIMGRAPHRUNTIME_API virtual bool GetCurveMirroring() const override;
169 ANIMGRAPHRUNTIME_API virtual bool GetAttributeMirroring() const override;
170 ANIMGRAPHRUNTIME_API virtual bool GetResetChildOnMirrorStateChange() const override;
171
172 ANIMGRAPHRUNTIME_API virtual bool SetMirror(bool bInMirror) override;
173 ANIMGRAPHRUNTIME_API virtual bool SetBlendTimeOnMirrorStateChange(float InBlendTime) override;
174 ANIMGRAPHRUNTIME_API virtual bool SetBoneMirroring(bool bInBoneMirroring) override;
175 ANIMGRAPHRUNTIME_API virtual bool SetCurveMirroring(bool bInCurveMirroring) override;
176 ANIMGRAPHRUNTIME_API virtual bool SetAttributeMirroring(bool bInAttributeMirroring) override;
177 ANIMGRAPHRUNTIME_API virtual bool SetResetChildOnMirrorStateChange(bool bInResetChildOnMirrorStateChange) override;
178
180
181 UPROPERTY(EditAnywhere, Category = Settings, meta = (PinShownByDefault))
182 bool bMirror = true;
183
184 UPROPERTY(EditAnywhere, Category = Settings)
185 TObjectPtr<UMirrorDataTable> MirrorDataTable = nullptr;
186
187 // Inertialization blend time to use when transitioning between mirrored and unmirrored states
188 UPROPERTY(EditAnywhere, Category = MirrorTransition, meta = (PinHiddenByDefault, FoldProperty))
189 float BlendTime = 0.0f;
190
191 // Whether to reset (reinitialize) the child (source) pose when the mirror state changes
192 UPROPERTY(EditAnywhere, Category = MirrorTransition, meta = (FoldProperty))
193 bool bResetChild = false;
194
195 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta = (DisplayName = "Bone", FoldProperty))
196 bool bBoneMirroring = true;
197
198 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta = (DisplayName = "Curve", FoldProperty))
199 bool bCurveMirroring = true;
200
201 UPROPERTY(EditAnywhere, Category = MirroredChannels, meta = (DisplayName = "Attributes", FoldProperty))
202 bool bAttributeMirroring = true;
203};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
Definition CustomBoneIndexArray.h:43
Definition MirrorDataTable.h:102
@ false
Definition radaudio_common.h:23
Definition AnimNodeBase.h:853
Definition AnimNode_Mirror.h:13
ANIMGRAPHRUNTIME_API FAnimNode_MirrorBase(const FAnimNode_MirrorBase &)
ANIMGRAPHRUNTIME_API ~FAnimNode_MirrorBase()
Definition AnimNode_Mirror.h:152
Definition AnimNode_Mirror.h:96
Definition AnimNodeBase.h:337
Definition AnimNodeBase.h:324
Definition AnimNodeBase.h:354
Definition BoneContainer.h:192
Definition BoneIndices.h:63
Definition AnimNodeBase.h:642
Definition AnimNodeBase.h:479
Definition ObjectPtr.h:488