diff options
author | aap <aap@papnet.eu> | 2019-06-11 08:59:28 +0200 |
---|---|---|
committer | aap <aap@papnet.eu> | 2019-06-11 08:59:28 +0200 |
commit | e7ed4d009636804d5dbe05aae9e7ab23b80fdd37 (patch) | |
tree | 4c95f6e07923b5ed0a7046afeb42a1ea2b8693bf /src/animation/AnimBlendSequence.cpp | |
parent | Merge branch 'master' of github.com:GTAmodding/re3 (diff) | |
download | re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.gz re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.bz2 re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.lz re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.xz re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.zst re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.zip |
Diffstat (limited to '')
-rw-r--r-- | src/animation/AnimBlendSequence.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/animation/AnimBlendSequence.cpp b/src/animation/AnimBlendSequence.cpp new file mode 100644 index 00000000..4b675774 --- /dev/null +++ b/src/animation/AnimBlendSequence.cpp @@ -0,0 +1,68 @@ +#include "common.h" +#include "patcher.h" +#include "AnimBlendSequence.h" + +CAnimBlendSequence::CAnimBlendSequence(void) +{ + type = 0; + numFrames = 0; + keyFrames = nil; + keyFramesCompressed = nil; +#ifdef PED_SKIN + boneTag = -1; +#endif +} + +CAnimBlendSequence::~CAnimBlendSequence(void) +{ + if(keyFrames) + RwFree(keyFrames); +} + +void +CAnimBlendSequence::SetName(char *name) +{ + strncpy(this->name, name, 24); +} + +void +CAnimBlendSequence::SetNumFrames(int numFrames, bool translation) +{ + int sz; + + if(translation){ + sz = sizeof(KeyFrameTrans); + type |= KF_ROT | KF_TRANS; + }else{ + sz = sizeof(KeyFrame); + type |= KF_ROT; + } + keyFrames = RwMalloc(sz * numFrames); + this->numFrames = numFrames; +} + +void +CAnimBlendSequence::RemoveQuaternionFlips(void) +{ + int i; + CQuaternion last; + KeyFrame *frame; + + if(numFrames < 2) + return; + + frame = GetKeyFrame(0); + last = frame->rotation; + for(i = 1; i < numFrames; i++){ + frame = GetKeyFrame(i); + if(DotProduct(last, frame->rotation) < 0.0f) + frame->rotation = -frame->rotation; + last = frame->rotation; + } +} + +STARTPATCHES + InjectHook(0x402330, &CAnimBlendSequence::SetName, PATCH_JUMP); + InjectHook(0x402350, &CAnimBlendSequence::SetNumFrames, PATCH_JUMP); + InjectHook(0x4023A0, &CAnimBlendSequence::RemoveQuaternionFlips, PATCH_JUMP); +ENDPATCHES |