2019-06-11 06:59:28 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "AnimBlendSequence.h"
|
|
|
|
|
|
|
|
class CAnimBlendAssociation;
|
|
|
|
|
|
|
|
// The interpolated state between two key frames in a sequence
|
|
|
|
class CAnimBlendNode
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// for slerp
|
|
|
|
float theta; // angle between quaternions
|
2019-07-10 15:34:11 +00:00
|
|
|
float invSin; // 1/Sin(theta)
|
2019-06-11 06:59:28 +00:00
|
|
|
// indices into array in sequence
|
|
|
|
int32 frameA; // next key frame
|
|
|
|
int32 frameB; // previous key frame
|
|
|
|
float remainingTime; // time until frames have to advance
|
|
|
|
CAnimBlendSequence *sequence;
|
|
|
|
CAnimBlendAssociation *association;
|
|
|
|
|
|
|
|
void Init(void);
|
|
|
|
bool Update(CVector &trans, CQuaternion &rot, float weight);
|
|
|
|
bool NextKeyFrame(void);
|
|
|
|
bool FindKeyFrame(float t);
|
|
|
|
void CalcDeltas(void);
|
|
|
|
void GetCurrentTranslation(CVector &trans, float weight);
|
|
|
|
void GetEndTranslation(CVector &trans, float weight);
|
|
|
|
};
|
|
|
|
static_assert(sizeof(CAnimBlendNode) == 0x1C, "CAnimBlendNode: error");
|