summaryrefslogtreecommitdiff
path: root/mm/src/code
diff options
context:
space:
mode:
authorlouist103 <35883445+louist103@users.noreply.github.com>2024-02-01 09:55:12 -0500
committerGarrett Cox <garrettjcox@gmail.com>2024-05-22 09:04:59 -0500
commita4a4264fc0b24ce966b54c4e76497d3992d9840e (patch)
treefcd30cb604430f8cd665445f4040554eb321e409 /mm/src/code
parentd479a7db37ae300590b2d30246e957db41eae74b (diff)
Implement CKeyframe importer and exporter (#121)
Diffstat (limited to 'mm/src/code')
-rw-r--r--mm/src/code/c_keyframe.c65
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;
}