Polyphase Game Engine
Loading...
Searching...
No Matches
SkeletalMesh3d.h
Go to the documentation of this file.
1#pragma once
2
3#include "Nodes/3D/Mesh3d.h"
4#include "AssetRef.h"
5#include "Vertex.h"
6
8{
9 One,
10 Four,
11 Num
12};
13
22
23class SkeletalMesh;
24struct AnimEvent;
25struct Channel;
26struct Animation;
27
29{
30 std::string mName;
31 float mTime = 0.0f;
32 float mSpeed = 1.0f;
33 float mWeight = 0.0f;
34 int32_t mSlot = 0;
35 bool mLoop = false;
36};
37
39{
40 std::string mName;
41 std::string mDependentAnim;
42 float mTime = 0.0f;
43 float mSpeed = 1.0f;;
44 float mWeight = 0.0f;
45 bool mLoop = false;
46 int32_t mSlot = -1;
47};
48
49typedef void(*AnimEventHandlerFP)(const AnimEvent& animEvent);
50
52{
53public:
54
56
59
60 virtual const char* GetTypeName() const override;
61 virtual void GatherProperties(std::vector<Property>& outProps) override;
62
63 virtual void Create() override;
64 virtual void Destroy() override;
65 SkeletalMeshCompResource* GetResource();
66
67 virtual void Tick(float deltaTime) override;
68 virtual void EditorTick(float deltaTime) override;
69
70 virtual bool IsStaticMesh3D() const override;
71 virtual bool IsSkeletalMesh3D() const override;
72
73 void SetSkeletalMesh(SkeletalMesh* skeletalMesh);
74 SkeletalMesh* GetSkeletalMesh();
75
76 void PlayAnimation(const char* animName, bool loop, float speed = 1.0f, float weight = 1.0f, int32_t priority = -1);
77 void QueueAnimation(const char* animName, bool loop, const char* targetAnim = nullptr, float speed = 1.0f, float weight = 1.0f, int32_t priority = -1);
78 void StopAnimation(const char* animName, bool cancelQueued = false);
79 void StopAllAnimations(bool cancelQueued = false);
80 void CancelQueuedAnimation(const char* animName);
81 void CancelAllQueuedAnimations();
82 bool IsAnimationPlaying(const char* animName);
83 void ResetAnimation();
84 float GetAnimationSpeed() const;
85 void SetAnimationSpeed(float speed);
86
87 void SetAnimationPaused(bool paused);
88 bool IsAnimationPaused() const;
89
90 void SetInheritPose(bool inherit);
91 bool IsInheritPoseEnabled() const;
92
93 void SetBoundsRadiusOverride(float radius);
94 float GetBoundsRadiusOverride() const;
95
96 bool HasAnimatedThisFrame() const;
97
98 ActiveAnimation* FindActiveAnimation(const char* animName);
99 std::vector<ActiveAnimation>& GetActiveAnimations();
100
101 QueuedAnimation* FindQueuedAnimation(const char* animName, const char* dependName = nullptr);
102 std::vector<QueuedAnimation>& GetQueuedAnimations();
103
104 glm::mat4 GetBoneTransform(const std::string& name) const;
105 glm::vec3 GetBonePosition(const std::string& name) const;
106 glm::quat GetBoneRotationQuat(const std::string& name) const;
107 glm::vec3 GetBoneRotationEuler(const std::string& name) const;
108 glm::vec3 GetBoneScale(const std::string& name) const;
109
110 glm::mat4 GetBoneTransform(int32_t index) const;
111 glm::vec3 GetBonePosition(int32_t boneIndex) const;
112 glm::quat GetBoneRotationQuat(int32_t boneIndex) const;
113 glm::vec3 GetBoneRotationEuler(int32_t boneIndex) const;
114 glm::vec3 GetBoneScale(int32_t boneIndex) const;
115
116 void SetBoneTransform(int32_t boneIndex, const glm::mat4& transform);
117 void SetBonePosition(int32_t boneIndex, glm::vec3 position);
118 void SetBoneRotation(int32_t boneIndex, glm::vec3 rotation);
119 void SetBoneScale(int32_t boneIndex, glm::vec2 scale);
120
121 uint32_t GetNumBones() const;
122 BoneInfluenceMode GetBoneInfluenceMode() const;
123
124 AnimationUpdateMode GetAnimationUpdateMode() const;
125 void SetAnimationUpdateMode(AnimationUpdateMode mode);
126
127 Vertex* GetSkinnedVertices();
128 uint32_t GetNumSkinnedVertices();
129
130 virtual Material* GetMaterial() override;
131 virtual void Render() override;
132
133 void UpdateAnimation(float deltaTime, bool updateBones);
134
135 virtual Bounds GetLocalBounds() const override;
136
137 int32_t FindBoneIndex(const std::string& name) const;
138
139 void SetAnimEventHandler(AnimEventHandlerFP handler);
140 AnimEventHandlerFP GetAnimEventHandler();
141 void SetScriptAnimEventHandler(const ScriptFunc& func);
142
143protected:
144
145 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
146
147 void TickCommon(float deltaTime);
148
149 glm::vec3 InterpolateScale(float time, const Channel& channel);
150 glm::quat InterpolateRotation(float time, const Channel& channel);
151 glm::vec3 InterpolatePosition(float time, const Channel& channel);
152 void DetectTriggeredAnimEvents(
153 const Animation& animation,
154 float prevTickTime,
155 float tickTime,
156 float animationSpeed,
157 std::vector<AnimEvent>& outEvents);
158
159 uint32_t FindScaleIndex(float time, const Channel& channel);
160 uint32_t FindRotationIndex(float time, const Channel& channel);
161 uint32_t FindPositionIndex(float time, const Channel& channel);
162
163 void UpdateAttachedChildren(float deltaTime);
164 void CpuSkinVertices();
165
167 std::vector<glm::mat4> mBoneMatrices;
168 std::vector<Vertex> mSkinnedVertices; // Used by CPU skinning only.
169
171 std::string mDefaultAnimation;
172 float mAnimationSpeed = 1.0f;
173 std::vector<ActiveAnimation> mActiveAnimations;
174 std::vector<QueuedAnimation> mQueuedAnimations;
175 float mBoundsRadiusOverride = 0.0f;
180
183
184 // Graphics Resource
186};
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
AnimationUpdateMode
Definition SkeletalMesh3d.h:15
void(* AnimEventHandlerFP)(const AnimEvent &animEvent)
Definition SkeletalMesh3d.h:49
BoneInfluenceMode
Definition SkeletalMesh3d.h:8
Definition AssetRef.h:18
Definition Datum.h:164
Definition Material.h:48
Definition Mesh3d.h:13
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Mesh3d.cpp:12
virtual bool IsSkeletalMesh3D() const
Definition Mesh3d.cpp:132
virtual const char * GetTypeName() const override
Definition Mesh3d.cpp:39
virtual Material * GetMaterial()=0
virtual bool IsStaticMesh3D() const
Definition Mesh3d.cpp:127
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Mesh3d.cpp:44
void TickCommon(float deltaTime)
Definition Node.cpp:573
virtual void EditorTick(float deltaTime)
Definition Node.cpp:563
virtual void Destroy() override
Definition Primitive3d.cpp:129
virtual Bounds GetLocalBounds() const
Definition Primitive3d.cpp:829
virtual void Tick(float deltaTime) override
Definition Primitive3d.cpp:163
virtual void Render() override
Definition Primitive3d.cpp:259
virtual void Create() override
Definition Primitive3d.cpp:117
Definition ScriptFunc.h:10
Definition SkeletalMesh3d.h:52
std::vector< ActiveAnimation > mActiveAnimations
Definition SkeletalMesh3d.h:173
bool mInheritPose
Definition SkeletalMesh3d.h:178
std::vector< Vertex > mSkinnedVertices
Definition SkeletalMesh3d.h:168
ScriptableFP< AnimEventHandlerFP > mAnimEventHandler
Definition SkeletalMesh3d.h:170
std::vector< glm::mat4 > mBoneMatrices
Definition SkeletalMesh3d.h:167
BoneInfluenceMode mBoneInfluenceMode
Definition SkeletalMesh3d.h:181
std::string mDefaultAnimation
Definition SkeletalMesh3d.h:171
bool mHasAnimatedThisFrame
Definition SkeletalMesh3d.h:179
bool mRevertToBindPose
Definition SkeletalMesh3d.h:177
std::vector< QueuedAnimation > mQueuedAnimations
Definition SkeletalMesh3d.h:174
SkeletalMeshCompResource mResource
Definition SkeletalMesh3d.h:185
AnimationUpdateMode mAnimationUpdateMode
Definition SkeletalMesh3d.h:182
SkeletalMeshRef mSkeletalMesh
Definition SkeletalMesh3d.h:166
DECLARE_NODE(SkeletalMesh3D, Mesh3D)
bool mAnimationPaused
Definition SkeletalMesh3d.h:176
Definition SkeletalMesh.h:86
Definition SkeletalMesh3d.h:29
bool mLoop
Definition SkeletalMesh3d.h:35
float mSpeed
Definition SkeletalMesh3d.h:32
int32_t mSlot
Definition SkeletalMesh3d.h:34
std::string mName
Definition SkeletalMesh3d.h:30
float mTime
Definition SkeletalMesh3d.h:31
float mWeight
Definition SkeletalMesh3d.h:33
Definition SkeletalMesh.h:60
Definition SkeletalMesh.h:77
Definition EngineTypes.h:193
Definition SkeletalMesh.h:69
Definition SkeletalMesh3d.h:39
bool mLoop
Definition SkeletalMesh3d.h:45
float mTime
Definition SkeletalMesh3d.h:42
std::string mName
Definition SkeletalMesh3d.h:40
std::string mDependentAnim
Definition SkeletalMesh3d.h:41
float mWeight
Definition SkeletalMesh3d.h:44
float mSpeed
Definition SkeletalMesh3d.h:43
int32_t mSlot
Definition SkeletalMesh3d.h:46
Definition ScriptFunc.h:43
Definition GraphicsTypes.h:208
Definition Vertex.h:20