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);
|
2020-05-08 13:59:57 +00:00
|
|
|
bool SetupKeyFrameCompressed(void);
|
2019-06-11 06:59:28 +00:00
|
|
|
void CalcDeltas(void);
|
2020-05-08 13:59:57 +00:00
|
|
|
void CalcDeltasCompressed(void);
|
2019-06-11 06:59:28 +00:00
|
|
|
void GetCurrentTranslation(CVector &trans, float weight);
|
|
|
|
void GetEndTranslation(CVector &trans, float weight);
|
|
|
|
};
|
2020-05-10 13:54:37 +00:00
|
|
|
|
2020-05-10 15:49:33 +00:00
|
|
|
|
|
|
|
VALIDATE_SIZE(CAnimBlendNode, 0x1C);
|