diff options
| author | louist103 <35883445+louist103@users.noreply.github.com> | 2024-02-01 09:55:12 -0500 |
|---|---|---|
| committer | Garrett Cox <garrettjcox@gmail.com> | 2024-05-22 09:04:59 -0500 |
| commit | a4a4264fc0b24ce966b54c4e76497d3992d9840e (patch) | |
| tree | fcd30cb604430f8cd665445f4040554eb321e409 /mm/src/code | |
| parent | d479a7db37ae300590b2d30246e957db41eae74b (diff) | |
Implement CKeyframe importer and exporter (#121)
Diffstat (limited to 'mm/src/code')
| -rw-r--r-- | mm/src/code/c_keyframe.c | 65 |
1 files changed, 55 insertions, 10 deletions
diff --git a/mm/src/code/c_keyframe.c b/mm/src/code/c_keyframe.c index f84a7d6e2..d37b28a9b 100644 --- a/mm/src/code/c_keyframe.c +++ b/mm/src/code/c_keyframe.c @@ -1,4 +1,5 @@ #include "global.h" +#include "BenPort.h" #define FMOD(x, mod) ((x) - ((s32)((x) * (1.0f / (mod))) * (f32)(mod))) @@ -124,8 +125,18 @@ void Keyframe_InitFlex(KFSkelAnimeFlex* kfSkelAnime, KeyFrameSkeleton* skeleton, Vec3s* jointTable, Vec3s* morphTable, UnkKeyframeCallback* callbacks) { Keyframe_ResetFlex(kfSkelAnime); FrameCtrl_Init(&kfSkelAnime->frameCtrl); - kfSkelAnime->skeleton = (KeyFrameSkeleton*)Lib_SegmentedToVirtual(skeleton); - kfSkelAnime->animation = (KeyFrameAnimation*)Lib_SegmentedToVirtual(animation); + KeyFrameSkeleton* skel = skeleton; + KeyFrameAnimation* anim = animation; + + if (ResourceMgr_OTRSigCheck(skel)) { + skel = (KeyFrameSkeleton*)ResourceMgr_LoadKeyFrameSkelByName(skeleton); + } + if (ResourceMgr_OTRSigCheck(anim)) { + anim = (KeyFrameSkeleton*)ResourceMgr_LoadKeyFrameSkelByName(animation); + } + + kfSkelAnime->skeleton = skel; + kfSkelAnime->animation = anim; kfSkelAnime->jointTable = jointTable; kfSkelAnime->morphTable = morphTable; kfSkelAnime->callbacks = callbacks; @@ -178,17 +189,29 @@ void Keyframe_FlexChangeAnim(KFSkelAnimeFlex* kfSkelAnime, KeyFrameSkeleton* ske f32 startTime, f32 endTime, f32 t, f32 speed, f32 morphFrames, s32 animMode) { kfSkelAnime->morphFrames = morphFrames; + if (ResourceMgr_OTRSigCheck(skeleton)) { + skeleton = ResourceMgr_LoadKeyFrameSkelByName(skeleton); + } + if (kfSkelAnime->skeleton != skeleton) { - kfSkelAnime->skeleton = (KeyFrameSkeleton*)Lib_SegmentedToVirtual(skeleton); + kfSkelAnime->skeleton = skeleton; } - kfSkelAnime->animation = (KeyFrameAnimation*)Lib_SegmentedToVirtual(animation); + + if (ResourceMgr_OTRSigCheck(animation)) { + animation = ResourceMgr_LoadKeyFrameAnimByName(animation); + } + kfSkelAnime->animation = animation; FrameCtrl_SetProperties(&kfSkelAnime->frameCtrl, startTime, endTime, kfSkelAnime->animation->duration, t, speed, animMode); } void Keyframe_FlexChangeAnimQuick(KFSkelAnimeFlex* kfSkelAnime, KeyFrameAnimation* animation) { - kfSkelAnime->animation = (KeyFrameAnimation*)Lib_SegmentedToVirtual(animation); + if (ResourceMgr_OTRSigCheck(animation)) { + animation = ResourceMgr_LoadKeyFrameAnimByName(animation); + } + + kfSkelAnime->animation = animation; kfSkelAnime->frameCtrl.duration = kfSkelAnime->animation->duration; } @@ -538,8 +561,17 @@ void Keyframe_InitStandard(KFSkelAnime* kfSkelAnime, KeyFrameSkeleton* skeleton, Vec3s* jointTable, Vec3s* morphTable) { Keyframe_ResetStandard(kfSkelAnime); FrameCtrl_Init(&kfSkelAnime->frameCtrl); - kfSkelAnime->skeleton = (KeyFrameSkeleton*)Lib_SegmentedToVirtual(skeleton); - kfSkelAnime->animation = (KeyFrameAnimation*)Lib_SegmentedToVirtual(animation); + + if (ResourceMgr_OTRSigCheck(animation)) { + animation = ResourceMgr_LoadKeyFrameAnimByName(animation); + } + + if (ResourceMgr_OTRSigCheck(skeleton)) { + skeleton = ResourceMgr_LoadKeyFrameSkelByName(skeleton); + } + + kfSkelAnime->skeleton = skeleton; + kfSkelAnime->animation = animation; kfSkelAnime->jointTable = jointTable; kfSkelAnime->morphTable = morphTable; } @@ -595,8 +627,17 @@ void Keyframe_StandardChangeAnim(KFSkelAnime* kfSkelAnime, KeyFrameSkeleton* ske f32 startTime, f32 endTime, f32 t, f32 speed, f32 morphFrames, s32 animMode, Vec3s* rotOffsetsTable) { kfSkelAnime->morphFrames = morphFrames; - kfSkelAnime->skeleton = (KeyFrameSkeleton*)Lib_SegmentedToVirtual(skeleton); - kfSkelAnime->animation = (KeyFrameAnimation*)Lib_SegmentedToVirtual(animation); + + if (ResourceMgr_OTRSigCheck(animation)) { + animation = ResourceMgr_LoadKeyFrameAnimByName(animation); + } + + if (ResourceMgr_OTRSigCheck(skeleton)) { + skeleton = ResourceMgr_LoadKeyFrameSkelByName(skeleton); + } + + kfSkelAnime->skeleton = skeleton; + kfSkelAnime->animation = animation; FrameCtrl_SetProperties(&kfSkelAnime->frameCtrl, startTime, endTime, kfSkelAnime->animation->duration, t, speed, animMode); @@ -604,7 +645,11 @@ void Keyframe_StandardChangeAnim(KFSkelAnime* kfSkelAnime, KeyFrameSkeleton* ske } void Keyframe_StandardChangeAnimQuick(KFSkelAnime* kfSkelAnime, KeyFrameAnimation* animation) { - kfSkelAnime->animation = Lib_SegmentedToVirtual(animation); + if (ResourceMgr_OTRSigCheck(animation)) { + animation = ResourceMgr_LoadKeyFrameAnimByName(animation); + } + + kfSkelAnime->animation = animation; kfSkelAnime->frameCtrl.duration = kfSkelAnime->animation->duration; } |
