diff --git a/Makefile b/Makefile index 3aabddc..ea2f40b 100644 --- a/Makefile +++ b/Makefile @@ -245,7 +245,8 @@ build/assets/models/props/combine_ball_catcher.h: assets/materials/ball_catcher. build/assets/models/props/combine_ball_launcher.h: assets/materials/ball_catcher.skm.yaml -ANIM_TEST_CHAMBERS = build/assets/test_chambers/test_chamber_03/test_chamber_03_anim.o \ +ANIM_TEST_CHAMBERS = build/assets/test_chambers/test_chamber_00/test_chamber_00_anim.o \ + build/assets/test_chambers/test_chamber_03/test_chamber_03_anim.o \ build/assets/test_chambers/test_chamber_04/test_chamber_04_anim.o \ build/assets/test_chambers/test_chamber_06/test_chamber_06_anim.o \ build/assets/test_chambers/test_chamber_07/test_chamber_07_anim.o diff --git a/assets/test_chambers/test_chamber_00/test_chamber_00.blend b/assets/test_chambers/test_chamber_00/test_chamber_00.blend index 2e3e270..7884420 100644 Binary files a/assets/test_chambers/test_chamber_00/test_chamber_00.blend and b/assets/test_chambers/test_chamber_00/test_chamber_00.blend differ diff --git a/src/levels/cutscene_runner.c b/src/levels/cutscene_runner.c index b5d2943..4f1f279 100644 --- a/src/levels/cutscene_runner.c +++ b/src/levels/cutscene_runner.c @@ -237,7 +237,8 @@ void cutsceneRunnerStartStep(struct CutsceneRunner* runner) { &gScene.animator, step->playAnimation.armatureIndex, step->playAnimation.animationIndex, - cutsceneRunnerConvertPlaybackSpeed(step->playAnimation.playbackSpeed) + cutsceneRunnerConvertPlaybackSpeed(step->playAnimation.playbackSpeed), + 0 ); break; case CutsceneStepSetAnimationSpeed: diff --git a/src/menu/main_menu.c b/src/menu/main_menu.c index fb1ec12..40dff95 100644 --- a/src/menu/main_menu.c +++ b/src/menu/main_menu.c @@ -21,6 +21,12 @@ Gfx* menuBuildText(struct Font* font, char* message, int x, int y) { return result; } +void mainMenuReadCamera(struct MainMenu* mainMenu) { + gScene.camera.transform = gScene.animator.armatures[TEST_CHAMBER_00_TEST_CHAMBER_00_ARMATURE_CAMERA].pose[0]; + vector3Scale(&gScene.camera.transform.position, &gScene.camera.transform.position, 1.0f / SCENE_SCALE); + soundListenerUpdate(&gScene.camera.transform.position, &gScene.camera.transform.rotation, &gZeroVec, 0); +} + void mainMenuInit(struct MainMenu* mainMenu) { sceneInit(&gScene); @@ -28,18 +34,22 @@ void mainMenuInit(struct MainMenu* mainMenu) { mainMenu->loadGameText = menuBuildText(&gDejaVuSansFont, "LOAD GAME", 30, 147); mainMenu->optionsText = menuBuildText(&gDejaVuSansFont, "OPTIONS", 30, 159); - struct Transform* cameraTransfrom = &gCurrentLevel->locations[TEST_CHAMBER_00_TEST_CHAMBER_00_LOCATION_CAMERA].transform; + 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 + ); - struct Quaternion gRelativeRotation; - quatAxisAngle(&gUp, -M_PI * 0.5f, &gRelativeRotation); - gScene.camera.transform = *cameraTransfrom; - gScene.camera.fov = 61.9275f * 3.0f / 4.0f; - quatMultiply(&cameraTransfrom->rotation, &gRelativeRotation, &gScene.camera.transform.rotation); - soundListenerUpdate(&gScene.camera.transform.position, &gScene.camera.transform.rotation, &gZeroVec, 0); + mainMenuReadCamera(mainMenu); + + gScene.camera.fov = 56.0f; } void mainMenuUpdate(struct MainMenu* mainMenu) { - + sceneAnimatorUpdate(&gScene.animator); + mainMenuReadCamera(mainMenu); } extern Lights1 gSceneLights; diff --git a/src/scene/scene_animator.c b/src/scene/scene_animator.c index 51621c2..d6b88dc 100644 --- a/src/scene/scene_animator.c +++ b/src/scene/scene_animator.c @@ -55,7 +55,7 @@ Mtx* sceneAnimatorBuildTransforms(struct SceneAnimator* sceneAnimator, struct Re return result; } -void sceneAnimatorPlay(struct SceneAnimator* sceneAnimator, int animatorIndex, int animationIndex, float speed) { +void sceneAnimatorPlay(struct SceneAnimator* sceneAnimator, int animatorIndex, int animationIndex, float speed, int flags) { if (animatorIndex < 0 || animatorIndex >= sceneAnimator->animatorCount) { return; } @@ -74,7 +74,7 @@ void sceneAnimatorPlay(struct SceneAnimator* sceneAnimator, int animatorIndex, i return; } - skAnimatorRunClip(&sceneAnimator->animators[animatorIndex], clip, speed >= 0.0f ? 0.0f : clip->nFrames / clip->fps, 0); + skAnimatorRunClip(&sceneAnimator->animators[animatorIndex], clip, speed >= 0.0f ? 0.0f : clip->nFrames / clip->fps, flags); } void sceneAnimatorSetSpeed(struct SceneAnimator* sceneAnimator, int animatorIndex, float speed) { diff --git a/src/scene/scene_animator.h b/src/scene/scene_animator.h index ac69967..8ad88be 100644 --- a/src/scene/scene_animator.h +++ b/src/scene/scene_animator.h @@ -25,7 +25,7 @@ void sceneAnimatorTransformForIndex(struct SceneAnimator* sceneAnimator, int ind Mtx* sceneAnimatorBuildTransforms(struct SceneAnimator* sceneAnimator, struct RenderState* renderState); -void sceneAnimatorPlay(struct SceneAnimator* sceneAnimator, int animatorIndex, int animationIndex, float speed); +void sceneAnimatorPlay(struct SceneAnimator* sceneAnimator, int animatorIndex, int animationIndex, float speed, int flags); void sceneAnimatorSetSpeed(struct SceneAnimator* sceneAnimator, int animatorIndex, float speed); int sceneAnimatorIsRunning(struct SceneAnimator* sceneAnimator, int animatorIndex);