diff options
| author | Nicholas Estelami <NEstelami@users.noreply.github.com> | 2023-09-26 09:45:10 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-26 08:45:10 -0500 |
| commit | ccd05d8e58e9af92fa05d6e882e2ff6fde7bbcdd (patch) | |
| tree | 2a4274c71266cf0dc6273480cc6cd2cac160fd8a /soh/src/code | |
| parent | 098d5a80446a067d7a7658ee69136ccd4918964c (diff) | |
Removed hardcoded skeleton types in actor draw code. (#2979)
* Initial PAL 1.1 support
* Misc fixes
* Updated game to remove hardcoded skeleton types when rendering
* Fixed weird rebase issue
* Replaced remaining skeleton calls
* lus submodule fix
* Remove OTRGui
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_skelanime.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/soh/src/code/z_skelanime.c b/soh/src/code/z_skelanime.c index 5b687e97c..7440640a0 100644 --- a/soh/src/code/z_skelanime.c +++ b/soh/src/code/z_skelanime.c @@ -284,6 +284,20 @@ void SkelAnime_DrawLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3 CLOSE_DISPS(play->state.gfxCtx); } +// Checks the skeleton header to draw the appropriate skeleton type instead of harcoding the type in the actor's draw function... +void SkelAnime_DrawSkeletonOpa(PlayState* play, SkelAnime* skelAnime, OverrideLimbDrawOpa overrideLimbDraw, + PostLimbDrawOpa postLimbDraw, void* arg) { + if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_NORMAL) { + SkelAnime_DrawOpa(play, skelAnime->skeleton, skelAnime->jointTable, overrideLimbDraw, postLimbDraw, arg); + } + else if (skelAnime->skeletonHeader->skeletonType == SKELANIME_TYPE_FLEX) + { + FlexSkeletonHeader* flexHeader = (FlexSkeletonHeader*)skelAnime->skeletonHeader; + SkelAnime_DrawFlexOpa(play, skelAnime->skeleton, skelAnime->jointTable, flexHeader->dListCount, + overrideLimbDraw, postLimbDraw, arg); + } +} + /** * Draw all limbs of type `StandardLimb` in a given skeleton to the polyOpa buffer */ @@ -1436,6 +1450,7 @@ s32 SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skelet SkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg); + skelAnime->skeletonHeader = skeletonHeader; skelAnime->limbCount = skeletonHeader->limbCount + 1; skelAnime->skeleton = SEGMENTED_TO_VIRTUAL(skeletonHeader->segment); if (jointTable == NULL) { @@ -1469,6 +1484,7 @@ s32 SkelAnime_InitFlex(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader FlexSkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg); + skelAnime->skeletonHeader = skeletonHeader; skelAnime->limbCount = skeletonHeader->sh.limbCount + 1; skelAnime->dListCount = skeletonHeader->dListCount; skelAnime->skeleton = SEGMENTED_TO_VIRTUAL(skeletonHeader->sh.segment); @@ -1506,6 +1522,7 @@ s32 SkelAnime_InitSkin(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* sk SkeletonHeader* skeletonHeader = SEGMENTED_TO_VIRTUAL(skeletonHeaderSeg); + skelAnime->skeletonHeader = skeletonHeader; skelAnime->limbCount = skeletonHeader->limbCount + 1; skelAnime->skeleton = SEGMENTED_TO_VIRTUAL(skeletonHeader->segment); skelAnime->jointTable = |
