Plasma Engine  2.0
Loading...
Searching...
No Matches
AnimController.h
1#pragma once
2
3#include <RendererCore/RendererCoreDLL.h>
4
5#include <Core/Utils/Blackboard.h>
6#include <Foundation/Containers/DynamicArray.h>
7#include <Foundation/Containers/HashTable.h>
8#include <Foundation/Memory/AllocatorWrapper.h>
9#include <Foundation/Types/Delegate.h>
10#include <Foundation/Types/SharedPtr.h>
11#include <Foundation/Types/UniquePtr.h>
12#include <RendererCore/AnimationSystem/AnimGraph/AnimGraphNode.h>
13#include <RendererCore/AnimationSystem/AnimPoseGenerator.h>
14
15class plGameObject;
16class plAnimGraph;
17
20
21PL_DEFINE_AS_POD_TYPE(ozz::math::SimdFloat4);
22
24{
25 plUInt16 m_uiOwnIndex = 0xFFFF;
26 float m_fOverallWeight = 1.0f;
27 const plAnimGraphSharedBoneWeights* m_pSharedBoneWeights = nullptr;
28};
29
31{
32 plUInt16 m_uiOwnIndex = 0xFFFF;
33 plAnimPoseGeneratorCommandID m_CommandID;
34 const plAnimGraphPinDataBoneWeights* m_pWeights = nullptr;
35 float m_fOverallWeight = 1.0f;
36 plVec3 m_vRootMotion = plVec3::MakeZero();
37 bool m_bUseRootMotion = false;
38};
39
41{
42 plUInt16 m_uiOwnIndex = 0xFFFF;
43 plAnimPoseGeneratorCommandID m_CommandID;
44 plVec3 m_vRootMotion = plVec3::MakeZero();
45 plAngle m_RootRotationX;
46 plAngle m_RootRotationY;
47 plAngle m_RootRotationZ;
48 bool m_bUseRootMotion = false;
49};
50
51class PL_RENDERERCORE_DLL plAnimController
52{
53 PL_DISALLOW_COPY_AND_ASSIGN(plAnimController);
54
55public:
58
59 void Initialize(const plSkeletonResourceHandle& hSkeleton, plAnimPoseGenerator& ref_poseGenerator, const plSharedPtr<plBlackboard>& pBlackboard = nullptr);
60
61 void Update(plTime diff, plGameObject* pTarget);
62
63 void GetRootMotion(plVec3& ref_vTranslation, plAngle& ref_rotationX, plAngle& ref_rotationY, plAngle& ref_rotationZ) const;
64
65 const plSharedPtr<plBlackboard>& GetBlackboard() { return m_pBlackboard; }
66
67 plAnimPoseGenerator& GetPoseGenerator() { return *m_pPoseGenerator; }
68
69 static plSharedPtr<plAnimGraphSharedBoneWeights> CreateBoneWeights(const char* szUniqueName, const plSkeletonResource& skeleton, plDelegate<void(plAnimGraphSharedBoneWeights&)> fill);
70
71 void SetOutputModelTransform(plAnimGraphPinDataModelTransforms* pModelTransform);
72 void SetRootMotion(const plVec3& vTranslation, plAngle rotationX, plAngle rotationY, plAngle rotationZ);
73
74 void AddOutputLocalTransforms(plAnimGraphPinDataLocalTransforms* pLocalTransforms);
75
76 plAnimGraphPinDataBoneWeights* AddPinDataBoneWeights();
77 plAnimGraphPinDataLocalTransforms* AddPinDataLocalTransforms();
78 plAnimGraphPinDataModelTransforms* AddPinDataModelTransforms();
79
80 void AddAnimGraph(const plAnimGraphResourceHandle& hGraph);
81 // TODO void RemoveAnimGraph(const plAnimGraphResource& hGraph);
82
84 {
86 };
87
88 const AnimClipInfo& GetAnimationClipInfo(plTempHashedString sClipName) const;
89
90private:
91 void GenerateLocalResultProcessors(const plSkeletonResource* pSkeleton);
92
93 plSkeletonResourceHandle m_hSkeleton;
94 plAnimGraphPinDataModelTransforms* m_pCurrentModelTransforms = nullptr;
95
96 plVec3 m_vRootMotion = plVec3::MakeZero();
97 plAngle m_RootRotationX;
98 plAngle m_RootRotationY;
99 plAngle m_RootRotationZ;
100
102
103 plAnimPoseGenerator* m_pPoseGenerator = nullptr;
104 plSharedPtr<plBlackboard> m_pBlackboard = nullptr;
105
106 plHybridArray<plUInt32, 8> m_CurrentLocalTransformOutputs;
107
108 static plMutex s_SharedDataMutex;
110
111 struct GraphInstance
112 {
113 plAnimGraphResourceHandle m_hAnimGraph;
115 };
116
118
119 AnimClipInfo m_InvalidClipInfo;
120 plHashTable<plHashedString, AnimClipInfo> m_AnimationClipMapping;
121
122private:
123 friend class plAnimGraphTriggerOutputPin;
124 friend class plAnimGraphTriggerInputPin;
127 friend class plAnimGraphLocalPoseInputPin;
129 friend class plAnimGraphModelPoseInputPin;
132 friend class plAnimGraphNumberInputPin;
133 friend class plAnimGraphNumberOutputPin;
134 friend class plAnimGraphBoolInputPin;
135 friend class plAnimGraphBoolOutputPin;
136
140};
Float wrapper struct for a safe usage and conversions of angles.
Definition Angle.h:10
Definition AnimController.h:52
Definition AnimGraphPins.h:152
Definition AnimGraphPins.h:162
Definition AnimGraphPins.h:130
Definition AnimGraphPins.h:140
Definition AnimGraph.h:11
Definition AnimGraphPins.h:174
Definition AnimGraphPins.h:184
Definition AnimGraphPins.h:194
Definition AnimGraphPins.h:206
Definition AnimGraphPins.h:216
Definition AnimGraphPins.h:108
Definition AnimGraphPins.h:118
Definition AnimGraphPins.h:81
Definition AnimGraphPins.h:92
Definition AnimPoseGenerator.h:194
Definition DynamicArray.h:81
This class represents an object inside the world.
Definition GameObject.h:32
Definition HashTable.h:333
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Provides a simple mechanism for mutual exclusion to prevent multiple threads from accessing a shared ...
Definition Mutex.h:13
A Shared ptr manages a shared object and destroys that object when no one references it anymore....
Definition SharedPtr.h:10
Definition SkeletonResource.h:47
A class to use together with plHashedString for quick comparisons with temporary strings that need no...
Definition HashedString.h:151
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
static plVec3Template< float > MakeZero()
Definition Vec3.h:38
Definition AnimController.h:84
Definition AnimController.h:24
Definition AnimController.h:31
Definition AnimController.h:41
Definition AnimGraphPins.h:20
A generic delegate class which supports static functions and member functions.
Definition Delegate.h:76
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12