diff options
Diffstat (limited to 'src/animation/AnimBlendSequence.h')
-rw-r--r-- | src/animation/AnimBlendSequence.h | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/src/animation/AnimBlendSequence.h b/src/animation/AnimBlendSequence.h index c6e70f22..67118b2f 100644 --- a/src/animation/AnimBlendSequence.h +++ b/src/animation/AnimBlendSequence.h @@ -19,10 +19,38 @@ struct KeyFrameTrans : KeyFrame { struct KeyFrameCompressed { int16 rot[4]; // 4096 int16 deltaTime; // 60 + + void GetRotation(CQuaternion *quat){ + float scale = 1.0f/4096.0f; + quat->x = rot[0]*scale; + quat->y = rot[1]*scale; + quat->z = rot[2]*scale; + quat->w = rot[3]*scale; + } + void SetRotation(const CQuaternion &quat){ + rot[0] = quat.x * 4096.0f; + rot[1] = quat.y * 4096.0f; + rot[2] = quat.z * 4096.0f; + rot[3] = quat.w * 4096.0f; + } + float GetDeltaTime(void) { return deltaTime/60.0f; } + void SetTime(float t) { deltaTime = t*60.0f + 0.5f; } }; struct KeyFrameTransCompressed : KeyFrameCompressed { - int16 trans[3]; // 128 + int16 trans[3]; // 1024 + + void GetTranslation(CVector *vec) { + float scale = 1.0f/1024.0f; + vec->x = trans[0]*scale; + vec->y = trans[1]*scale; + vec->z = trans[2]*scale; + } + void SetTranslation(const CVector &vec){ + trans[0] = vec.x*1024.0f; + trans[1] = vec.y*1024.0f; + trans[2] = vec.z*1024.0f; + } }; @@ -37,32 +65,31 @@ public: 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 SetNumFrames(int numFrames, bool translation, bool compressed); void RemoveQuaternionFlips(void); KeyFrame *GetKeyFrame(int n) { return type & KF_TRANS ? &((KeyFrameTrans*)keyFrames)[n] : &((KeyFrame*)keyFrames)[n]; } + KeyFrameCompressed *GetKeyFrameCompressed(int n) { + return type & KF_TRANS ? + &((KeyFrameTransCompressed*)keyFramesCompressed)[n] : + &((KeyFrameCompressed*)keyFramesCompressed)[n]; + } bool HasTranslation(void) { return !!(type & KF_TRANS); } void Uncompress(void); void CompressKeyframes(void); void RemoveUncompressedData(void); bool MoveMemory(void); -#ifdef PED_SKIN void SetBoneTag(int tag) { boneTag = tag; } -#endif }; -#ifndef PED_SKIN -VALIDATE_SIZE(CAnimBlendSequence, 0x2C); -#endif +VALIDATE_SIZE(CAnimBlendSequence, 0x30); |