Fix issue with first frame of camera animation
This commit is contained in:
parent
ba5f97b346
commit
0c8bc76732
|
@ -245,6 +245,7 @@ static void gameProc(void* arg) {
|
||||||
|
|
||||||
controllersTriggerRead();
|
controllersTriggerRead();
|
||||||
controllerHandlePlayback();
|
controllerHandlePlayback();
|
||||||
|
skAnimatorSync();
|
||||||
|
|
||||||
if (inputIgnore) {
|
if (inputIgnore) {
|
||||||
--inputIgnore;
|
--inputIgnore;
|
||||||
|
|
|
@ -34,22 +34,24 @@ void mainMenuInit(struct MainMenu* mainMenu) {
|
||||||
mainMenu->loadGameText = menuBuildText(&gDejaVuSansFont, "LOAD GAME", 30, 147);
|
mainMenu->loadGameText = menuBuildText(&gDejaVuSansFont, "LOAD GAME", 30, 147);
|
||||||
mainMenu->optionsText = menuBuildText(&gDejaVuSansFont, "OPTIONS", 30, 159);
|
mainMenu->optionsText = menuBuildText(&gDejaVuSansFont, "OPTIONS", 30, 159);
|
||||||
|
|
||||||
sceneAnimatorPlay(
|
|
||||||
&gScene.animator,
|
|
||||||
TEST_CHAMBER_00_TEST_CHAMBER_00_ARMATURE_CAMERA,
|
|
||||||
TEST_CHAMBER_00_TEST_CHAMBER_00_CAMERA_ANIMATION__ANIM_CAMERA_MAIN_MENU_CAMERA,
|
|
||||||
1.0f,
|
|
||||||
SKAnimatorFlagsLoop
|
|
||||||
);
|
|
||||||
|
|
||||||
mainMenuReadCamera(mainMenu);
|
mainMenuReadCamera(mainMenu);
|
||||||
|
|
||||||
gScene.camera.fov = 56.0f;
|
gScene.camera.fov = 56.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mainMenuUpdate(struct MainMenu* mainMenu) {
|
void mainMenuUpdate(struct MainMenu* mainMenu) {
|
||||||
sceneAnimatorUpdate(&gScene.animator);
|
if (!skAnimatorIsRunning(&gScene.animator.animators[TEST_CHAMBER_00_TEST_CHAMBER_00_ARMATURE_CAMERA])) {
|
||||||
|
sceneAnimatorPlay(
|
||||||
|
&gScene.animator,
|
||||||
|
TEST_CHAMBER_00_TEST_CHAMBER_00_ARMATURE_CAMERA,
|
||||||
|
TEST_CHAMBER_00_TEST_CHAMBER_00_CAMERA_ANIMATION__ANIM_CAMERA_MAIN_MENU_CAMERA,
|
||||||
|
1.0f,
|
||||||
|
SKAnimatorFlagsLoop
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
mainMenuReadCamera(mainMenu);
|
mainMenuReadCamera(mainMenu);
|
||||||
|
sceneAnimatorUpdate(&gScene.animator);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern Lights1 gSceneLights;
|
extern Lights1 gSceneLights;
|
||||||
|
|
|
@ -11,6 +11,7 @@ OSMesgQueue gAnimationQueue;
|
||||||
OSMesg gAnimationQueueEntries[MAX_ANIMATION_QUEUE_ENTRIES];
|
OSMesg gAnimationQueueEntries[MAX_ANIMATION_QUEUE_ENTRIES];
|
||||||
OSIoMesg gAnimationIOMesg[MAX_ANIMATION_QUEUE_ENTRIES];
|
OSIoMesg gAnimationIOMesg[MAX_ANIMATION_QUEUE_ENTRIES];
|
||||||
int gAnimationNextMessage;
|
int gAnimationNextMessage;
|
||||||
|
int gPendingAnimationRequests;
|
||||||
|
|
||||||
void skAnimatorCopy(u32 romAddress, void* target, u32 size) {
|
void skAnimatorCopy(u32 romAddress, void* target, u32 size) {
|
||||||
if (!gAnimationPiHandle) {
|
if (!gAnimationPiHandle) {
|
||||||
|
@ -18,6 +19,12 @@ void skAnimatorCopy(u32 romAddress, void* target, u32 size) {
|
||||||
osCreateMesgQueue(&gAnimationQueue, gAnimationQueueEntries, MAX_ANIMATION_QUEUE_ENTRIES);
|
osCreateMesgQueue(&gAnimationQueue, gAnimationQueueEntries, MAX_ANIMATION_QUEUE_ENTRIES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gPendingAnimationRequests == MAX_ANIMATION_QUEUE_ENTRIES) {
|
||||||
|
OSMesg msg;
|
||||||
|
osRecvMesg(&gAnimationQueue, &msg, OS_MESG_BLOCK);
|
||||||
|
--gPendingAnimationRequests;
|
||||||
|
}
|
||||||
|
|
||||||
// request new chunk
|
// request new chunk
|
||||||
OSIoMesg* ioMesg = &gAnimationIOMesg[gAnimationNextMessage];
|
OSIoMesg* ioMesg = &gAnimationIOMesg[gAnimationNextMessage];
|
||||||
gAnimationNextMessage = (gAnimationNextMessage + 1) % MAX_ANIMATION_QUEUE_ENTRIES;
|
gAnimationNextMessage = (gAnimationNextMessage + 1) % MAX_ANIMATION_QUEUE_ENTRIES;
|
||||||
|
@ -29,6 +36,15 @@ void skAnimatorCopy(u32 romAddress, void* target, u32 size) {
|
||||||
ioMesg->size = size;
|
ioMesg->size = size;
|
||||||
|
|
||||||
osEPiStartDma(gAnimationPiHandle, ioMesg, OS_READ);
|
osEPiStartDma(gAnimationPiHandle, ioMesg, OS_READ);
|
||||||
|
++gPendingAnimationRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
void skAnimatorSync() {
|
||||||
|
while (gPendingAnimationRequests) {
|
||||||
|
OSMesg msg;
|
||||||
|
osRecvMesg(&gAnimationQueue, &msg, OS_MESG_BLOCK);
|
||||||
|
--gPendingAnimationRequests;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void skAnimatorInit(struct SKAnimator* animator, int nBones) {
|
void skAnimatorInit(struct SKAnimator* animator, int nBones) {
|
||||||
|
|
|
@ -28,6 +28,8 @@ void skAnimatorRunClip(struct SKAnimator* animator, struct SKAnimationClip* clip
|
||||||
|
|
||||||
int skAnimatorIsRunning(struct SKAnimator* animator);
|
int skAnimatorIsRunning(struct SKAnimator* animator);
|
||||||
|
|
||||||
|
void skAnimatorSync();
|
||||||
|
|
||||||
#define SK_SEGMENT_COUNT 16
|
#define SK_SEGMENT_COUNT 16
|
||||||
|
|
||||||
void skSetSegmentLocation(unsigned segmentNumber, unsigned segmentLocatoin);
|
void skSetSegmentLocation(unsigned segmentNumber, unsigned segmentLocatoin);
|
||||||
|
|
Loading…
Reference in a new issue