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/AnimBlendHierarchy.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 'src/animation/AnimBlendHierarchy.cpp')
-rw-r--r-- | src/animation/AnimBlendHierarchy.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/animation/AnimBlendHierarchy.cpp b/src/animation/AnimBlendHierarchy.cpp new file mode 100644 index 00000000..c7d7f198 --- /dev/null +++ b/src/animation/AnimBlendHierarchy.cpp @@ -0,0 +1,84 @@ +#include "common.h" +#include "patcher.h" +#include "AnimBlendSequence.h" +#include "AnimBlendHierarchy.h" + +CAnimBlendHierarchy::CAnimBlendHierarchy(void) +{ + sequences = nil; + numSequences = 0; + compressed = 0; + totalLength = 0.0f; + linkPtr = 0; +} + +void +CAnimBlendHierarchy::Shutdown(void) +{ + RemoveAnimSequences(); + compressed = 0; + linkPtr = nil; +} + +void +CAnimBlendHierarchy::SetName(char *name) +{ + strncpy(this->name, name, 24); +} + +void +CAnimBlendHierarchy::CalcTotalTime(void) +{ + int i, j; + float totalTime = 0.0f; + + for(i = 0; i < numSequences; i++){ + float seqTime = 0.0f; + for(j = 0; j < sequences[i].numFrames; j++) + seqTime += sequences[i].GetKeyFrame(j)->deltaTime; + totalTime = max(totalTime, seqTime); + } + totalLength = totalTime; +} + +void +CAnimBlendHierarchy::RemoveQuaternionFlips(void) +{ + int i; + + for(i = 0; i < numSequences; i++) + sequences[i].RemoveQuaternionFlips(); +} + +void +CAnimBlendHierarchy::RemoveAnimSequences(void) +{ + if(sequences) + delete[] sequences; + numSequences = 0; +} + +void +CAnimBlendHierarchy::Uncompress(void) +{ + if(totalLength == 0.0f) + CalcTotalTime(); + compressed = 0; +} + +void +CAnimBlendHierarchy::RemoveUncompressedData(void) +{ + // useless + compressed = 1; +} + +STARTPATCHES + InjectHook(0x4019A0, &CAnimBlendHierarchy::Shutdown, PATCH_JUMP); + InjectHook(0x4019C0, &CAnimBlendHierarchy::SetName, PATCH_JUMP); + InjectHook(0x4019E0, &CAnimBlendHierarchy::CalcTotalTime, PATCH_JUMP); + InjectHook(0x401A80, &CAnimBlendHierarchy::RemoveQuaternionFlips, PATCH_JUMP); + InjectHook(0x401AB0, &CAnimBlendHierarchy::RemoveAnimSequences, PATCH_JUMP); + InjectHook(0x401AD0, &CAnimBlendHierarchy::Uncompress, PATCH_JUMP); + InjectHook(0x401B00, &CAnimBlendHierarchy::RemoveUncompressedData, PATCH_JUMP); +ENDPATCHES |