re3/src/animation/AnimBlendSequence.h

56 lines
1.1 KiB
C++

#pragma once
#include "math/Quaternion.h"
// TODO: put them somewhere else?
struct KeyFrame {
CQuaternion rotation;
float deltaTime; // relative to previous key frame
};
struct KeyFrameTrans : KeyFrame {
CVector translation;
};
// The sequence of key frames of one animated node
class CAnimBlendSequence
{
public:
enum {
KF_ROT = 1,
KF_TRANS = 2
};
int32 type;
char name[24];
int32 numFrames;
#ifdef PED_SKIN
int16 boneTag;
#endif
void *keyFrames;
void *keyFramesCompressed;
CAnimBlendSequence(void);
virtual ~CAnimBlendSequence(void);
void SetName(char *name);
void SetNumFrames(int numFrames, bool translation);
void RemoveQuaternionFlips(void);
KeyFrame *GetKeyFrame(int n) {
return type & KF_TRANS ?
&((KeyFrameTrans*)keyFrames)[n] :
&((KeyFrame*)keyFrames)[n];
}
bool HasTranslation(void) { return !!(type & KF_TRANS); }
// TODO? these are unused
// void Uncompress(void);
// void CompressKeyframes(void);
// void RemoveUncompressedData(void);
#ifdef PED_SKIN
void SetBoneTag(int tag) { boneTag = tag; }
#endif
};
#ifndef PED_SKIN
static_assert(sizeof(CAnimBlendSequence) == 0x2C, "CAnimBlendSequence: error");
#endif