summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2021-06-14 14:12:34 -0400
committerGitHub <noreply@github.com>2021-06-14 14:12:34 -0400
commita4c606c522b0dafd727bfb34a729d03ba307e55c (patch)
tree52bbafd7120aac1172d77ecb6522a484e262213f /src/code
parentd399c3deb6bab1baf3153d7c39a50bf2b76e1776 (diff)
Add struct `LegacyLimb` and rename `AnimationHeader2` for `object_human` (#849)
* Add LegacyLimb and rename AnimationHeader2 * Simplify SkelAnime_GetFrameDataLegacy * Minor fixes * Move LegacyLimb with the rest of the limbs
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_skelanime.c62
1 files changed, 14 insertions, 48 deletions
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index 3365b384e..bbc9d2471 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -723,8 +723,8 @@ Gfx* SkelAnime_DrawFlex(GlobalContext* globalCtx, void** skeleton, Vec3s* jointT
* Unpacks frame data for the animation at the given frame into frameTable
* Used by the legacy animation format
*/
-s32 SkelAnime_GetFrameData2(AnimationHeader2* animation, s32 frame, Vec3s* frameTable) {
- AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
+s32 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable) {
+ LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s32 limbCount = animHeader->limbCount;
JointKey* key = SEGMENTED_TO_VIRTUAL(animHeader->jointKey);
s16* frameData = SEGMENTED_TO_VIRTUAL(animHeader->frameData);
@@ -732,61 +732,27 @@ s32 SkelAnime_GetFrameData2(AnimationHeader2* animation, s32 frame, Vec3s* frame
s16* dynamicData = &frameData[frame];
s32 i;
- /**
- *Equivalent to the following, but the compiler optimizes the loop in a way I can't replicate
- */
-
- // for(i = 0, frameTable++, key++; i < limbCount + 1; i++, key++, frameTable++) {
- // frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
- // frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
- // frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
- // }
-
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
- i = 1;
frameTable++;
key++;
- if (limbCount & 1) {}
-
- if (limbCount > 0) {
- if (limbCount & 1) {
- i++;
- frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
- frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
- frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
- key++;
- frameTable++;
- if (limbCount + 1 == i) {
- goto ret;
- }
- }
- do {
- i += 2;
- frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
- frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
- frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
- key++;
- frameTable++;
- frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
- frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
- frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
- key++;
- frameTable++;
- } while (i != limbCount + 1);
- }
-ret:
+ for (i = 1; i <= limbCount; i++, key++, frameTable++) {
+ frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
+ frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
+ frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
+ }
+
return limbCount;
}
/**
* Used by legacy animation format
*/
-s16 Animation_GetLimbCount2(AnimationHeader2* animation) {
- AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
+s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation) {
+ LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->limbCount;
}
@@ -794,8 +760,8 @@ s16 Animation_GetLimbCount2(AnimationHeader2* animation) {
/**
* Used by legacy animation format
*/
-s16 Animation_GetLength2(AnimationHeader2* animation) {
- AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
+s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation) {
+ LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->frameCount;
}
@@ -803,8 +769,8 @@ s16 Animation_GetLength2(AnimationHeader2* animation) {
/**
* Used by legacy animation format
*/
-s16 Animation_GetLastFrame2(AnimationHeader2* animation) {
- AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
+s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation) {
+ LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->frameCount - 1;
}