94 glm::vec3
mScale = { 1.0f, 1.0f, 1.0f };
111 std::vector<SkeletalLocalPoseTransform>& localPose,
112 float deltaTime) = 0;
124 virtual const char* GetTypeName()
const override;
125 virtual void GatherProperties(std::vector<Property>& outProps)
override;
127 virtual void Create()
override;
128 virtual void Destroy()
override;
131 virtual void Tick(
float deltaTime)
override;
132 virtual void EditorTick(
float deltaTime)
override;
134 virtual bool IsStaticMesh3D()
const override;
135 virtual bool IsSkeletalMesh3D()
const override;
140 void PlayAnimation(
const char* animName,
bool loop,
float speed = 1.0f,
float weight = 1.0f, int32_t priority = -1);
146 void PlayAnimationMasked(
const char* animName, int32_t slot,
BoneMaskAsset* mask,
147 bool loop,
float speed = 1.0f,
float weight = 1.0f);
152 void PlayAnimationAdditive(
const char* animName, int32_t slot,
BoneMaskAsset* mask,
153 bool loop,
float speed = 1.0f,
float weight = 1.0f);
158 void SetSlotWeight(int32_t slot,
float weight);
162 void FadeSlotWeight(int32_t slot,
float targetWeight,
float seconds);
163 void QueueAnimation(
const char* animName,
bool loop,
const char* targetAnim =
nullptr,
float speed = 1.0f,
float weight = 1.0f, int32_t priority = -1);
164 void StopAnimation(
const char* animName,
bool cancelQueued =
false);
165 void StopAllAnimations(
bool cancelQueued =
false);
166 void CancelQueuedAnimation(
const char* animName);
167 void CancelAllQueuedAnimations();
168 bool IsAnimationPlaying(
const char* animName);
169 void ResetAnimation();
170 float GetAnimationSpeed()
const;
171 void SetAnimationSpeed(
float speed);
173 void SetAnimationPaused(
bool paused);
174 bool IsAnimationPaused()
const;
176 void SetInheritPose(
bool inherit);
177 bool IsInheritPoseEnabled()
const;
179 void SetBoundsRadiusOverride(
float radius);
180 float GetBoundsRadiusOverride()
const;
182 bool HasAnimatedThisFrame()
const;
185 std::vector<ActiveAnimation>& GetActiveAnimations();
187 QueuedAnimation* FindQueuedAnimation(
const char* animName,
const char* dependName =
nullptr);
188 std::vector<QueuedAnimation>& GetQueuedAnimations();
190 glm::mat4 GetBoneTransform(
const std::string& name)
const;
191 glm::vec3 GetBonePosition(
const std::string& name)
const;
192 glm::quat GetBoneRotationQuat(
const std::string& name)
const;
193 glm::vec3 GetBoneRotationEuler(
const std::string& name)
const;
194 glm::vec3 GetBoneScale(
const std::string& name)
const;
196 glm::mat4 GetBoneTransform(int32_t index)
const;
197 glm::vec3 GetBonePosition(int32_t boneIndex)
const;
198 glm::quat GetBoneRotationQuat(int32_t boneIndex)
const;
199 glm::vec3 GetBoneRotationEuler(int32_t boneIndex)
const;
200 glm::vec3 GetBoneScale(int32_t boneIndex)
const;
202 void SetBoneTransform(int32_t boneIndex,
const glm::mat4& transform);
203 void SetBonePosition(int32_t boneIndex, glm::vec3 position);
204 void SetBoneRotation(int32_t boneIndex, glm::vec3 rotation);
205 void SetBoneScale(int32_t boneIndex, glm::vec2 scale);
207 uint32_t GetNumBones()
const;
213 Vertex* GetSkinnedVertices();
214 uint32_t GetNumSkinnedVertices();
216 virtual Material* GetMaterial()
override;
217 virtual void Render()
override;
226 uint32_t GetNumMaterialSlots()
const;
227 Material* GetMaterialSlot(uint32_t slot)
const;
228 void SetMaterialSlot(uint32_t slot,
Material* material);
229 int32_t FindMaterialSlot(
const std::string& sectionName)
const;
231 void UpdateAnimation(
float deltaTime,
bool updateBones);
233 virtual Bounds GetLocalBounds()
const override;
234 virtual AABB GetLocalAABB()
const override;
236 int32_t FindBoneIndex(
const std::string& name)
const;
240 void SetScriptAnimEventHandler(
const ScriptFunc& func);
252 static bool HandlePropChange(
Datum* datum, uint32_t index,
const void* newValue);
254 void TickCommon(
float deltaTime);
256 glm::vec3 InterpolateScale(
float time,
const Channel& channel);
257 glm::quat InterpolateRotation(
float time,
const Channel& channel);
258 glm::vec3 InterpolatePosition(
float time,
const Channel& channel);
259 void DetectTriggeredAnimEvents(
263 float animationSpeed,
264 std::vector<AnimEvent>& outEvents);
266 uint32_t FindScaleIndex(
float time,
const Channel& channel);
267 uint32_t FindRotationIndex(
float time,
const Channel& channel);
268 uint32_t FindPositionIndex(
float time,
const Channel& channel);
270 void UpdateAttachedChildren(
float deltaTime);
271 void CpuSkinVertices();
280 std::vector<SkeletalAnimationRef>& GetAnimationAssetsMutable();
284 const Animation* FindAnimation(
const char* animName);
285 void InvalidateAnimationBindings();
298 bool mAnimBindingsValid =
false;
302 float mAnimationSpeed = 1.0f;
305 float mBoundsRadiusOverride = 0.0f;
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
AnimationUpdateMode
Definition SkeletalMesh3d.h:21
@ AlwaysUpdateTimeAndBones
void(* AnimEventHandlerFP)(const AnimEvent &animEvent)
Definition SkeletalMesh3d.h:82
BoneInfluenceMode
Definition SkeletalMesh3d.h:14
AnimLayerMode
Definition SkeletalMesh3d.h:36
Definition BoneMaskAsset.h:19
Definition SkeletalMesh3d.h:104
virtual ~ISkeletalPoseModifier()=default
virtual void ModifySkeletalPose(class SkeletalMesh3D *component, class SkeletalMesh *mesh, std::vector< SkeletalLocalPoseTransform > &localPose, float deltaTime)=0
Definition ScriptFunc.h:10
Definition SkeletalAnimationAsset.h:26
Definition SkeletalMesh3d.h:116
std::vector< ActiveAnimation > mActiveAnimations
Definition SkeletalMesh3d.h:303
bool mInheritPose
Definition SkeletalMesh3d.h:308
std::vector< Vertex > mSkinnedVertices
Definition SkeletalMesh3d.h:290
ScriptableFP< AnimEventHandlerFP > mAnimEventHandler
Definition SkeletalMesh3d.h:300
std::vector< glm::mat4 > mBoneMatrices
Definition SkeletalMesh3d.h:288
BoneInfluenceMode mBoneInfluenceMode
Definition SkeletalMesh3d.h:311
std::vector< Animation > mBoundExternalAnims
Definition SkeletalMesh3d.h:297
std::string mDefaultAnimation
Definition SkeletalMesh3d.h:301
bool mHasAnimatedThisFrame
Definition SkeletalMesh3d.h:309
bool mRevertToBindPose
Definition SkeletalMesh3d.h:307
std::vector< QueuedAnimation > mQueuedAnimations
Definition SkeletalMesh3d.h:304
SkeletalMeshCompResource mResource
Definition SkeletalMesh3d.h:315
std::vector< SkeletalAnimationRef > mAnimationAssets
Definition SkeletalMesh3d.h:292
AnimationUpdateMode mAnimationUpdateMode
Definition SkeletalMesh3d.h:312
std::vector< ISkeletalPoseModifier * > mPoseModifiers
Definition SkeletalMesh3d.h:289
SkeletalMeshRef mSkeletalMesh
Definition SkeletalMesh3d.h:287
std::vector< MaterialRef > mSectionMaterialOverrides
Definition SkeletalMesh3d.h:291
const std::vector< SkeletalAnimationRef > & GetAnimationAssets() const
Definition SkeletalMesh3d.h:279
DECLARE_NODE(SkeletalMesh3D, Mesh3D)
bool mAnimationPaused
Definition SkeletalMesh3d.h:306
Definition SkeletalMesh.h:99
Definition EngineTypes.h:210
Definition SkeletalMesh3d.h:49
AssetRef mBoneMask
Definition SkeletalMesh3d.h:60
bool mLoop
Definition SkeletalMesh3d.h:55
float mWeightFadeRate
Definition SkeletalMesh3d.h:66
float mSpeed
Definition SkeletalMesh3d.h:52
int32_t mSlot
Definition SkeletalMesh3d.h:54
std::string mName
Definition SkeletalMesh3d.h:50
float mWeightTarget
Definition SkeletalMesh3d.h:65
float mTime
Definition SkeletalMesh3d.h:51
float mWeight
Definition SkeletalMesh3d.h:53
AnimLayerMode mLayerMode
Definition SkeletalMesh3d.h:68
Definition SkeletalMesh.h:60
Definition SkeletalMesh.h:77
Definition EngineTypes.h:201
Definition SkeletalMesh.h:69
Definition SkeletalMesh3d.h:72
bool mLoop
Definition SkeletalMesh3d.h:78
float mTime
Definition SkeletalMesh3d.h:75
std::string mName
Definition SkeletalMesh3d.h:73
std::string mDependentAnim
Definition SkeletalMesh3d.h:74
float mWeight
Definition SkeletalMesh3d.h:77
float mSpeed
Definition SkeletalMesh3d.h:76
int32_t mSlot
Definition SkeletalMesh3d.h:79
Definition ScriptFunc.h:43
Definition GraphicsTypes.h:238