diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2021-06-14 14:12:34 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-14 14:12:34 -0400 |
| commit | a4c606c522b0dafd727bfb34a729d03ba307e55c (patch) | |
| tree | 52bbafd7120aac1172d77ecb6522a484e262213f /src/code | |
| parent | d399c3deb6bab1baf3153d7c39a50bf2b76e1776 (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.c | 62 |
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; } |
