Plasma Engine  2.0
Loading...
Searching...
No Matches
AnimGraphPins.h
1#pragma once
2
3#include <RendererCore/RendererCoreDLL.h>
4
5#include <Foundation/Containers/DynamicArray.h>
6#include <Foundation/Reflection/Reflection.h>
7
8#include <Foundation/Types/RefCounted.h>
9#include <ozz/base/maths/soa_transform.h>
10
13class plStreamWriter;
14class plStreamReader;
18
23
24using plAnimPoseGeneratorLocalPoseID = plUInt32;
25using plAnimPoseGeneratorModelPoseID = plUInt32;
26using plAnimPoseGeneratorCommandID = plUInt32;
27
28class PL_RENDERERCORE_DLL plAnimGraphPin : public plReflectedClass
29{
30 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphPin, plReflectedClass);
31
32public:
33 enum Type : plUInt8
34 {
35 Invalid,
36 Trigger,
37 Number,
38 Bool,
39 BoneWeights,
40 LocalPose,
41 ModelPose,
42 // EXTEND THIS if a new type is introduced
43
44 ENUM_COUNT
45 };
46
47 bool IsConnected() const
48 {
49 return m_iPinIndex != -1;
50 }
51
52 virtual plAnimGraphPin::Type GetPinType() const = 0;
53
54 plResult Serialize(plStreamWriter& inout_stream) const;
55 plResult Deserialize(plStreamReader& inout_stream);
56
57protected:
58 friend class plAnimGraph;
59
60 plInt16 m_iPinIndex = -1;
61 plUInt8 m_uiNumConnections = 0;
62};
63
64class PL_RENDERERCORE_DLL plAnimGraphInputPin : public plAnimGraphPin
65{
66 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphInputPin, plAnimGraphPin);
67
68public:
69};
70
71class PL_RENDERERCORE_DLL plAnimGraphOutputPin : public plAnimGraphPin
72{
73 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphOutputPin, plAnimGraphPin);
74
75public:
76};
77
79
80class PL_RENDERERCORE_DLL plAnimGraphTriggerInputPin : public plAnimGraphInputPin
81{
82 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphTriggerInputPin, plAnimGraphInputPin);
83
84public:
85 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Trigger; }
86
87 bool IsTriggered(plAnimGraphInstance& ref_graph) const;
88 bool AreAllTriggered(plAnimGraphInstance& ref_graph) const;
89};
90
91class PL_RENDERERCORE_DLL plAnimGraphTriggerOutputPin : public plAnimGraphOutputPin
92{
93 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphTriggerOutputPin, plAnimGraphOutputPin);
94
95public:
96 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Trigger; }
97
102 void SetTriggered(plAnimGraphInstance& ref_graph) const;
103};
104
106
107class PL_RENDERERCORE_DLL plAnimGraphNumberInputPin : public plAnimGraphInputPin
108{
109 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphNumberInputPin, plAnimGraphInputPin);
110
111public:
112 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Number; }
113
114 double GetNumber(plAnimGraphInstance& ref_graph, double fFallback = 0.0) const;
115};
116
117class PL_RENDERERCORE_DLL plAnimGraphNumberOutputPin : public plAnimGraphOutputPin
118{
119 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphNumberOutputPin, plAnimGraphOutputPin);
120
121public:
122 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Number; }
123
124 void SetNumber(plAnimGraphInstance& ref_graph, double value) const;
125};
126
128
129class PL_RENDERERCORE_DLL plAnimGraphBoolInputPin : public plAnimGraphInputPin
130{
131 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphBoolInputPin, plAnimGraphInputPin);
132
133public:
134 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Bool; }
135
136 bool GetBool(plAnimGraphInstance& ref_graph, bool bFallback = false) const;
137};
138
139class PL_RENDERERCORE_DLL plAnimGraphBoolOutputPin : public plAnimGraphOutputPin
140{
141 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphBoolOutputPin, plAnimGraphOutputPin);
142
143public:
144 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::Bool; }
145
146 void SetBool(plAnimGraphInstance& ref_graph, bool bValue) const;
147};
148
150
151class PL_RENDERERCORE_DLL plAnimGraphBoneWeightsInputPin : public plAnimGraphInputPin
152{
153 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphBoneWeightsInputPin, plAnimGraphInputPin);
154
155public:
156 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::BoneWeights; }
157
158 plAnimGraphPinDataBoneWeights* GetWeights(plAnimController& ref_controller, plAnimGraphInstance& ref_graph) const;
159};
160
162{
163 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphBoneWeightsOutputPin, plAnimGraphOutputPin);
164
165public:
166 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::BoneWeights; }
167
168 void SetWeights(plAnimGraphInstance& ref_graph, plAnimGraphPinDataBoneWeights* pWeights) const;
169};
170
172
173class PL_RENDERERCORE_DLL plAnimGraphLocalPoseInputPin : public plAnimGraphInputPin
174{
175 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphLocalPoseInputPin, plAnimGraphInputPin);
176
177public:
178 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::LocalPose; }
179
180 plAnimGraphPinDataLocalTransforms* GetPose(plAnimController& ref_controller, plAnimGraphInstance& ref_graph) const;
181};
182
184{
185 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphLocalPoseMultiInputPin, plAnimGraphInputPin);
186
187public:
188 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::LocalPose; }
189
190 void GetPoses(plAnimController& ref_controller, plAnimGraphInstance& ref_graph, plDynamicArray<plAnimGraphPinDataLocalTransforms*>& out_poses) const;
191};
192
193class PL_RENDERERCORE_DLL plAnimGraphLocalPoseOutputPin : public plAnimGraphOutputPin
194{
195 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphLocalPoseOutputPin, plAnimGraphOutputPin);
196
197public:
198 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::LocalPose; }
199
200 void SetPose(plAnimGraphInstance& ref_graph, plAnimGraphPinDataLocalTransforms* pPose) const;
201};
202
204
205class PL_RENDERERCORE_DLL plAnimGraphModelPoseInputPin : public plAnimGraphInputPin
206{
207 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphModelPoseInputPin, plAnimGraphInputPin);
208
209public:
210 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::ModelPose; }
211
212 plAnimGraphPinDataModelTransforms* GetPose(plAnimController& ref_controller, plAnimGraphInstance& ref_graph) const;
213};
214
215class PL_RENDERERCORE_DLL plAnimGraphModelPoseOutputPin : public plAnimGraphOutputPin
216{
217 PL_ADD_DYNAMIC_REFLECTION(plAnimGraphModelPoseOutputPin, plAnimGraphOutputPin);
218
219public:
220 virtual plAnimGraphPin::Type GetPinType() const override { return plAnimGraphPin::ModelPose; }
221
222 void SetPose(plAnimGraphInstance& ref_graph, plAnimGraphPinDataModelTransforms* pPose) const;
223};
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:65
Definition AnimGraphInstance.h:15
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:72
Definition AnimGraphPins.h:29
Definition AnimGraphPins.h:81
Definition AnimGraphPins.h:92
Definition DynamicArray.h:81
Base class for reference counted objects.
Definition RefCounted.h:52
All classes that should be dynamically reflectable, need to be derived from this base class.
Definition DynamicRTTI.h:86
Interface for binary in (read) streams.
Definition Stream.h:22
Interface for binary out (write) streams.
Definition Stream.h:107
Definition AnimController.h:24
Definition AnimController.h:31
Definition AnimController.h:41
Definition AnimGraphPins.h:20
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54