diff --git a/data/file_list.yml b/data/file_list.yml index b34e58c11f..b60c804fe0 100644 --- a/data/file_list.yml +++ b/data/file_list.yml @@ -230392,11 +230392,11 @@ Library/Camera/CameraUtil.o: - offset: 0x83bac0 size: 52 label: _ZN2al19getProjectionMtxPtrEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83baf4 size: 12 label: _ZN2al19getProjectionMtxPtrEPKNS_15SceneCameraInfoEi - status: NotDecompiled + status: Matching - offset: 0x83bb00 size: 56 label: _ZN2al15getLookAtCameraEPKNS_10IUseCameraEi @@ -230492,732 +230492,732 @@ Library/Camera/CameraUtil.o: - offset: 0x83bff0 size: 152 label: _ZN2al15calcCameraFrontEPN4sead7Vector3IfEEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83c088 size: 64 label: _ZN2al19setNearClipDistanceEPKNS_10IUseCameraEfi - status: NotDecompiled + status: Matching - offset: 0x83c0c8 size: 64 label: _ZN2al18setFarClipDistanceEPKNS_10IUseCameraEfi - status: NotDecompiled + status: Matching - offset: 0x83c108 size: 176 label: _ZN2al20setCurrentCameraPoseEPNS_14CameraPoseInfoEPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83c1b8 size: 80 label: _ZN2al13calcCameraDirEPN4sead7Vector3IfEEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83c208 size: 92 label: _ZN2al17calcCameraLookDirEPN4sead7Vector3IfEEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83c264 size: 68 label: _ZN2al17calcCameraSideDirEPN4sead7Vector3IfEEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83c2a8 size: 68 label: _ZN2al15calcCameraUpDirEPN4sead7Vector3IfEEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83c2ec size: 32 label: _ZN2al16tryCalcCameraDirEPN4sead7Vector3IfEEPKNS_15SceneCameraInfoEi - status: NotDecompiled + status: Matching - offset: 0x83c30c size: 92 label: _ZN2al17tryCalcCameraDirHEPN4sead7Vector3IfEEPKNS_15SceneCameraInfoERKS2_i - status: NotDecompiled + status: Matching - offset: 0x83c368 size: 136 label: _ZN2al21tryCalcCameraLookDirHEPN4sead7Vector3IfEEPKNS_15SceneCameraInfoERKS2_i - status: NotDecompiled + status: Matching - offset: 0x83c3f0 size: 64 label: _ZN2al11startCameraEPKNS_10IUseCameraEPNS_12CameraTicketEi - status: NotDecompiled + status: Matching - offset: 0x83c430 size: 64 label: _ZN2al14startCameraSubEPKNS_10IUseCameraEPNS_12CameraTicketEi - status: NotDecompiled + status: Matching - offset: 0x83c470 size: 108 label: _ZN2al15startAnimCameraEPKNS_10IUseCameraEPNS_12CameraTicketEPKci - status: NotDecompiled + status: Matching - offset: 0x83c4dc size: 8 label: _ZN2al19startAnimCameraAnimEPNS_12CameraTicketEPKciii - status: NotDecompiled + status: Matching - offset: 0x83c4e4 size: 104 label: _ZN2al49startAnimCameraWithStartStepAndEndStepAndPlayStepEPKNS_10IUseCameraEPNS_12CameraTicketEPKciiii - status: NotDecompiled + status: Matching - offset: 0x83c54c size: 80 label: _ZN2al9endCameraEPKNS_10IUseCameraEPNS_12CameraTicketEib - status: NotDecompiled + status: Matching - offset: 0x83c59c size: 80 label: _ZN2al27endCameraWithNextCameraPoseEPKNS_10IUseCameraEPNS_12CameraTicketEPKNS_14CameraPoseInfoEi - status: NotDecompiled + status: Matching - offset: 0x83c5ec size: 68 label: _ZN2al12endCameraSubEPKNS_10IUseCameraEPNS_12CameraTicketEi - status: NotDecompiled + status: Matching - offset: 0x83c630 size: 8 label: _ZN2al14isActiveCameraEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83c638 size: 144 label: _ZN2al16initObjectCameraEPKNS_10IUseCameraERKNS_13PlacementInfoEPKcS7_ - status: NotDecompiled + status: Matching - offset: 0x83c6c8 size: 152 label: _ZN2al16initObjectCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcS7_ - status: NotDecompiled + status: Matching - offset: 0x83c760 size: 68 label: _ZN2al31initObjectCameraNoPlacementInfoEPKNS_10IUseCameraEPKcS4_ - status: NotDecompiled + status: Matching - offset: 0x83c7a4 size: 152 label: _ZN2al13initFixCameraEPKNS_10IUseCameraEPKcRKN4sead7Vector3IfEES9_ - status: NotDecompiled + status: Matching - offset: 0x83c83c size: 100 label: _ZN16alCameraFunction31initCameraNoPlacementInfoNoSaveEPN2al11CameraPoserEPKNS0_10IUseCameraEPKNS0_11PlacementIdEPKciRKN4sead8Matrix34IfEE - status: NotDecompiled + status: Matching - offset: 0x83c8a0 size: 156 label: _ZN2al20initFixDoorwayCameraEPKNS_10IUseCameraEPKcRKN4sead7Vector3IfEES9_ - status: NotDecompiled + status: Matching - offset: 0x83c93c size: 296 label: _ZN2al18initFixActorCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKcRKN4sead7Vector3IfEEfffb - status: NotDecompiled + status: Matching - offset: 0x83ca64 size: 196 label: _ZN16alCameraFunction16initCameraNoSaveEPN2al11CameraPoserEPKNS0_10IUseCameraERKNS0_13ActorInitInfoEPKci - status: NotDecompiled + status: Matching - offset: 0x83cb28 size: 228 label: _ZN2al17initFixLookCameraEPNS_9LiveActorERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83cc0c size: 296 label: _ZN2al17initFixTalkCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKcRKN4sead7Vector3IfEEfffb - status: NotDecompiled + status: Matching - offset: 0x83cd34 size: 308 label: _ZN2al20initFixFishingCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKcRKN4sead7Vector3IfEESC_fffb - status: NotDecompiled + status: Matching - offset: 0x83ce68 size: 232 label: _ZN2al18initFixPointCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcb - status: NotDecompiled + status: Matching - offset: 0x83cf50 size: 196 label: _ZN16alCameraFunction10initCameraEPN2al11CameraPoserEPKNS0_10IUseCameraERKNS0_13ActorInitInfoEPKci - status: NotDecompiled + status: Matching - offset: 0x83d014 size: 224 label: _ZN2al18initLookDownCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83d0f4 size: 240 label: _ZN2al21initProgramableCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcPKN4sead7Vector3IfEESC_SC_ - status: NotDecompiled + status: Matching - offset: 0x83d1e4 size: 132 label: _ZN2al21initProgramableCameraEPKNS_10IUseCameraEPKcPKN4sead7Vector3IfEES9_S9_ - status: NotDecompiled + status: Matching - offset: 0x83d268 size: 256 label: _ZN2al33initProgramableCameraWithColliderEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcPKN4sead7Vector3IfEESC_SC_ - status: NotDecompiled + status: Matching - offset: 0x83d368 size: 236 label: _ZN2al26initProgramableAngleCameraEPKNS_10IUseCameraERKNS_13PlacementInfoEPKcPKN4sead7Vector3IfEEPKfSE_SE_ - status: NotDecompiled + status: Matching - offset: 0x83d454 size: 188 label: _ZN16alCameraFunction16initCameraNoSaveEPN2al11CameraPoserEPKNS0_10IUseCameraERKNS0_13PlacementInfoEPKci - status: NotDecompiled + status: Matching - offset: 0x83d510 size: 240 label: _ZN2al42initProgramableCameraKeepColliderPreCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcPKN4sead7Vector3IfEESC_SC_ - status: NotDecompiled + status: Matching - offset: 0x83d600 size: 108 label: _ZN2al23initShooterCameraSingleEPKNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83d66c size: 100 label: _ZN16alCameraFunction25initCameraNoPlacementInfoEPN2al11CameraPoserEPKNS0_10IUseCameraEPKNS0_11PlacementIdEPKciRKN4sead8Matrix34IfEE - status: NotDecompiled + status: Matching - offset: 0x83d6d0 size: 224 label: _ZN2al23initTowerCameraWithSaveEPKNS_10IUseCameraEPKN4sead7Vector3IfEERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83d7b0 size: 224 label: _ZN2al15initTowerCameraEPKNS_10IUseCameraEPKN4sead7Vector3IfEERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83d890 size: 224 label: _ZN2al20initBossBattleCameraEPKNS_10IUseCameraEPKN4sead7Vector3IfEERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83d970 size: 8 label: _ZN2al31initProgramableCameraAngleSwingEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83d978 size: 108 label: _ZN2al22initFollowCameraSimpleEPKNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83d9e4 size: 208 label: _ZN2al22initFollowCameraSimpleEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83dab4 size: 152 label: _ZN2al20initDemoObjectCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcS7_ - status: NotDecompiled + status: Matching - offset: 0x83db4c size: 44 label: _ZN2al25initDemoProgramableCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcPKN4sead7Vector3IfEESC_SC_ - status: NotDecompiled + status: Matching - offset: 0x83db78 size: 44 label: _ZN2al46initDemoProgramableCameraKeepColliderPreCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKcPKN4sead7Vector3IfEESC_SC_ - status: NotDecompiled + status: Matching - offset: 0x83dba4 size: 44 label: _ZN2al18initDemoAnimCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKNS_8ResourceEPKN4sead8Matrix34IfEEPKc - status: NotDecompiled + status: Matching - offset: 0x83dbd0 size: 240 label: _ZN2al14initAnimCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKNS_8ResourceEPKN4sead8Matrix34IfEEPKc - status: NotDecompiled + status: Matching - offset: 0x83dcc0 size: 128 label: _ZN2al18initDemoAnimCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83dd40 size: 124 label: _ZN2al20loadActorCameraParamEPNS_12CameraTicketEPKNS_9LiveActorEPKcS6_ - status: NotDecompiled + status: Matching - offset: 0x83ddbc size: 108 label: _ZN2al28loadActorCameraParamInitFileEPNS_12CameraTicketEPKNS_9LiveActorEPKc - status: NotDecompiled + status: Matching - offset: 0x83de28 size: 12 label: _ZN2al23setFixActorCameraTargetEPNS_12CameraTicketEPKNS_9LiveActorE - status: NotDecompiled + status: Matching - offset: 0x83de34 size: 12 label: _ZN2al23setFixActorCameraAngleHEPNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83de40 size: 12 label: _ZN2al22setTowerCameraDistanceEPNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83de4c size: 8 label: _ZN2al25setTowerCameraStartAngleVEPNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83de54 size: 12 label: _ZN2al30setTowerCameraUserMarginAngleHEPNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83de60 size: 16 label: _ZN2al32resetTowerCameraUserMarginAngleHEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83de70 size: 8 label: _ZN2al27resetTowerCameraInputRotateEPNS_12CameraTicketEfi - status: NotDecompiled + status: Matching - offset: 0x83de78 size: 16 label: _Z37validateFixPointCameraUsePreCameraPosPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83de88 size: 208 label: _ZN2al20initSubjectiveCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83df58 size: 108 label: _ZN2al26initSubjectiveCameraNoSaveEPKNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83dfc4 size: 12 label: _ZN2al27getSubjectiveCameraOffsetUpEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83dfd0 size: 4 label: _ZN2al30getSubjectiveCameraOffsetFrontEv - status: NotDecompiled + status: Matching - offset: 0x83dfd4 size: 20 label: _ZN2al30setSubjectiveCameraStartAngleHEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83dfe8 size: 16 label: _ZN2al35validateSubjectiveCameraResetAngleHEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83dff8 size: 16 label: _ZN2al29requestSubjectiveCameraZoomInEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e008 size: 108 label: _ZN2al18initParallelCameraEPKNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83e074 size: 208 label: _ZN2al18initParallelCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e144 size: 24 label: _ZN2al29setParallelCameraLookAtOffsetEPKNS_12CameraTicketERKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83e15c size: 12 label: _ZN2al25setParallelCameraDistanceEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e168 size: 12 label: _ZN2al23setParallelCameraAngleHEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e174 size: 12 label: _ZN2al23setParallelCameraAngleVEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e180 size: 108 label: _ZN2al19initQuickTurnCameraEPKNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83e1ec size: 8 label: _ZN2al24setQuickTurnCameraFollowEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e1f4 size: 16 label: _ZN2al28setQuickTurnCameraRotateFastEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e204 size: 208 label: _ZN2al14initRaceCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e2d4 size: 12 label: _ZN2al24setRaceCameraFrontDirPtrEPKNS_12CameraTicketEPKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83e2e0 size: 12 label: _ZN2al21setRaceCameraDistanceEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e2ec size: 12 label: _ZN2al20setRaceCameraOffsetYEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e2f8 size: 12 label: _ZN2al25setRaceCameraAngleDegreeVEPKNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e304 size: 208 label: _ZN2al14initCartCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e3d4 size: 8 label: _ZN2al14stopCartCameraEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e3dc size: 8 label: _ZN2al17restartCartCameraEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e3e4 size: 228 label: _ZN2al27initActorRailParallelCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e4c8 size: 208 label: _ZN2al24initKinopioBrigadeCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e598 size: 108 label: _ZN2al14initAnimCameraEPKNS_9LiveActorERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e604 size: 16 label: _ZN2al28validateAnimCameraAngleSwingEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e614 size: 20 label: _ZN2al30invalidateAnimCameraAngleSwingEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83e628 size: 12 label: _ZN2al23setAnimCameraBaseMtxPtrEPNS_12CameraTicketEPKN4sead8Matrix34IfEE - status: NotDecompiled + status: Matching - offset: 0x83e634 size: 132 label: _ZN2al18initEntranceCameraEPKNS_10IUseCameraERKNS_13PlacementInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e6b8 size: 140 label: _ZN2al18initEntranceCameraEPKNS_10IUseCameraERKNS_13ActorInitInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e744 size: 132 label: _ZN2al24initEntranceCameraNoSaveEPKNS_10IUseCameraERKNS_13PlacementInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83e7c8 size: 8 label: _ZN2al22setEntranceCameraParamEPNS_12CameraTicketEfRKN4sead7Vector3IfEES6_ - status: NotDecompiled + status: Matching - offset: 0x83e7d0 size: 8 label: _ZN2al23setEntranceCameraLookAtEPNS_12CameraTicketERKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83e7d8 size: 76 label: _ZN2al27invalidateEndEntranceCameraEPNS_9LiveActorE - status: NotDecompiled + status: Matching - offset: 0x83e824 size: 40 label: _ZN2al35invalidateEndEntranceCameraWithNameEPNS_10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83e84c size: 36 label: _ZN2al25validateEndEntranceCameraEPNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83e870 size: 108 label: _ZN2al23isPlayingEntranceCameraEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83e8dc size: 8 label: _ZN2al22setCameraInterpoleStepEPNS_12CameraTicketEi - status: NotDecompiled + status: Matching - offset: 0x83e8e4 size: 12 label: _ZN2al19setCameraFovyDegreeEPNS_12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83e8f0 size: 52 label: _ZN2al23createSimpleCameraInputEi - status: NotDecompiled + status: Matching - offset: 0x83e924 size: 44 label: _ZN2al14setCameraInputEPNS_10IUseCameraEPKNS_12ICameraInputE - status: NotDecompiled + status: Matching - offset: 0x83e950 size: 52 label: _ZN2al18setViewCameraInputEPNS_10IUseCameraEPKNS_12ICameraInputEi - status: NotDecompiled + status: Matching - offset: 0x83e984 size: 140 label: _ZN2al33isExistCameraInputAtDisableTimingEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83ea10 size: 72 label: _ZN2al23createActorCameraTargetEPKNS_9LiveActorEf - status: NotDecompiled + status: Matching - offset: 0x83ea58 size: 72 label: _ZN2al23createActorCameraTargetEPKNS_9LiveActorEPKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83eaa0 size: 84 label: _ZN2al28createActorJointCameraTargetEPKNS_9LiveActorEPKc - status: NotDecompiled + status: Matching - offset: 0x83eaf4 size: 68 label: _ZN2al29createActorMatrixCameraTargetEPKNS_9LiveActorEPKN4sead8Matrix34IfEE - status: NotDecompiled + status: Matching - offset: 0x83eb38 size: 8 label: _ZN2al20isActiveCameraTargetEPKNS_16CameraTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83eb40 size: 48 label: _ZN2al15setCameraTargetEPNS_10IUseCameraEPNS_16CameraTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83eb70 size: 48 label: _ZN2al17resetCameraTargetEPNS_10IUseCameraEPNS_16CameraTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83eba0 size: 72 label: _ZN2al26createActorCameraSubTargetEPKNS_9LiveActorEPKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83ebe8 size: 72 label: _ZN2al36createActorBackAroundCameraSubTargetEPKNS_9LiveActorEPKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83ec30 size: 80 label: _ZN2al26createTransCameraSubTargetEPKcPKN4sead7Vector3IfEE - status: NotDecompiled + status: Matching - offset: 0x83ec80 size: 8 label: _ZN2al28initCameraSubTargetTurnParamEPNS_19CameraSubTargetBaseEPKNS_24CameraSubTargetTurnParamE - status: NotDecompiled + status: Matching - offset: 0x83ec88 size: 8 label: _ZN2al23isActiveCameraSubTargetEPKNS_19CameraSubTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83ec90 size: 48 label: _ZN2al18setCameraSubTargetEPNS_10IUseCameraEPNS_19CameraSubTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83ecc0 size: 48 label: _ZN2al20resetCameraSubTargetEPNS_10IUseCameraEPNS_19CameraSubTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83ecf0 size: 48 label: _ZN2al27setCameraPlacementSubTargetEPNS_10IUseCameraEPNS_19CameraSubTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83ed20 size: 48 label: _ZN2al29resetCameraPlacementSubTargetEPNS_10IUseCameraEPNS_19CameraSubTargetBaseE - status: NotDecompiled + status: Matching - offset: 0x83ed50 size: 4 label: _ZN2al34getCameraDistanceRocketFlowerCurveEv - status: NotDecompiled + status: Matching - offset: 0x83ed54 size: 56 label: _ZN2al19setViewCameraTargetEPNS_10IUseCameraEPNS_16CameraTargetBaseEi - status: NotDecompiled + status: Matching - offset: 0x83ed8c size: 272 label: _ZN2al24startCameraShakeByActionEPKNS_9LiveActorEPKcS4_ii - status: NotDecompiled + status: Matching - offset: 0x83ee9c size: 220 label: _ZN2al29startCameraShakeByHitReactionEPKNS_10IUseCameraEPKcS4_S4_ii - status: NotDecompiled + status: Matching - offset: 0x83ef78 size: 48 label: _ZN2al26requestCameraLoopShakeWeakEPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83efa8 size: 52 label: _ZN16alCameraFunction22requestCameraShakeLoopEPKN2al10IUseCameraEPKc - status: NotDecompiled + status: Matching - offset: 0x83efdc size: 48 label: _ZN2al23isActiveCameraInterpoleEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f00c size: 16 label: _ZN2al23isActiveCameraInterpoleEPKNS_15SceneCameraInfoEi - status: NotDecompiled + status: Matching - offset: 0x83f01c size: 56 label: _ZN2al20startCameraInterpoleEPKNS_10IUseCameraEii - status: NotDecompiled + status: Matching - offset: 0x83f054 size: 48 label: _ZN2al28requestCancelCameraInterpoleEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f084 size: 60 label: _ZN2al33tryCalcCameraPoseWithoutInterpoleEPN4sead12LookAtCameraEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f0c0 size: 20 label: _ZN2al37invalidateCameraPoserVerticalAbsorberEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f0d4 size: 84 label: _ZN2al31requestStopCameraVerticalAbsorbEPNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f128 size: 20 label: _ZN2al30validateSnapShotCameraZoomFovyEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f13c size: 20 label: _ZN2al26validateSnapShotCameraRollEPNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f150 size: 36 label: _ZN2al29isSnapShotOrientationRotate90EPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f174 size: 36 label: _ZN2al30isSnapShotOrientationRotate270EPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f198 size: 44 label: _ZN2al17isValidCameraGyroEPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f1c4 size: 36 label: _ZN2al31isInvalidChangeSubjectiveCameraEPKNS_10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f1e8 size: 48 label: _ZN2al22isCurrentCameraZoomingEPKNS_10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f218 size: 100 label: _ZN2al15onCameraRideObjEPKNS_9LiveActorE - status: NotDecompiled + status: Matching - offset: 0x83f27c size: 100 label: _ZN2al16offCameraRideObjEPKNS_9LiveActorE - status: NotDecompiled + status: Matching - offset: 0x83f2e0 size: 8 label: _ZN2al21isExistAnimCameraDataEPKNS_12CameraTicketEPKc - status: NotDecompiled + status: Matching - offset: 0x83f2e8 size: 8 label: _ZN2al15isEndAnimCameraEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f2f0 size: 20 label: _ZN2al19isAnimCameraPlayingEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f304 size: 8 label: _ZN2al23isAnimCameraAnimPlayingEPKNS_12CameraTicketEPKc - status: NotDecompiled + status: Matching - offset: 0x83f30c size: 12 label: _ZN2al20getAnimCameraStepMaxEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f318 size: 12 label: _ZN2al17getAnimCameraStepEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f324 size: 8 label: _ZN2al25calcAnimCameraAnimStepMaxEPKNS_12CameraTicketEPKc - status: NotDecompiled + status: Matching - offset: 0x83f32c size: 16 label: _ZN2al25setAnimCameraRotateBaseUpEPKNS_12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f33c size: 188 label: _ZN16alCameraFunction10initCameraEPN2al11CameraPoserEPKNS0_10IUseCameraERKNS0_13PlacementInfoEPKci - status: NotDecompiled + status: Matching - offset: 0x83f3f8 size: 368 label: _ZN16alCameraFunction14initAreaCameraEPKN2al10IUseCameraERKNS0_13PlacementInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83f568 size: 44 label: _ZN16alCameraFunction19initForceAreaCameraEPKN2al10IUseCameraERKNS0_13PlacementInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83f594 size: 8 label: _ZN16alCameraFunction21initPriorityBossFieldEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f59c size: 8 label: _ZN16alCameraFunction19initPriorityCaptureEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5a4 size: 8 label: _ZN16alCameraFunction18initPriorityObjectEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5ac size: 8 label: _ZN16alCameraFunction31initPrioritySafetyPointRecoveryEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5b4 size: 8 label: _ZN16alCameraFunction20initPriorityDemoTalkEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5bc size: 8 label: _ZN16alCameraFunction16initPriorityDemoEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5c4 size: 8 label: _ZN16alCameraFunction17initPriorityDemo2EPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f5cc size: 52 label: _ZN16alCameraFunction29isCurrentCameraPriorityPlayerEPKN2al10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f600 size: 12 label: _ZN16alCameraFunction24setPoserNearClipDistanceEPN2al12CameraTicketEf - status: NotDecompiled + status: Matching - offset: 0x83f60c size: 48 label: _ZN16alCameraFunction19getNearClipDistanceEPKN2al10IUseCameraEi - status: NotDecompiled + status: Matching - offset: 0x83f63c size: 28 label: _ZN16alCameraFunction20validateCameraArea2DEPN2al10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f658 size: 28 label: _ZN16alCameraFunction22invalidateCameraArea2DEPN2al10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f674 size: 40 label: _ZN16alCameraFunction22validateCameraAreaKidsEPN2al10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f69c size: 32 label: _ZN16alCameraFunction21isValidCameraAreaKidsEPKN2al14CameraFlagCtrlE - status: NotDecompiled + status: Matching - offset: 0x83f6bc size: 40 label: _ZN16alCameraFunction18onSeparatePlayModeEPN2al10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f6e4 size: 36 label: _ZN16alCameraFunction19offSeparatePlayModeEPN2al10IUseCameraE - status: NotDecompiled + status: Matching - offset: 0x83f708 size: 20 label: _ZN16alCameraFunction27validateResetPoseNextCameraEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f71c size: 20 label: _ZN16alCameraFunction33validateKeepPreSelfPoseNextCameraEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f730 size: 8 label: _ZN16alCameraFunction30validateCameraInterpoleEaseOutEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f738 size: 20 label: _ZN16alCameraFunction30onForceCollideAtStartInterpoleEPN2al12CameraTicketE - status: NotDecompiled + status: Matching - offset: 0x83f74c size: 44 label: _ZN16alCameraFunction25initCameraSettingCloudSeaEPN2al10IUseCameraEf - status: NotDecompiled + status: Matching - offset: 0x83f778 size: 136 label: _ZN16alCameraFunction20initMirrorAreaCameraEPKN2al10IUseCameraERKNS0_13PlacementInfoEPKc - status: NotDecompiled + status: Matching - offset: 0x83f800 size: 8 label: _ZNK2al20TransCameraSubTarget13getTargetNameEv - status: NotDecompiled + status: Matching lazy: true - offset: 0x83f808 size: 24 label: _ZNK2al20TransCameraSubTarget9calcTransEPN4sead7Vector3IfEE - status: NotDecompiled + status: Matching lazy: true Library/Camera/CameraGyroCtrl.o: '.text': diff --git a/lib/al/Library/Camera/CameraDirector.h b/lib/al/Library/Camera/CameraDirector.h index d021594bfe..df0d1fefbf 100644 --- a/lib/al/Library/Camera/CameraDirector.h +++ b/lib/al/Library/Camera/CameraDirector.h @@ -83,6 +83,8 @@ class CameraDirector : public HioNode, public IUseExecutor { SceneCameraCtrl* getSceneCameraCtrl() const { return mSceneCameraCtrl; } + CameraTargetHolder* getTargetHolder() const { return mTargetHolder; } + CameraFlagCtrl* getFlagCtrl() const { return mFlagCtrl; } private: diff --git a/lib/al/Library/Camera/CameraDistanceCurve.h b/lib/al/Library/Camera/CameraDistanceCurve.h new file mode 100644 index 0000000000..fb2bfe98fe --- /dev/null +++ b/lib/al/Library/Camera/CameraDistanceCurve.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +namespace al { +class ByamlIter; +struct CameraDistanceAtPoint; + +class CameraDistanceCurve { +public: + CameraDistanceCurve(const char* name, const CameraDistanceAtPoint* points, s32 pointNum); + + static const CameraDistanceCurve* getDefaultCurve(); + static const CameraDistanceCurve* findOrDefaultCurve(const ByamlIter& iter); + static const CameraDistanceCurve* getRocketFlowerCurve(); + static const CameraDistanceCurve* getGiantWanderBossCurve(); + static const CameraDistanceCurve* getKoopaShellCurve(); + static const CameraDistanceCurve* getTRexPatrolCurve(); + + f32 calcDistance(f32 rate) const; + +private: + const char* mName; + const CameraDistanceAtPoint* mPoints; + s32 mPointNum; +}; + +} // namespace al diff --git a/lib/al/Library/Camera/CameraFlagCtrl.h b/lib/al/Library/Camera/CameraFlagCtrl.h index c715ff73cc..f41097d3a9 100644 --- a/lib/al/Library/Camera/CameraFlagCtrl.h +++ b/lib/al/Library/Camera/CameraFlagCtrl.h @@ -11,7 +11,7 @@ struct CameraFlagCtrl { bool isSnapShotModeRunning = false; bool isValidCameraAreaKids = false; bool isSeparatePlayMode = false; - bool _6 = false; + bool isInvalidEndEntranceCamera = false; }; } // namespace al diff --git a/lib/al/Library/Camera/CameraPoseUpdater.h b/lib/al/Library/Camera/CameraPoseUpdater.h index b83c93a3e0..416089cb55 100644 --- a/lib/al/Library/Camera/CameraPoseUpdater.h +++ b/lib/al/Library/Camera/CameraPoseUpdater.h @@ -20,7 +20,9 @@ class CameraViewFlag; class CameraViewInfo; class PauseCameraCtrl; class Projection; +struct CameraObjectRequestInfo; class SceneCameraInfo; +class CameraTurnInfo; class CameraPoseUpdater : public NerveExecutor { public: @@ -28,10 +30,32 @@ class CameraPoseUpdater : public NerveExecutor { void init(const CameraParamTransfer* paramTransfer, const CameraStopJudge* stopJudge, const CameraStartParamCtrl* startParamCtrl); + f32 getNearClipDistance() const; void update(); bool trySwitchCamera(); bool isActiveInterpole() const; void startInterpole(s32); + void requestCancelInterpole(); + bool calcCameraPoseWithoutInterpole(sead::LookAtCamera*) const; + void startSnapshotMode(bool); + void endSnapshotMode(); + bool isSnapShotOrientationRotate90() const; + bool isSnapShotOrientationRotate270() const; + void exeActive(); + void exeDeactive(); + void exeStop(); + void exePause(); + void exeSnapShot(); + void endSnapShot(); + void exeSnapShotNoUpdate(); + bool isCurrentCameraPriority(s32 priority) const; + bool isInvalidChangeSubjectiveCamera() const; + bool isCurrentCameraZooming() const; + bool isCurrentCameraEnableRotateByPad() const; + bool tryReceiveCameraRequestFromObject(const CameraObjectRequestInfo& info); + bool tryRequestCameraTurnToDirection(const CameraTurnInfo& info); + + CameraShaker* getShaker() const { return mShaker; } void setNearClipDistance(f32 distance) { mNearClipDistance = distance; } diff --git a/lib/al/Library/Camera/CameraPoser.h b/lib/al/Library/Camera/CameraPoser.h index cb2e167c2e..bc1986447f 100644 --- a/lib/al/Library/Camera/CameraPoser.h +++ b/lib/al/Library/Camera/CameraPoser.h @@ -206,6 +206,14 @@ class CameraPoser : public HioNode, CameraTargetHolder* getTargetHolder() const; CameraFlagCtrl* getFlagCtrl() const; + CameraVerticalAbsorber* getVerticalAbsorber() const { return mVerticalAbsorber; } + + SnapShotCameraCtrl* getSnapShotCtrl() const { return mSnapShotCtrl; } + + CameraPoserFlag* getPoserFlag() const { return mPoserFlag; } + + CameraAngleSwingInfo* getAngleSwingInfo() const { return mAngleSwingInfo; } + // get const sead::Vector3f& getEye() const { return mEye; } @@ -232,6 +240,8 @@ class CameraPoser : public HioNode, void setViewMtx(const sead::Matrix34f& mtx) { mViewMtx = mtx; } + void setNearClipDistance(f32 nearClipDistance) { mNearClipDistance = nearClipDistance; } + void setFovyDegree(f32 fovy) { mFovyDegree = fovy; } protected: diff --git a/lib/al/Library/Camera/CameraPoserAnim.h b/lib/al/Library/Camera/CameraPoserAnim.h index 811772030c..0743da9c01 100644 --- a/lib/al/Library/Camera/CameraPoserAnim.h +++ b/lib/al/Library/Camera/CameraPoserAnim.h @@ -28,22 +28,32 @@ class CameraPoserAnim : public CameraPoser { bool isAnimEnd() const; u32 calcStepMax(const char* animName) const; + bool isPlaying() const { return mStep >= 0; } + + s32 getStepMax() const { return mStepMax; } + + s32 getStep() const { return mStep; } + + void setRotateBaseUp() { mIsRotateBaseUp = true; } + + void setBaseMtxPtr(const sead::Matrix34f* baseMtxPtr) { mBaseMtxPtr = baseMtxPtr; } + private: Resource* mRes; nn::g3d::ResSceneAnim* mResFile; nn::g3d::CameraAnimResult* mAnimResult; f32 _158[10]; const char* mPlayingAnimName; - f32 _188; - s32 _18c; + s32 mStepMax; + s32 mStep; f32 _190; f32 _194; f32 _198; f32 _19c; - const sead::Matrix34f* _1a0; + const sead::Matrix34f* mBaseMtxPtr; f32 _1a8; bool mIsHoldZoom; - bool _1ad; + bool mIsRotateBaseUp; }; static_assert(sizeof(CameraPoserAnim) == 0x1B0); diff --git a/lib/al/Library/Camera/CameraPoserFixActor.h b/lib/al/Library/Camera/CameraPoserFixActor.h index 535c160070..8079e6d0eb 100644 --- a/lib/al/Library/Camera/CameraPoserFixActor.h +++ b/lib/al/Library/Camera/CameraPoserFixActor.h @@ -14,9 +14,29 @@ class CameraPoserFixActor : public CameraPoser { void start(const CameraStartInfo& startInfo) override; void update() override; -private: - const LiveActor* _140; - char _148[28]; + void setTargetActor(const LiveActor* actor) { mTargetActor = actor; } + + void setOffset(const sead::Vector3f& offset) { mOffset.set(offset); } + + void setDistance(f32 distance) { mDistance = distance; } + + void setAngleH(f32 angleH) { mAngleH = angleH; } + + void setAngleV(f32 angleV) { mAngleV = angleV; } + + void set_160() { _160 = true; } + + void set_161() { _161 = true; } + +protected: + const LiveActor* mTargetActor; + sead::Vector3f mOffset; + f32 mDistance; + f32 mAngleH; + f32 mAngleV; + bool _160; + bool _161; + u8 _162[2]; sead::Vector3f mPreLookAtPos; }; @@ -25,6 +45,12 @@ class CameraPoserFixTalk : public CameraPoserFixActor { CameraPoserFixTalk(const LiveActor* actor); void start(const CameraStartInfo& startInfo) override; + + void set_173(f32 distance) { _173 = distance; } + +private: + f32 _173; + u8 _174[4]; }; class CameraPoserFixFishing : public CameraPoserFixActor { @@ -40,6 +66,6 @@ class CameraPoserFixFishing : public CameraPoserFixActor { static_assert(sizeof(CameraPoserFixActor) == 0x170); static_assert(sizeof(CameraPoserFixFishing) == 0x190); -static_assert(sizeof(CameraPoserFixTalk) == 0x170); +static_assert(sizeof(CameraPoserFixTalk) == 0x178); } // namespace al diff --git a/lib/al/Library/Camera/CameraPoserFixLook.h b/lib/al/Library/Camera/CameraPoserFixLook.h index 8096d6fcc3..9404bf5fc8 100644 --- a/lib/al/Library/Camera/CameraPoserFixLook.h +++ b/lib/al/Library/Camera/CameraPoserFixLook.h @@ -8,15 +8,15 @@ class LiveActor; class CameraPoserFixLook : public CameraPoser { public: - CameraPoserFixLook(const LiveActor* actor); + CameraPoserFixLook(); void init() override; void start(const CameraStartInfo& startInfo) override; - sead::Vector3f* get_140() { return _140; } + void setTransPtr(sead::Vector3f* trans) { mTrans = trans; } private: - sead::Vector3f* _140; + sead::Vector3f* mTrans; }; static_assert(sizeof(CameraPoserFixLook) == 0x148); diff --git a/lib/al/Library/Camera/CameraPoserFixPoint.h b/lib/al/Library/Camera/CameraPoserFixPoint.h index 452d4a0fee..b0061c9a7d 100644 --- a/lib/al/Library/Camera/CameraPoserFixPoint.h +++ b/lib/al/Library/Camera/CameraPoserFixPoint.h @@ -14,10 +14,12 @@ class CameraPoserFixPoint : public CameraPoser { void update() override; void makeLookAtCamera(sead::LookAtCamera* cam) const override; + void validateUsePreCameraPos() { mIsUsePreCameraPos = true; } + private: f32 mOffsetY; sead::Vector3f mCameraPos; - bool mIsUsePrePoserPos; + bool mIsUsePreCameraPos; bool mIsKeepDistanceFromLookAt; f32 mKeepDistance; }; diff --git a/lib/al/Library/Camera/CameraPoserFlag.h b/lib/al/Library/Camera/CameraPoserFlag.h index 7846f465df..a75d08d53a 100644 --- a/lib/al/Library/Camera/CameraPoserFlag.h +++ b/lib/al/Library/Camera/CameraPoserFlag.h @@ -12,10 +12,16 @@ struct CameraPoserFlag { void load(const ByamlIter& iter); bool isValidKeepPreSelfPoseNextCamera() const; + void validateResetPoseNextCamera() { isResetPoseNextCamera = true; } + + void validateKeepPreSelfPoseNextCamera() { isOverWriteProgram = true; } + + void onForceCollideAtStartInterpole() { isForceCollideAtStartInterpole = true; } + bool isFirstCalc = true; bool isOffVerticalAbsorb = false; bool isInvalidCollider = true; - bool _3 = false; + bool isResetPoseNextCamera = false; bool isValidKeepPreSelfPoseNextCameraByParam = false; bool isOverWriteProgram = false; bool isInvalidKeepPreSelfPoseNextCameraOverWriteProgram = false; @@ -24,7 +30,7 @@ struct CameraPoserFlag { bool isValidCtrlSubjective = false; bool isInvalidChangeSubjective = false; bool isInvalidCameraBlur = false; - bool _c = false; + bool isForceCollideAtStartInterpole = false; bool isInvalidPreCameraEndAfterInterpole = false; bool isStopUpdateGyro = false; }; diff --git a/lib/al/Library/Camera/CameraSubTargetBase.h b/lib/al/Library/Camera/CameraSubTargetBase.h index 005f7943d2..9bed739b28 100644 --- a/lib/al/Library/Camera/CameraSubTargetBase.h +++ b/lib/al/Library/Camera/CameraSubTargetBase.h @@ -14,8 +14,10 @@ class CameraSubTargetBase : public CameraTargetBase { void calcFront(sead::Vector3f* front) const override; void calcVelocity(sead::Vector3f* velocity) const override; + void initTurnParam(const CameraSubTargetTurnParam* turnParam) { mTurnParam = turnParam; } + private: - CameraSubTargetTurnParam* mTurnParam; + const CameraSubTargetTurnParam* mTurnParam; }; static_assert(sizeof(CameraSubTargetBase) == 0x18); diff --git a/lib/al/Library/Camera/CameraTargetHolder.h b/lib/al/Library/Camera/CameraTargetHolder.h index 13f055925d..8579922341 100644 --- a/lib/al/Library/Camera/CameraTargetHolder.h +++ b/lib/al/Library/Camera/CameraTargetHolder.h @@ -34,6 +34,8 @@ class CameraTargetHolder { void addPlacementSubTarget(CameraSubTargetBase* subTarget); void removePlacementSubTarget(CameraSubTargetBase* subTarget); + void setViewTarget(CameraTargetBase* target, s32 index) { mViewTargetArray[index] = target; } + private: s32 mViewTargetSize = 0; CameraTargetBase** mViewTargetArray = nullptr; diff --git a/lib/al/Library/Camera/CameraTicket.h b/lib/al/Library/Camera/CameraTicket.h index 6202352603..6e6dd94fe4 100644 --- a/lib/al/Library/Camera/CameraTicket.h +++ b/lib/al/Library/Camera/CameraTicket.h @@ -3,6 +3,16 @@ #include namespace al { +class CameraPoserAnim; +class CameraPoserCart; +class CameraPoserEntrance; +class CameraPoserFixActor; +class CameraPoserFixPoint; +class CameraPoserParallelSimple; +class CameraPoserQuickTurn; +class CameraPoserRace; +class CameraPoserSubjective; +class CameraPoserTower; class CameraPoser; class CameraTicketId; @@ -28,6 +38,26 @@ class CameraTicket { CameraPoser* getPoser() const { return mPoser; } + CameraPoserAnim* getAnimPoser() const { return mAnimPoser; } + + CameraPoserCart* getCartPoser() const { return mCartPoser; } + + CameraPoserEntrance* getEntrancePoser() const { return mEntrancePoser; } + + CameraPoserFixActor* getFixActorPoser() const { return mFixActorPoser; } + + CameraPoserFixPoint* getFixPointPoser() const { return mFixPointPoser; } + + CameraPoserParallelSimple* getParallelSimplePoser() const { return mParallelSimplePoser; } + + CameraPoserQuickTurn* getQuickTurnPoser() const { return mQuickTurnPoser; } + + CameraPoserRace* getRacePoser() const { return mRacePoser; } + + CameraPoserSubjective* getSubjectivePoser() const { return mSubjectivePoser; } + + CameraPoserTower* getTowerPoser() const { return mTowerPoser; } + const CameraTicketId* getTicketId() const { return mTicketId; } s32 getPriority() const { return mPriority; } @@ -37,7 +67,20 @@ class CameraTicket { void setActiveCamera(bool isActiveCamera) { mIsActiveCamera = isActiveCamera; } private: - CameraPoser* mPoser; + union { + CameraPoser* mPoser; + CameraPoserAnim* mAnimPoser; + CameraPoserCart* mCartPoser; + CameraPoserEntrance* mEntrancePoser; + CameraPoserFixActor* mFixActorPoser; + CameraPoserFixPoint* mFixPointPoser; + CameraPoserParallelSimple* mParallelSimplePoser; + CameraPoserQuickTurn* mQuickTurnPoser; + CameraPoserRace* mRacePoser; + CameraPoserSubjective* mSubjectivePoser; + CameraPoserTower* mTowerPoser; + }; + const CameraTicketId* mTicketId; s32 mPriority; bool mIsActiveCamera = false; diff --git a/lib/al/Library/Camera/CameraUtil.cpp b/lib/al/Library/Camera/CameraUtil.cpp index 7080bfc194..e8c5b2fb4b 100644 --- a/lib/al/Library/Camera/CameraUtil.cpp +++ b/lib/al/Library/Camera/CameraUtil.cpp @@ -1,11 +1,61 @@ #include "Library/Camera/CameraUtil.h" +#include "Library/Camera/ActorCameraSubTarget.h" +#include "Library/Camera/ActorCameraTarget.h" #include "Library/Camera/CameraDirector.h" +#include "Library/Camera/CameraDistanceCurve.h" +#include "Library/Camera/CameraFlagCtrl.h" +#include "Library/Camera/CameraPoseUpdater.h" +#include "Library/Camera/CameraPoserActorRailParallel.h" +#include "Library/Camera/CameraPoserAnim.h" +#include "Library/Camera/CameraPoserFix.h" +#include "Library/Camera/CameraPoserFixActor.h" +#include "Library/Camera/CameraPoserFixLook.h" +#include "Library/Camera/CameraPoserFixPoint.h" +#include "Library/Camera/CameraPoserFlag.h" +#include "Library/Camera/CameraPoserFunction.h" +#include "Library/Camera/CameraRequestParamHolder.h" +#include "Library/Camera/CameraShaker.h" +#include "Library/Camera/CameraSubTargetBase.h" +#include "Library/Camera/CameraSwitchRequester.h" +#include "Library/Camera/CameraTargetBase.h" +#include "Library/Camera/CameraTargetHolder.h" +#include "Library/Camera/CameraTicket.h" +#include "Library/Camera/CameraViewCtrlScene.h" #include "Library/Camera/CameraViewInfo.h" +#include "Library/Camera/ICameraInput.h" #include "Library/Camera/IUseCamera.h" #include "Library/Camera/SceneCameraInfo.h" +#include "Library/Camera/SimpleCameraInput.h" +#include "Library/Camera/SnapShotCameraCtrl.h" +#include "Library/LiveActor/ActorInitUtil.h" +#include "Library/LiveActor/ActorModelFunction.h" +#include "Library/LiveActor/ActorPoseUtil.h" +#include "Library/LiveActor/ActorResourceFunction.h" +#include "Library/LiveActor/LiveActor.h" #include "Library/Math/MathUtil.h" +#include "Library/Placement/PlacementFunction.h" +#include "Library/Placement/PlacementId.h" +#include "Library/Play/Camera/ActorMatrixCameraTarget.h" +#include "Library/Play/Camera/CameraPoserBossBattle.h" +#include "Library/Play/Camera/CameraPoserCart.h" +#include "Library/Play/Camera/CameraPoserEntrance.h" +#include "Library/Play/Camera/CameraPoserFollowSimple.h" +#include "Library/Play/Camera/CameraPoserInnerTower.h" +#include "Library/Play/Camera/CameraPoserKinopioBrigade.h" +#include "Library/Play/Camera/CameraPoserLookDown.h" +#include "Library/Play/Camera/CameraPoserParallelSimple.h" +#include "Library/Play/Camera/CameraPoserProgramable.h" +#include "Library/Play/Camera/CameraPoserQuickTurn.h" +#include "Library/Play/Camera/CameraPoserRace.h" +#include "Library/Play/Camera/CameraPoserShooterSingle.h" +#include "Library/Play/Camera/CameraPoserSubjective.h" +#include "Library/Play/Camera/CameraPoserTower.h" +#include "Library/Play/Camera/CameraVerticalAbsorber.h" #include "Library/Projection/Projection.h" +#include "Library/Yaml/ByamlIter.h" +#include "Project/Camera/CameraAngleSwingInfo.h" +#include "Project/Camera/CameraObjectRequestInfo.h" namespace al { @@ -13,6 +63,13 @@ inline CameraDirector* getCameraDirector(const IUseCamera* user) { return user->getCameraDirector(); } +inline CameraSwitchRequester* getCameraSwitchRequester(const IUseCamera* user, s32 viewIdx) { + return getCameraDirector(user) + ->getSceneCameraCtrl() + ->getSceneViewAt(viewIdx) + ->getSwitchRequester(); +} + SceneCameraInfo* getSceneCameraInfo(const IUseCamera* user) { return getCameraDirector(user)->getSceneCameraInfo(); } @@ -62,6 +119,14 @@ const sead::Matrix44f& getProjectionMtx(const IUseCamera* user, s32 viewIdx) { } const sead::Matrix44f& getProjectionMtx(const SceneCameraInfo* info, s32 viewIdx) { + return *info->getViewAt(viewIdx)->getProjMtx(); +} + +const sead::Matrix44f* getProjectionMtxPtr(const IUseCamera* user, s32 viewIdx) { + return getProjectionMtxPtr(getSceneCameraInfo(user), viewIdx); +} + +const sead::Matrix44f* getProjectionMtxPtr(const SceneCameraInfo* info, s32 viewIdx) { return info->getViewAt(viewIdx)->getProjMtx(); } @@ -146,15 +211,11 @@ f32 getFar(const SceneCameraInfo* info, s32 viewIdx) { } f32 calcCameraDistance(const IUseCamera* user, s32 viewIdx) { - sead::Vector3f diff = getCameraPos(user, viewIdx) - getCameraAt(user, viewIdx); - - return diff.length(); + return (getCameraPos(user, viewIdx) - getCameraAt(user, viewIdx)).length(); } f32 calcFovxDegree(const IUseCamera* user, s32 viewIdx) { - f32 aspect = getSceneCameraInfo(user)->getViewAt(viewIdx)->getAspect(); - - return aspect * getFovyDegree(user, viewIdx); + return getSceneCameraInfo(user)->getViewAt(viewIdx)->getAspect() * getFovyDegree(user, viewIdx); } f32 calcCurrentFovyRate(const IUseCamera* user, s32 viewIdx) { @@ -166,4 +227,1313 @@ f32 calcCurrentFovyRate(const IUseCamera* user, s32 viewIdx) { return fovy / fovy2; } + +void calcCameraFront(sead::Vector3f* front, const IUseCamera* user, s32 viewIdx) { + front->set(getCameraAt(user, viewIdx) - getCameraPos(user, viewIdx)); + normalize(front); +} + +void setNearClipDistance(const IUseCamera* user, f32 distance, s32 updaterIdx) { + getCameraDirector(user)->getPoseUpdater(updaterIdx)->setNearClipDistance(distance); +} + +void setFarClipDistance(const IUseCamera* user, f32 distance, s32 updaterIdx) { + getCameraDirector(user)->getPoseUpdater(updaterIdx)->setFarClipDistance(distance); +} + +void setCurrentCameraPose(CameraPoseInfo* poseInfo, const IUseCamera* user) { + poseInfo->cameraPos.set(getCameraPos(user, 0)); + poseInfo->lookAtPos.set(getCameraAt(user, 0)); + poseInfo->cameraUp.set(getCameraUp(user, 0)); +} + +void calcCameraDir(sead::Vector3f* dir, const IUseCamera* user, s32 viewIdx) { + const sead::Matrix34f& cameraMtx = getViewMtx(user, viewIdx); + dir->set(cameraMtx.m[2][0], cameraMtx.m[2][1], cameraMtx.m[2][2]); +} + +void calcCameraLookDir(sead::Vector3f* lookDir, const IUseCamera* user, s32 viewIdx) { + calcCameraDir(lookDir, user, viewIdx); + lookDir->negate(); +} + +void calcCameraSideDir(sead::Vector3f* sideDir, const IUseCamera* user, s32 viewIdx) { + getLookAtCamera(user, viewIdx).getRightVectorByMatrix(sideDir); +} + +void calcCameraUpDir(sead::Vector3f* upDir, const IUseCamera* user, s32 viewIdx) { + getLookAtCamera(user, viewIdx).getUpVectorByMatrix(upDir); +} + +bool tryCalcCameraDir(sead::Vector3f* dir, const SceneCameraInfo* info, s32 viewIdx) { + const sead::Matrix34f& cameraMtx = getLookAtCamera(info, viewIdx).getMatrix(); + dir->set(cameraMtx.m[2][0], cameraMtx.m[2][1], cameraMtx.m[2][2]); + return tryNormalizeOrZero(dir); +} + +bool tryCalcCameraDirH(sead::Vector3f* dirH, const SceneCameraInfo* info, + const sead::Vector3f& upDir, s32 viewIdx) { + const sead::Matrix34f& cameraMtx = getLookAtCamera(info, viewIdx).getMatrix(); + sead::Vector3f dir(cameraMtx.m[2][0], cameraMtx.m[2][1], cameraMtx.m[2][2]); + verticalizeVec(dirH, upDir, dir); + return tryNormalizeOrZero(dirH); +} + +bool tryCalcCameraLookDirH(sead::Vector3f* lookDirH, const SceneCameraInfo* info, + const sead::Vector3f& upDir, s32 viewIdx) { + if (!tryCalcCameraDirH(lookDirH, info, upDir, viewIdx)) + return false; + + lookDirH->negate(); + return true; +} + +void startCamera(const IUseCamera* user, CameraTicket* ticket, s32 updaterIdx) { + getCameraSwitchRequester(user, 0)->requestStart(ticket, updaterIdx); +} + +void startCameraSub(const IUseCamera* user, CameraTicket* ticket, s32 updaterIdx) { + getCameraSwitchRequester(user, 1)->requestStart(ticket, updaterIdx); +} + +void startAnimCamera(const IUseCamera* user, CameraTicket* ticket, const char* animName, + s32 updaterIdx) { + startAnimCameraAnim(ticket, animName, -1, -1, -1); + startCamera(user, ticket, updaterIdx); +} + +void startAnimCameraAnim(CameraTicket* ticket, const char* animName, s32 startStep, s32 endStep, + s32 playStep) { + ticket->getAnimPoser()->setAnim(animName, startStep, endStep, playStep); +} + +void startAnimCameraWithStartStepAndEndStepAndPlayStep(const IUseCamera* user, CameraTicket* ticket, + const char* animName, s32 startStep, + s32 endStep, s32 playStep, s32 updaterIdx) { + startAnimCameraAnim(ticket, animName, startStep, endStep, playStep); + startCamera(user, ticket, updaterIdx); +} + +void endCamera(const IUseCamera* user, CameraTicket* ticket, s32 updaterIdx, bool isCollisionOff) { + getCameraSwitchRequester(user, 0)->requestEnd(ticket, updaterIdx, isCollisionOff); +} + +void endCameraWithNextCameraPose(const IUseCamera* user, CameraTicket* ticket, + const CameraPoseInfo* poseInfo, s32 updaterIdx) { + getCameraSwitchRequester(user, 0)->requestEndWithNextCameraPose(ticket, poseInfo, updaterIdx); +} + +void endCameraSub(const IUseCamera* user, CameraTicket* ticket, s32 updaterIdx) { + getCameraSwitchRequester(user, 1)->requestEnd(ticket, updaterIdx, false); +} + +bool isActiveCamera(const CameraTicket* ticket) { + return ticket->isActiveCamera(); +} + +bool isActiveCameraInterpole(const IUseCamera* user, s32 updaterIdx) { + return getCameraDirector(user)->getPoseUpdater(updaterIdx)->isActiveInterpole(); +} + +bool isActiveCameraInterpole(const SceneCameraInfo* info, s32 viewIdx) { + return info->getViewAt(viewIdx)->isActiveInterpole(); +} + +void startCameraInterpole(const IUseCamera* user, s32 updaterIdx, s32 step) { + getCameraDirector(user)->getPoseUpdater(updaterIdx)->startInterpole(step); +} + +void requestCancelCameraInterpole(const IUseCamera* user, s32 updaterIdx) { + getCameraDirector(user)->getPoseUpdater(updaterIdx)->requestCancelInterpole(); +} + +bool tryCalcCameraPoseWithoutInterpole(sead::LookAtCamera* camera, const IUseCamera* user, + s32 updaterIdx) { + return getCameraDirector(user) + ->getPoseUpdater(updaterIdx) + ->calcCameraPoseWithoutInterpole(camera); +} + +void invalidateCameraPoserVerticalAbsorber(CameraTicket* ticket) { + CameraVerticalAbsorber* absorber = ticket->getPoser()->getVerticalAbsorber(); + if (absorber) + absorber->invalidate(); +} + +void requestStopCameraVerticalAbsorb(IUseCamera* user) { + CameraObjectRequestInfo info; + info.angleV = 23.0f; + info.isUpToTargetAngleBySpeed = false; + info.isStopVerticalAbsorb = false; + info.isResetPosition = false; + info.isResetAngleV = false; + info.isDownToDefaultAngleBySpeed = false; + info.isMoveDownAngle = false; + info.isSetAngleV = false; + info.targetAngleV = 0.0f; + info.angleSpeed = 0.0f; + info.isStopVerticalAbsorb = true; + getCameraDirector(user)->getPoseUpdater(0)->tryReceiveCameraRequestFromObject(info); +} + +void validateSnapShotCameraZoomFovy(CameraTicket* ticket) { + ticket->getPoser()->getSnapShotCtrl()->validateZoomFovy(); +} + +void validateSnapShotCameraRoll(CameraTicket* ticket) { + ticket->getPoser()->getSnapShotCtrl()->validateRoll(); +} + +bool isSnapShotOrientationRotate90(const IUseCamera* user) { + return getCameraDirector(user)->getPoseUpdater(0)->isSnapShotOrientationRotate90(); +} + +bool isSnapShotOrientationRotate270(const IUseCamera* user) { + return getCameraDirector(user)->getPoseUpdater(0)->isSnapShotOrientationRotate270(); +} + +bool isValidCameraGyro(const IUseCamera* user) { + return !getCameraDirector(user)->getFlagCtrl()->isInvalidCameraGyro; +} + +bool isInvalidChangeSubjectiveCamera(const IUseCamera* user) { + return getCameraDirector(user)->getPoseUpdater(0)->isInvalidChangeSubjectiveCamera(); +} + +bool isCurrentCameraZooming(const IUseCamera* user, s32 updaterIdx) { + return getCameraDirector(user)->getPoseUpdater(updaterIdx)->isCurrentCameraZooming(); +} + +bool isExistAnimCameraData(const CameraTicket* ticket, const char* animName) { + return ticket->getAnimPoser()->isExistAnim(animName); +} + +bool isEndAnimCamera(const CameraTicket* ticket) { + return ticket->getAnimPoser()->isAnimEnd(); +} + +bool isAnimCameraPlaying(const CameraTicket* ticket) { + return ticket->getAnimPoser()->isPlaying(); +} + +bool isAnimCameraAnimPlaying(const CameraTicket* ticket, const char* animName) { + return ticket->getAnimPoser()->isAnimPlaying(animName); +} + +s32 getAnimCameraStepMax(const CameraTicket* ticket) { + return ticket->getAnimPoser()->getStepMax(); +} + +s32 getAnimCameraStep(const CameraTicket* ticket) { + return ticket->getAnimPoser()->getStep(); +} + +s32 calcAnimCameraAnimStepMax(const CameraTicket* ticket, const char* animName) { + return ticket->getAnimPoser()->calcStepMax(animName); +} + +void setAnimCameraRotateBaseUp(const CameraTicket* ticket) { + ticket->getAnimPoser()->setRotateBaseUp(); +} + +void setQuickTurnCameraFollow(CameraTicket* ticket) { + ticket->getQuickTurnPoser()->setFollow(); +} + +void setQuickTurnCameraRotateFast(CameraTicket* ticket) { + ticket->getQuickTurnPoser()->setRotateFast(); +} + +void setRaceCameraFrontDirPtr(const CameraTicket* ticket, const sead::Vector3f* frontDirPtr) { + ticket->getRacePoser()->setFrontDirPtr(frontDirPtr); +} + +void setRaceCameraDistance(const CameraTicket* ticket, f32 distance) { + ticket->getRacePoser()->setDistance(distance); +} + +void setRaceCameraOffsetY(const CameraTicket* ticket, f32 offsetY) { + ticket->getRacePoser()->setOffsetY(offsetY); +} + +void setRaceCameraAngleDegreeV(const CameraTicket* ticket, f32 angleV) { + ticket->getRacePoser()->setAngleDegreeV(angleV); +} + +void stopCartCamera(const CameraTicket* ticket) { + ticket->getCartPoser()->stop(); +} + +void restartCartCamera(const CameraTicket* ticket) { + ticket->getCartPoser()->restart(); +} + +void setEntranceCameraParam(CameraTicket* ticket, f32 distance, const sead::Vector3f& cameraPos, + const sead::Vector3f& lookAtPos) { + ticket->getEntrancePoser()->initParam(distance, cameraPos, lookAtPos); +} + +void setEntranceCameraLookAt(CameraTicket* ticket, const sead::Vector3f& lookAt) { + ticket->getEntrancePoser()->initLookAtPosDirect(lookAt); +} + +void invalidateEndEntranceCameraWithName(IUseCamera* user, const char*) { + getCameraDirector(user)->getFlagCtrl()->isInvalidEndEntranceCamera = true; +} + +void validateEndEntranceCamera(IUseCamera* user) { + getCameraDirector(user)->getFlagCtrl()->isInvalidEndEntranceCamera = false; +} + +bool isPlayingEntranceCamera(const IUseCamera* user, s32 updaterIdx) { + if (getCameraDirector(user)->getPoseUpdater(updaterIdx)->isCurrentCameraPriority(2)) + return true; + + return getCameraDirector(user)->getPoseUpdater(updaterIdx)->isCurrentCameraPriority(7); +} + +void setCameraInterpoleStep(CameraTicket* ticket, s32 step) { + ticket->getPoser()->setInterpoleStep(step); +} + +void setCameraFovyDegree(CameraTicket* ticket, f32 fovy) { + ticket->getPoser()->setFovyDegree(fovy); +} + +SimpleCameraInput* createSimpleCameraInput(s32 port) { + return new SimpleCameraInput(port); +} + +void setCameraInput(IUseCamera* user, const ICameraInput* cameraInput) { + getCameraDirector(user)->setCameraInput(cameraInput); +} + +void setViewCameraInput(IUseCamera* user, const ICameraInput* cameraInput, s32 inputIdx) { + getCameraDirector(user)->setViewCameraInput(cameraInput, inputIdx); +} + +bool isExistCameraInputAtDisableTiming(const IUseCamera* user, s32 inputIdx) { + if (getCameraDirector(user)->getPoseUpdater(0)->isCurrentCameraEnableRotateByPad()) + return false; + + sead::Vector2f inputStick = {0.0f, 0.0f}; + getCameraDirector(user)->getCameraInput(inputIdx)->calcInputStick(&inputStick); + return !isNearZero(inputStick, 0.001f); +} + +ActorCameraTarget* createActorCameraTarget(const LiveActor* actor, f32 distance) { + return new ActorCameraTarget(actor, distance, nullptr); +} + +ActorCameraTarget* createActorCameraTarget(const LiveActor* actor, const sead::Vector3f* offset) { + return new ActorCameraTarget(actor, 0.0f, offset); +} + +ActorMatrixCameraTarget* createActorJointCameraTarget(const LiveActor* actor, + const char* jointName) { + return new ActorMatrixCameraTarget(actor, getJointMtxPtr(actor, jointName)); +} + +ActorMatrixCameraTarget* createActorMatrixCameraTarget(const LiveActor* actor, + const sead::Matrix34f* matrix) { + return new ActorMatrixCameraTarget(actor, matrix); +} + +bool isActiveCameraTarget(const CameraTargetBase* target) { + return target->isActiveTarget(); +} + +void setCameraTarget(IUseCamera* user, CameraTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->addTarget(target); +} + +void resetCameraTarget(IUseCamera* user, CameraTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->removeTarget(target); +} + +ActorCameraSubTarget* createActorCameraSubTarget(const LiveActor* actor, + const sead::Vector3f* offset) { + ActorCameraSubTarget* target = new ActorCameraSubTarget(actor); + if (offset) + target->setOffset(offset); + return target; +} + +ActorBackAroundCameraSubTarget* createActorBackAroundCameraSubTarget(const LiveActor* actor, + const sead::Vector3f* offset) { + ActorBackAroundCameraSubTarget* target = new ActorBackAroundCameraSubTarget(actor); + if (offset) + target->setOffset(offset); + return target; +} + +TransCameraSubTarget* createTransCameraSubTarget(const char* targetName, + const sead::Vector3f* trans) { + return new TransCameraSubTarget(targetName, trans); +} + +void initCameraSubTargetTurnParam(CameraSubTargetBase* target, + const CameraSubTargetTurnParam* turnParam) { + target->initTurnParam(turnParam); +} + +bool isActiveCameraSubTarget(const CameraSubTargetBase* target) { + return target->isActiveTarget(); +} + +void setCameraSubTarget(IUseCamera* user, CameraSubTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->addSubTarget(target); +} + +void resetCameraSubTarget(IUseCamera* user, CameraSubTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->removeSubTarget(target); +} + +void setCameraPlacementSubTarget(IUseCamera* user, CameraSubTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->addPlacementSubTarget(target); +} + +void resetCameraPlacementSubTarget(IUseCamera* user, CameraSubTargetBase* target) { + getCameraDirector(user)->getTargetHolder()->removePlacementSubTarget(target); +} + +const CameraDistanceCurve* getCameraDistanceRocketFlowerCurve() { + return CameraDistanceCurve::getRocketFlowerCurve(); +} + +void setViewCameraTarget(IUseCamera* user, CameraTargetBase* target, s32 viewIdx) { + getCameraDirector(user)->getTargetHolder()->setViewTarget(target, viewIdx); +} + +void startCameraShakeByAction(const LiveActor* actor, const char* shakeName, const char* actionName, + s32 step, s32 viewIdx) { + CameraDirector* director = getCameraDirector(actor); + if (viewIdx >= 0) { + director->getPoseUpdater(viewIdx)->getShaker()->startShakeByAction( + shakeName, actor->getName(), actionName, step); + return; + } + + s32 viewNum = director->getSceneCameraInfo()->getViewNumMax(); + if (viewNum >= 1) { + for (s32 i = 0; i != viewNum; i++) { + getCameraDirector(actor)->getPoseUpdater(i)->getShaker()->startShakeByAction( + shakeName, actor->getName(), actionName, step); + } + } +} + +void startCameraShakeByHitReaction(const IUseCamera* user, const char* name, const char* unused1, + const char* unused2, s32 step, s32 viewIdx) { + CameraDirector* director = getCameraDirector(user); + if (viewIdx >= 0) { + director->getPoseUpdater(viewIdx)->getShaker()->startShakeByHitReaction(name, unused1, + unused2, step); + return; + } + + s32 viewNum = director->getSceneCameraInfo()->getViewNumMax(); + if (viewNum >= 1) { + for (s32 i = 0; i != viewNum; i++) { + getCameraDirector(user)->getPoseUpdater(i)->getShaker()->startShakeByHitReaction( + name, unused1, unused2, step); + } + } +} + +void requestCameraLoopShakeWeak(const IUseCamera* user) { + getCameraDirector(user)->getSceneCameraCtrl()->getSceneViewAt(0)->setCameraShakeLoopName("弱"); +} + +const char* TransCameraSubTarget::getTargetName() const { + return mTargetName; +} + +void TransCameraSubTarget::calcTrans(sead::Vector3f* trans) const { + trans->set(*mTrans); +} + +CameraTicket* initObjectCamera(const IUseCamera* user, const PlacementInfo& placementInfo, + const char* cameraName, const char* suffix) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return getCameraDirector(user)->createObjectCamera(createPlacementId(placementInfo), cameraName, + suffix, CameraTicket::Priority_Object, + zoneMtx); +} + +CameraTicket* initObjectCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName, const char* suffix) { + return initObjectCamera(user, getPlacementInfo(actorInitInfo), cameraName, suffix); +} + +CameraTicket* initObjectCameraNoPlacementInfo(const IUseCamera* user, const char* cameraName, + const char* suffix) { + return getCameraDirector(user)->createObjectCamera( + nullptr, cameraName, suffix, CameraTicket::Priority_Object, sead::Matrix34f::ident); +} + +CameraTicket* initFixCamera(const IUseCamera* user, const char* cameraName, + const sead::Vector3f& cameraPos, const sead::Vector3f& lookAtPos) { + CameraPoserFix* poser = new CameraPoserFix("固定"); + CameraTicket* ticket = getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); + poser->initCameraPosAndLookAtPos(cameraPos, lookAtPos); + return ticket; +} + +CameraTicket* initFixDoorwayCamera(const IUseCamera* user, const char* cameraName, + const sead::Vector3f& cameraPos, + const sead::Vector3f& lookAtPos) { + CameraPoserFix* poser = new CameraPoserFix(CameraPoserFix::getFixDoorwayCameraName()); + CameraTicket* ticket = getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); + poser->initCameraPosAndLookAtPos(cameraPos, lookAtPos); + return ticket; +} + +CameraTicket* initFixActorCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f& offset, f32 distance, + f32 angleH, f32 angleV, bool isCalcNearestAtFromPreAt) { + CameraPoserFixActor* poser = new CameraPoserFixActor(actor); + poser->setOffset(offset); + poser->setDistance(distance); + poser->setAngleH(angleH); + poser->setAngleV(angleV); + if (isCalcNearestAtFromPreAt) + poser->set_161(); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initFixLookCamera(LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserFixLook* poser = new CameraPoserFixLook(); + poser->setTransPtr(getTransPtr(actor)); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initFixTalkCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f& offset, f32 distance, + f32 talkDistance, f32 angleV, bool isAutoAroundFront) { + CameraPoserFixTalk* poser = new CameraPoserFixTalk(actor); + poser->setOffset(offset); + poser->setDistance(distance); + poser->set_173(talkDistance); + poser->setAngleV(angleV); + if (isAutoAroundFront) + poser->set_160(); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initFixFishingCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f& cameraPos, + const sead::Vector3f& lookAtPos, f32 distance, f32 paramDistance, + f32 angleV, bool isAutoAroundFront) { + CameraPoserFixFishing* poser = new CameraPoserFixFishing(actor); + poser->setDistance(distance); + poser->setAngleV(angleV); + poser->initParam(paramDistance, cameraPos, lookAtPos); + if (isAutoAroundFront) + poser->set_160(); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initFixPointCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName, bool isUsePreCameraPos) { + CameraPoserFixPoint* poser = new CameraPoserFixPoint("定点"); + if (isUsePreCameraPos) + poser->validateUsePreCameraPos(); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initLookDownCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserLookDown* poser = new CameraPoserLookDown("見下ろし"); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initProgramableCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f* pos, + const sead::Vector3f* at, const sead::Vector3f* up) { + CameraPoserProgramable* poser = new CameraPoserProgramable(pos, at, up); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initProgramableCamera(const IUseCamera* user, const char* cameraName, + const sead::Vector3f* pos, const sead::Vector3f* at, + const sead::Vector3f* up) { + CameraPoserProgramable* poser = new CameraPoserProgramable(pos, at, up); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); +} + +CameraTicket* initProgramableCameraWithCollider(const IUseCamera* user, + const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f* pos, + const sead::Vector3f* at, + const sead::Vector3f* up) { + CameraPoserProgramable* poser = new CameraPoserProgramable(pos, at, up); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + CameraTicket* ticket = getCameraDirector(user)->createCamera( + poser, placementIdPtr, cameraName, CameraTicket::Priority_Object, zoneMtx, true); + alCameraPoserFunction::initCameraArrowCollider(poser); + return ticket; +} + +CameraTicket* initProgramableAngleCamera(const IUseCamera* user, const PlacementInfo& placementInfo, + const char* cameraName, const sead::Vector3f* pos, + const f32* angleH, const f32* angleV, + const f32* distance) { + CameraPoserProgramableAngle* poser = + new CameraPoserProgramableAngle(pos, angleH, angleV, distance); + + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initProgramableCameraKeepColliderPreCamera( + const IUseCamera* user, const ActorInitInfo& actorInitInfo, const char* cameraName, + const sead::Vector3f* pos, const sead::Vector3f* at, const sead::Vector3f* up) { + CameraPoserProgramableKeepColliderPreCamera* poser = + new CameraPoserProgramableKeepColliderPreCamera(pos, at, up); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initShooterCameraSingle(const IUseCamera* user, const char* cameraName) { + CameraPoserShooterSingle* poser = new CameraPoserShooterSingle("シングルシュータカメラ"); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); +} + +CameraTicket* initTowerCameraWithSave(const IUseCamera* user, const sead::Vector3f* axis, + const ActorInitInfo& actorInitInfo, const char* cameraName) { + CameraPoserTower* poser = new CameraPoserTower("塔", axis); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initTowerCamera(const IUseCamera* user, const sead::Vector3f* axis, + const ActorInitInfo& actorInitInfo, const char* cameraName) { + CameraPoserTower* poser = new CameraPoserTower("塔", axis); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initBossBattleCamera(const IUseCamera* user, const sead::Vector3f* axis, + const ActorInitInfo& actorInitInfo, const char* cameraName) { + CameraPoserBossBattle* poser = new CameraPoserBossBattle("ボス戦カメラ", axis); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +void initProgramableCameraAngleSwing(CameraTicket* ticket) { + alCameraPoserFunction::initAngleSwing(ticket->getPoser()); +} + +CameraTicket* initFollowCameraSimple(const IUseCamera* user, const char* cameraName) { + CameraPoserFollowSimple* poser = new CameraPoserFollowSimple("フォロー"); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); +} + +CameraTicket* initFollowCameraSimple(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserFollowSimple* poser = new CameraPoserFollowSimple("フォロー"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initDemoObjectCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName, const char* suffix) { + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return getCameraDirector(user)->createObjectCamera( + createPlacementId(placementInfo), cameraName, suffix, CameraTicket::Priority_Demo, zoneMtx); +} + +CameraTicket* initDemoProgramableCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName, const sead::Vector3f* pos, + const sead::Vector3f* at, const sead::Vector3f* up) { + CameraTicket* ticket = initProgramableCamera(user, actorInitInfo, cameraName, pos, at, up); + ticket->setPriority(CameraTicket::Priority_Demo); + return ticket; +} + +CameraTicket* initDemoProgramableCameraKeepColliderPreCamera( + const IUseCamera* user, const ActorInitInfo& actorInitInfo, const char* cameraName, + const sead::Vector3f* pos, const sead::Vector3f* at, const sead::Vector3f* up) { + CameraTicket* ticket = + initProgramableCameraKeepColliderPreCamera(user, actorInitInfo, cameraName, pos, at, up); + ticket->setPriority(CameraTicket::Priority_Demo); + return ticket; +} + +CameraTicket* initDemoAnimCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const Resource* resource, const sead::Matrix34f* baseMtx, + const char* cameraName) { + CameraTicket* ticket = initAnimCamera(user, actorInitInfo, resource, baseMtx, cameraName); + ticket->setPriority(CameraTicket::Priority_Demo); + return ticket; +} + +CameraTicket* initAnimCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const Resource* resource, const sead::Matrix34f* baseMtx, + const char* cameraName) { + CameraPoserAnim* poser = new CameraPoserAnim(); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + CameraTicket* ticket = getCameraDirector(user)->createCamera( + poser, placementIdPtr, cameraName, CameraTicket::Priority_Object, zoneMtx, true); + poser->initAnimResource(resource, baseMtx); + return ticket; +} + +CameraTicket* initDemoAnimCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraTicket* ticket = initAnimCamera(actor, actorInitInfo, getAnimResource(actor), + actor->getBaseMtx(), cameraName); + ticket->setPriority(CameraTicket::Priority_Demo); + return ticket; +} + +void loadActorCameraParam(CameraTicket* ticket, const LiveActor* actor, const char* name, + const char* suffix) { + if (isExistModelOrAnimResourceYaml(actor, name, suffix)) { + ByamlIter iter(getModelOrAnimResourceYaml(actor, name, suffix)); + ticket->getPoser()->load(iter); + } +} + +void loadActorCameraParamInitFile(CameraTicket* ticket, const LiveActor* actor, + const char* suffix) { + ByamlIter iter; + if (tryGetActorInitFileIter(&iter, actor, "InitCamera", suffix)) + ticket->getPoser()->load(iter); +} + +void setFixActorCameraTarget(CameraTicket* ticket, const LiveActor* actor) { + ticket->getFixActorPoser()->setTargetActor(actor); +} + +void setFixActorCameraAngleH(CameraTicket* ticket, f32 angleH) { + ticket->getFixActorPoser()->setAngleH(angleH); +} + +void setTowerCameraDistance(CameraTicket* ticket, f32 distance) { + ticket->getTowerPoser()->setDistance(distance); +} + +void setTowerCameraStartAngleV(CameraTicket* ticket, f32 startAngleV) { + alCameraPoserFunction::setCameraStartAngleV(ticket->getPoser(), startAngleV); +} + +void setTowerCameraUserMarginAngleH(CameraTicket* ticket, f32 angleH) { + ticket->getTowerPoser()->setUserMarginAngleH(angleH); +} + +void resetTowerCameraUserMarginAngleH(CameraTicket* ticket) { + ticket->getTowerPoser()->setUserMarginAngleH(-1.0f); +} + +void resetTowerCameraInputRotate(CameraTicket* ticket, f32 angle, s32 step) { + ticket->getTowerPoser()->resetInputRotate(angle, step); +} + +CameraTicket* initSubjectiveCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserSubjective* poser = new CameraPoserSubjective("主観"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Player, zoneMtx, true); +} + +CameraTicket* initSubjectiveCameraNoSave(const IUseCamera* user, const char* cameraName) { + CameraPoserSubjective* poser = new CameraPoserSubjective("主観"); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Player, sead::Matrix34f::ident, true); +} + +f32 getSubjectiveCameraOffsetUp(const CameraTicket* ticket) { + return ticket->getSubjectivePoser()->getCameraOffsetUp(); +} + +f32 getSubjectiveCameraOffsetFront() { + return CameraPoserSubjective::getCameraOffsetFront(); +} + +void setSubjectiveCameraStartAngleH(const CameraTicket* ticket, f32 angleH) { + ticket->getSubjectivePoser()->setStartAngleH(angleH); +} + +void validateSubjectiveCameraResetAngleH(CameraTicket* ticket) { + ticket->getSubjectivePoser()->validateResetAngleH(); +} + +void requestSubjectiveCameraZoomIn(CameraTicket* ticket) { + ticket->getSubjectivePoser()->requestZoomIn(); +} + +CameraTicket* initParallelCamera(const IUseCamera* user, const char* cameraName) { + CameraPoserParallelSimple* poser = new CameraPoserParallelSimple("並行"); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); +} + +CameraTicket* initParallelCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserParallelSimple* poser = new CameraPoserParallelSimple("並行"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +void setParallelCameraLookAtOffset(const CameraTicket* ticket, const sead::Vector3f& offset) { + ticket->getParallelSimplePoser()->setLookAtOffset(offset); +} + +void setParallelCameraDistance(const CameraTicket* ticket, f32 distance) { + ticket->getParallelSimplePoser()->setDistance(distance); +} + +void setParallelCameraAngleH(const CameraTicket* ticket, f32 angleH) { + ticket->getParallelSimplePoser()->setAngleH(angleH); +} + +void setParallelCameraAngleV(const CameraTicket* ticket, f32 angleV) { + ticket->getParallelSimplePoser()->setAngleV(angleV); +} + +CameraTicket* initQuickTurnCamera(const IUseCamera* user, const char* cameraName) { + CameraPoserQuickTurn* poser = new CameraPoserQuickTurn("くるっとターン"); + return getCameraDirector(user)->createCamera( + poser, nullptr, cameraName, CameraTicket::Priority_Object, sead::Matrix34f::ident, true); +} + +CameraTicket* initRaceCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserRace* poser = new CameraPoserRace("レース"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initCartCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserCart* poser = new CameraPoserCart("カート"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initActorRailParallelCamera(const LiveActor* actor, + const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserActorRailParallel* poser = + new CameraPoserActorRailParallel("アクターレール並行", actor->getRailKeeper()); + + const IUseCamera* user = actor; + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initKinopioBrigadeCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + CameraPoserKinopioBrigade* poser = new CameraPoserKinopioBrigade("キノピオ探検隊"); + + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + PlacementId placementId; + const PlacementId* placementIdPtr = nullptr; + if (tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = createPlacementId(placementInfo); + + return getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, + CameraTicket::Priority_Object, zoneMtx, true); +} + +CameraTicket* initAnimCamera(const LiveActor* actor, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + return initAnimCamera(actor, actorInitInfo, getAnimResource(actor), actor->getBaseMtx(), + cameraName); +} + +void validateAnimCameraAngleSwing(CameraTicket* ticket) { + ticket->getPoser()->getAngleSwingInfo()->validateSwing(); +} + +void invalidateAnimCameraAngleSwing(CameraTicket* ticket) { + ticket->getPoser()->getAngleSwingInfo()->invalidateSwing(); +} + +void setAnimCameraBaseMtxPtr(CameraTicket* ticket, const sead::Matrix34f* baseMtxPtr) { + ticket->getAnimPoser()->setBaseMtxPtr(baseMtxPtr); +} + +CameraTicket* initEntranceCamera(const IUseCamera* user, const PlacementInfo& placementInfo, + const char* cameraName) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return getCameraDirector(user)->createObjectEntranceCamera(createPlacementId(placementInfo), + cameraName, zoneMtx); +} + +CameraTicket* initEntranceCamera(const IUseCamera* user, const ActorInitInfo& actorInitInfo, + const char* cameraName) { + const PlacementInfo& placementInfo = getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return getCameraDirector(user)->createObjectEntranceCamera(createPlacementId(placementInfo), + cameraName, zoneMtx); +} + +CameraTicket* initEntranceCameraNoSave(const IUseCamera* user, const PlacementInfo& placementInfo, + const char* cameraName) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return getCameraDirector(user)->createObjectEntranceCamera(createPlacementId(placementInfo), + cameraName, zoneMtx); +} + +void invalidateEndEntranceCamera(LiveActor* actor) { + invalidateEndEntranceCameraWithName(actor, actor->getName()); +} + +void onCameraRideObj(const LiveActor* actor) { + getCameraDirector(actor)->getSceneCameraCtrl()->getRequestParamHolder()->onRideObj( + actor, actor->getName()); +} + +void offCameraRideObj(const LiveActor* actor) { + getCameraDirector(actor)->getSceneCameraCtrl()->getRequestParamHolder()->offRideObj( + actor, actor->getName()); +} } // namespace al + +void validateFixPointCameraUsePreCameraPos(al::CameraTicket* ticket) { + ticket->getFixPointPoser()->validateUsePreCameraPos(); +} + +namespace alCameraFunction { +al::CameraTicket* initCameraNoPlacementInfoNoSave(al::CameraPoser* poser, + const al::IUseCamera* user, + const al::PlacementId* placementId, + const char* cameraName, s32 priority, + const sead::Matrix34f& baseMtx) { + return al::getCameraDirector(user)->createCamera(poser, placementId, cameraName, priority, + baseMtx, true); +} + +al::CameraTicket* initCameraNoSave(al::CameraPoser* poser, const al::IUseCamera* user, + const al::ActorInitInfo& actorInitInfo, const char* cameraName, + s32 priority) { + const al::PlacementInfo& placementInfo = al::getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + al::PlacementId placementId; + const al::PlacementId* placementIdPtr = nullptr; + if (al::tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = al::createPlacementId(placementInfo); + + return al::getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, priority, + zoneMtx, true); +} + +al::CameraTicket* initCamera(al::CameraPoser* poser, const al::IUseCamera* user, + const al::ActorInitInfo& actorInitInfo, const char* cameraName, + s32 priority) { + const al::PlacementInfo& placementInfo = al::getPlacementInfo(actorInitInfo); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + al::PlacementId placementId; + const al::PlacementId* placementIdPtr = nullptr; + if (al::tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = al::createPlacementId(placementInfo); + + return al::getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, priority, + zoneMtx, true); +} + +al::CameraTicket* initCameraNoSave(al::CameraPoser* poser, const al::IUseCamera* user, + const al::PlacementInfo& placementInfo, const char* cameraName, + s32 priority) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + al::PlacementId placementId; + const al::PlacementId* placementIdPtr = nullptr; + if (al::tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = al::createPlacementId(placementInfo); + + return al::getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, priority, + zoneMtx, true); +} + +al::CameraTicket* initCameraNoPlacementInfo(al::CameraPoser* poser, const al::IUseCamera* user, + const al::PlacementId* placementId, + const char* cameraName, s32 priority, + const sead::Matrix34f& baseMtx) { + return al::getCameraDirector(user)->createCamera(poser, placementId, cameraName, priority, + baseMtx, true); +} + +al::CameraTicket* initCamera(al::CameraPoser* poser, const al::IUseCamera* user, + const al::PlacementInfo& placementInfo, const char* cameraName, + s32 priority) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + + al::PlacementId placementId; + const al::PlacementId* placementIdPtr = nullptr; + if (al::tryGetPlacementId(&placementId, placementInfo)) + placementIdPtr = al::createPlacementId(placementInfo); + + return al::getCameraDirector(user)->createCamera(poser, placementIdPtr, cameraName, priority, + zoneMtx, true); +} + +al::CameraTicket* initAreaCamera(const al::IUseCamera* user, const al::PlacementInfo& placementInfo, + const char* cameraName) { + if (al::isExistLinkChild(placementInfo, "TowerCameraAxis", 0)) { + al::CameraPoserTower* poser = new al::CameraPoserTower("塔", nullptr); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + al::CameraTicket* ticket = al::getCameraDirector(user)->createCamera( + poser, al::createPlacementId(placementInfo), cameraName, 1, zoneMtx, true); + ticket->getPoser()->initByPlacementObj(placementInfo); + return ticket; + } + + if (al::isExistLinkChild(placementInfo, "InnerTowerCameraAxis", 0)) { + al::CameraPoserInnerTower* poser = new al::CameraPoserInnerTower("塔の内側"); + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + al::CameraTicket* ticket = al::getCameraDirector(user)->createCamera( + poser, al::createPlacementId(placementInfo), cameraName, 1, zoneMtx, true); + ticket->getPoser()->initByPlacementObj(placementInfo); + return ticket; + } + + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + al::CameraTicket* ticket = al::getCameraDirector(user)->createObjectCamera( + al::createPlacementId(placementInfo), cameraName, nullptr, 1, zoneMtx); + ticket->getPoser()->initByPlacementObj(placementInfo); + return ticket; +} + +al::CameraTicket* initForceAreaCamera(const al::IUseCamera* user, + const al::PlacementInfo& placementInfo, + const char* cameraName) { + al::CameraTicket* ticket = initAreaCamera(user, placementInfo, cameraName); + ticket->setPriority(al::CameraTicket::Priority_ForceArea); + return ticket; +} + +void initPriorityBossField(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_BossField); +} + +void initPriorityCapture(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_Capture); +} + +void initPriorityObject(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_Object); +} + +void initPrioritySafetyPointRecovery(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_SafetyPointRecovery); +} + +void initPriorityDemoTalk(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_DemoTalk); +} + +void initPriorityDemo(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_Demo); +} + +void initPriorityDemo2(al::CameraTicket* ticket) { + ticket->setPriority(al::CameraTicket::Priority_Demo2); +} + +void initCameraSettingCloudSea(al::IUseCamera* user, f32 distance) { + al::getCameraDirector(user)->initSettingCloudSea(distance); +} + +al::CameraTicket* initMirrorAreaCamera(const al::IUseCamera* user, + const al::PlacementInfo& placementInfo, + const char* cameraName) { + sead::Matrix34f zoneMtx = sead::Matrix34f::ident; + al::tryGetZoneMatrixTR(&zoneMtx, placementInfo); + return al::getCameraDirector(user)->createMirrorObjectCamera( + al::createPlacementId(placementInfo), cameraName, 1, zoneMtx); +} + +void setPoserNearClipDistance(al::CameraTicket* ticket, f32 distance) { + ticket->getPoser()->setNearClipDistance(distance); +} + +f32 getNearClipDistance(const al::IUseCamera* user, s32 updaterIdx) { + return al::getCameraDirector(user)->getPoseUpdater(updaterIdx)->getNearClipDistance(); +} + +bool isCurrentCameraPriorityPlayer(const al::IUseCamera* user, s32 updaterIdx) { + return al::getCameraDirector(user) + ->getPoseUpdater(updaterIdx) + ->isCurrentCameraPriority(al::CameraTicket::Priority_Player); +} + +void validateCameraArea2D(al::IUseCamera* user) { + al::getCameraDirector(user)->validateCameraArea2D(); +} + +void invalidateCameraArea2D(al::IUseCamera* user) { + al::getCameraDirector(user)->invalidateCameraArea2D(); +} + +void validateCameraAreaKids(al::IUseCamera* user) { + al::getCameraDirector(user)->getFlagCtrl()->isValidCameraAreaKids = true; +} + +bool isValidCameraAreaKids(const al::CameraFlagCtrl* flagCtrl) { + return flagCtrl->isValidCameraAreaKids || flagCtrl->isSeparatePlayMode; +} + +void onSeparatePlayMode(al::IUseCamera* user) { + al::getCameraDirector(user)->getFlagCtrl()->isSeparatePlayMode = true; +} + +void offSeparatePlayMode(al::IUseCamera* user) { + al::getCameraDirector(user)->getFlagCtrl()->isSeparatePlayMode = false; +} + +void validateResetPoseNextCamera(al::CameraTicket* ticket) { + ticket->getPoser()->getPoserFlag()->validateResetPoseNextCamera(); +} + +void validateKeepPreSelfPoseNextCamera(al::CameraTicket* ticket) { + ticket->getPoser()->getPoserFlag()->validateKeepPreSelfPoseNextCamera(); +} + +void validateCameraInterpoleEaseOut(al::CameraTicket* ticket) { + ticket->getPoser()->setInterpoleEaseOut(); +} + +void onForceCollideAtStartInterpole(al::CameraTicket* ticket) { + ticket->getPoser()->getPoserFlag()->onForceCollideAtStartInterpole(); +} + +void requestCameraShakeLoop(const al::IUseCamera* user, const char* shakeName) { + al::getCameraDirector(user)->getSceneCameraCtrl()->getSceneViewAt(0)->setCameraShakeLoopName( + shakeName); +} +} // namespace alCameraFunction diff --git a/lib/al/Library/Camera/CameraUtil.h b/lib/al/Library/Camera/CameraUtil.h index 2dad623ab5..74949d53ac 100644 --- a/lib/al/Library/Camera/CameraUtil.h +++ b/lib/al/Library/Camera/CameraUtil.h @@ -5,12 +5,13 @@ #include #include +#include "Library/Camera/CameraSubTargetBase.h" + namespace al { class CameraTicket; class ICameraInput; struct CameraFlagCtrl; class IUseCamera; -class CameraSubTargetBase; class CameraSubTargetTurnParam; class SceneCameraInfo; class PlacementId; @@ -19,7 +20,6 @@ struct ActorInitInfo; class LiveActor; class PlacementInfo; class CameraPoser; -struct CameraPoseInfo; class CameraTargetBase; class Projection; class SimpleCameraInput; @@ -27,9 +27,31 @@ class ActorCameraTarget; class ActorMatrixCameraTarget; class ActorCameraSubTarget; class ActorBackAroundCameraSubTarget; -class TransCameraSubTarget; class CameraDistanceCurve; +struct CameraPoseInfo { + sead::Vector3f cameraPos; + sead::Vector3f lookAtPos; + sead::Vector3f cameraUp; +}; + +static_assert(sizeof(CameraPoseInfo) == 0x24); + +class TransCameraSubTarget : public CameraSubTargetBase { +public: + TransCameraSubTarget(const char* targetName, const sead::Vector3f* trans) + : mTargetName(targetName), mTrans(trans) {} + + const char* getTargetName() const override; + void calcTrans(sead::Vector3f* trans) const override; + +private: + const char* mTargetName; + const sead::Vector3f* mTrans; +}; + +static_assert(sizeof(TransCameraSubTarget) == 0x28); + SceneCameraInfo* getSceneCameraInfo(const IUseCamera* user); s32 getViewNumMax(const IUseCamera* user); s32 getViewNumMax(const SceneCameraInfo* info); diff --git a/lib/al/Library/Camera/CameraViewCtrlScene.h b/lib/al/Library/Camera/CameraViewCtrlScene.h index 56e7b12874..a0474b83f6 100644 --- a/lib/al/Library/Camera/CameraViewCtrlScene.h +++ b/lib/al/Library/Camera/CameraViewCtrlScene.h @@ -12,14 +12,16 @@ class SceneCameraViewCtrl { public: SceneCameraViewCtrl(); - const CameraSwitchRequester* getSwitchRequester() const { return mSwitchRequester; } + CameraSwitchRequester* getSwitchRequester() const { return mSwitchRequester; } void resetViewName() { mViewName = nullptr; } + void setCameraShakeLoopName(const char* name) { mCameraShakeLoopName = name; } + private: CameraSwitchRequester* mSwitchRequester = nullptr; const char* mViewName = "Start"; - void* _10 = nullptr; + const char* mCameraShakeLoopName = nullptr; }; static_assert(sizeof(SceneCameraViewCtrl) == 0x18); diff --git a/lib/al/Library/Camera/CameraViewInfo.cpp b/lib/al/Library/Camera/CameraViewInfo.cpp index b4f190cce0..fc8fe9b9d3 100644 --- a/lib/al/Library/Camera/CameraViewInfo.cpp +++ b/lib/al/Library/Camera/CameraViewInfo.cpp @@ -14,8 +14,8 @@ const sead::Projection& CameraViewInfo::getProjectionSead() const { return mProjection.getProjectionSead(); } -const sead::Matrix44f& CameraViewInfo::getProjMtx() const { - return mProjection.getProjMtx(); +const sead::Matrix44f* CameraViewInfo::getProjMtx() const { + return &mProjection.getProjMtx(); } const sead::Matrix44f& CameraViewInfo::getProjMtxStd() const { diff --git a/lib/al/Library/Camera/CameraViewInfo.h b/lib/al/Library/Camera/CameraViewInfo.h index f1af388a1d..718a9d4a0b 100644 --- a/lib/al/Library/Camera/CameraViewInfo.h +++ b/lib/al/Library/Camera/CameraViewInfo.h @@ -15,7 +15,7 @@ class CameraViewInfo { const CameraViewFlag& flag, const OrthoProjectionInfo& orthoProjectionInfo); const sead::Projection& getProjectionSead() const; - const sead::Matrix44f& getProjMtx() const; + const sead::Matrix44f* getProjMtx() const; const sead::Matrix44f& getProjMtxStd() const; f32 getAspect() const; f32 getNear() const; @@ -25,6 +25,8 @@ class CameraViewInfo { bool isValid() const { return mIsValid; } + bool isActiveInterpole() const { return mIsActiveInterpole; } + const sead::LookAtCamera& getLookAtCam() const { return mLookAtCam; } const Projection& getProjection() const { return mProjection; } @@ -32,8 +34,8 @@ class CameraViewInfo { private: s32 mIndex; bool mIsValid = true; - bool mIsActiveInterpole = true; - bool _6 = false; + bool _5 = true; + bool mIsActiveInterpole = false; const sead::LookAtCamera& mLookAtCam; const Projection& mProjection; const CameraViewFlag& mViewFlag; diff --git a/lib/al/Library/Camera/SnapShotCameraCtrl.h b/lib/al/Library/Camera/SnapShotCameraCtrl.h index 6abf8d1677..f53fa70a15 100644 --- a/lib/al/Library/Camera/SnapShotCameraCtrl.h +++ b/lib/al/Library/Camera/SnapShotCameraCtrl.h @@ -32,6 +32,10 @@ class SnapShotCameraCtrl : public NerveExecutor, public IUseAudioKeeper { f32 getFovyDegree() const { return mFovyDegree; }; + void validateZoomFovy() { mIsValidZoomFovy = true; } + + void validateRoll() { mIsValidRoll = true; } + private: SnapShotCameraSceneInfo* mCameraSceneInfo; CameraParam* mParam; diff --git a/lib/al/Library/LiveActor/ActorInitFunction.cpp b/lib/al/Library/LiveActor/ActorInitFunction.cpp index 08cbce1a0b..f5be8be35b 100644 --- a/lib/al/Library/LiveActor/ActorInitFunction.cpp +++ b/lib/al/Library/LiveActor/ActorInitFunction.cpp @@ -245,14 +245,14 @@ void initActorModelKeeper(LiveActor* actor, const ActorInitInfo& info, modelKeeper->getModelCtrl()->setCameraInfo( &sceneCameraInfo->getViewAt(0)->getLookAtCam().getMatrix(), &sceneCameraInfo->getViewAt(1)->getLookAtCam().getMatrix(), - &sceneCameraInfo->getViewAt(0)->getProjMtx(), - &sceneCameraInfo->getViewAt(1)->getProjMtx()); + sceneCameraInfo->getViewAt(0)->getProjMtx(), + sceneCameraInfo->getViewAt(1)->getProjMtx()); } else { modelKeeper->getModelCtrl()->setCameraInfo( &sceneCameraInfo->getViewAt(0)->getLookAtCam().getMatrix(), &sceneCameraInfo->getViewAt(0)->getLookAtCam().getMatrix(), - &sceneCameraInfo->getViewAt(0)->getProjMtx(), - &sceneCameraInfo->getViewAt(0)->getProjMtx()); + sceneCameraInfo->getViewAt(0)->getProjMtx(), + sceneCameraInfo->getViewAt(0)->getProjMtx()); } modelKeeper->initModel( diff --git a/lib/al/Library/Play/Camera/ActorMatrixCameraTarget.h b/lib/al/Library/Play/Camera/ActorMatrixCameraTarget.h index 107c66fe8d..3fa3cb49d5 100644 --- a/lib/al/Library/Play/Camera/ActorMatrixCameraTarget.h +++ b/lib/al/Library/Play/Camera/ActorMatrixCameraTarget.h @@ -14,6 +14,8 @@ class ActorMatrixCameraTarget : public CameraTargetBase { public: ActorMatrixCameraTarget(const LiveActor*, const sead::Matrix34f*); + const char* getTargetName() const override { return "ActorMatrixCameraTarget"; } + void calcTrans(sead::Vector3f* trans) const override; void calcSide(sead::Vector3f* side) const override; void calcUp(sead::Vector3f* up) const override; @@ -24,4 +26,6 @@ class ActorMatrixCameraTarget : public CameraTargetBase { char filler[0x20]; }; +static_assert(sizeof(ActorMatrixCameraTarget) == 0x30); + } // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserCart.h b/lib/al/Library/Play/Camera/CameraPoserCart.h new file mode 100644 index 0000000000..66b75826d0 --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserCart.h @@ -0,0 +1,20 @@ +#pragma once + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserCart : public CameraPoser { +public: + CameraPoserCart(const char* name); + + void stop(); + void restart(); + +private: + u8 _140[0x10]; +}; + +static_assert(sizeof(CameraPoserCart) == 0x150); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserFollowSimple.h b/lib/al/Library/Play/Camera/CameraPoserFollowSimple.h new file mode 100644 index 0000000000..88963d5d05 --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserFollowSimple.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserFollowSimple : public CameraPoser { +public: + CameraPoserFollowSimple(const char* name); + + void loadParam(const ByamlIter& iter) override; + void start(const CameraStartInfo& startInfo) override; + void reset(); + void update() override; + +private: + u8 _140[0x10]; +}; + +static_assert(sizeof(CameraPoserFollowSimple) == 0x150); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserInnerTower.h b/lib/al/Library/Play/Camera/CameraPoserInnerTower.h new file mode 100644 index 0000000000..8f453d0cd5 --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserInnerTower.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserInnerTower : public CameraPoser { +public: + CameraPoserInnerTower(const char* name); + + void init() override; + void initByPlacementObj(const PlacementInfo& placementInfo) override; + void loadParam(const ByamlIter& iter) override; + void update() override; + void start(const CameraStartInfo& startInfo) override; + +private: + u8 _140[0x28]; +}; + +static_assert(sizeof(CameraPoserInnerTower) == 0x168); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserParallelSimple.h b/lib/al/Library/Play/Camera/CameraPoserParallelSimple.h new file mode 100644 index 0000000000..be96e95d71 --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserParallelSimple.h @@ -0,0 +1,34 @@ +#pragma once + +#include + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserParallelSimple : public CameraPoser { +public: + CameraPoserParallelSimple(const char* name); + + void init() override; + void loadParam(const ByamlIter& iter) override; + void update() override; + + void setLookAtOffset(const sead::Vector3f& offset) { mLookAtOffset.set(offset); } + + void setDistance(f32 distance) { mDistance = distance; } + + void setAngleH(f32 angleH) { mAngleH = angleH; } + + void setAngleV(f32 angleV) { mAngleV = angleV; } + +private: + sead::Vector3f mLookAtOffset; + f32 mDistance; + f32 mAngleH; + f32 mAngleV; +}; + +static_assert(sizeof(CameraPoserParallelSimple) == 0x158); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserProgramable.h b/lib/al/Library/Play/Camera/CameraPoserProgramable.h new file mode 100644 index 0000000000..ce66071845 --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserProgramable.h @@ -0,0 +1,56 @@ +#pragma once + +#include + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserProgramable : public CameraPoser { +public: + CameraPoserProgramable(); + CameraPoserProgramable(const sead::Vector3f* pos, const sead::Vector3f* at, + const sead::Vector3f* up); + + void update() override; + void setPose(const sead::Vector3f& pos, const sead::Vector3f& at, const sead::Vector3f& up); + +private: + const sead::Vector3f* mPositionPtr; + const sead::Vector3f* mLookAtPtr; + const sead::Vector3f* mUpPtr; +}; + +class CameraPoserProgramableAngle : public CameraPoser { +public: + CameraPoserProgramableAngle(const sead::Vector3f* pos, const f32* angleH, const f32* angleV, + const f32* distance); + + void update() override; + +private: + const sead::Vector3f* mPositionPtr; + const f32* mAngleHPtr; + const f32* mAngleVPtr; + const f32* mDistancePtr; +}; + +class CameraPoserProgramableKeepColliderPreCamera : public CameraPoser { +public: + CameraPoserProgramableKeepColliderPreCamera(const sead::Vector3f* pos, const sead::Vector3f* at, + const sead::Vector3f* up); + + void init() override; + void start(const CameraStartInfo& startInfo) override; + +private: + const sead::Vector3f* mPositionPtr; + const sead::Vector3f* mLookAtPtr; + const sead::Vector3f* mUpPtr; +}; + +static_assert(sizeof(CameraPoserProgramable) == 0x158); +static_assert(sizeof(CameraPoserProgramableAngle) == 0x160); +static_assert(sizeof(CameraPoserProgramableKeepColliderPreCamera) == 0x158); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserQuickTurn.h b/lib/al/Library/Play/Camera/CameraPoserQuickTurn.h new file mode 100644 index 0000000000..4e09b7a08d --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserQuickTurn.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserQuickTurn : public CameraPoser { +public: + CameraPoserQuickTurn(const char* name); + + void setFollow(); + + void setRotateFast() { mIsRotateFast = true; } + +private: + u8 _140[0x31]; + bool mIsRotateFast = false; + u8 _172[0x6]; +}; + +static_assert(sizeof(CameraPoserQuickTurn) == 0x178); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserRace.h b/lib/al/Library/Play/Camera/CameraPoserRace.h index 839a381c11..4e7fa9faf8 100644 --- a/lib/al/Library/Play/Camera/CameraPoserRace.h +++ b/lib/al/Library/Play/Camera/CameraPoserRace.h @@ -14,8 +14,21 @@ class CameraPoserRace : public CameraPoser { void calcTargetFrontLocal(sead::Vector3f*, bool) const; void update() override; + void setFrontDirPtr(const sead::Vector3f* frontDirPtr) { mFrontDirPtr = frontDirPtr; } + + void setOffsetY(f32 offsetY) { mOffsetY = offsetY; } + + void setDistance(f32 distance) { mDistance = distance; } + + void setAngleDegreeV(f32 angleV) { mAngleDegreeV = angleV; } + private: - s8 filler[0x170 - sizeof(CameraPoser)]; + const sead::Vector3f* mFrontDirPtr = nullptr; + u8 _148[0x10]; + f32 mOffsetY = 0.0f; + f32 mDistance = 0.0f; + f32 mAngleDegreeV = 0.0f; + u8 _164[0xC]; }; } // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserShooterSingle.h b/lib/al/Library/Play/Camera/CameraPoserShooterSingle.h new file mode 100644 index 0000000000..ff5298e53e --- /dev/null +++ b/lib/al/Library/Play/Camera/CameraPoserShooterSingle.h @@ -0,0 +1,20 @@ +#pragma once + +#include "Library/Camera/CameraPoser.h" + +namespace al { + +class CameraPoserShooterSingle : public CameraPoser { +public: + CameraPoserShooterSingle(const char* name); + + void loadParam(const ByamlIter& iter) override; + void update() override; + +private: + u8 _140[0x20]; +}; + +static_assert(sizeof(CameraPoserShooterSingle) == 0x160); + +} // namespace al diff --git a/lib/al/Library/Play/Camera/CameraPoserSubjective.h b/lib/al/Library/Play/Camera/CameraPoserSubjective.h index 210d39dc56..71e9c3a3b1 100644 --- a/lib/al/Library/Play/Camera/CameraPoserSubjective.h +++ b/lib/al/Library/Play/Camera/CameraPoserSubjective.h @@ -22,7 +22,11 @@ class CameraPoserSubjective : public CameraPoser { void endSnapShotMode() override; void exeWait(); void exeReset(); - f32 getCameraOffsetFront(); + + static f32 getCameraOffsetFront(); + + f32 getCameraOffsetUp() const { return mCameraOffsetUp; } + bool isZooming() const override; bool isEnableRotateByPad() const override; @@ -33,6 +37,10 @@ class CameraPoserSubjective : public CameraPoser { void setCameraOffsetUp(f32 offset) { mCameraOffsetUp = offset; } + void validateResetAngleH() { _166 = true; } + + void requestZoomIn() { _165 = true; } + private: f32 _140; f32 _144; @@ -45,6 +53,8 @@ class CameraPoserSubjective : public CameraPoser { f32 _160; bool mIsZooming; bool _165; + bool _166; + u8 _167; f32 _168; f32 _16c; f32 mMinAngleV; diff --git a/lib/al/Library/Play/Camera/CameraPoserTower.h b/lib/al/Library/Play/Camera/CameraPoserTower.h index 222b40ef8d..2332e3be75 100644 --- a/lib/al/Library/Play/Camera/CameraPoserTower.h +++ b/lib/al/Library/Play/Camera/CameraPoserTower.h @@ -21,10 +21,18 @@ class CameraPoserTower : public CameraPoser { void exeTowerInput(); void exeFollow(); + void setDistance(f32 distance) { mDistance = distance; } + + void setUserMarginAngleH(f32 angleH) { mUserMarginAngleH = angleH; } + private: - s8 filler[0x1F8 - sizeof(CameraPoser)]; + u8 _140[0x50]; + f32 mDistance; + u8 _194[0x10]; + f32 mUserMarginAngleH; + u8 _1a8[0x50]; }; -} // namespace al +static_assert(sizeof(CameraPoserTower) == 0x1F8); -static_assert(sizeof(al::CameraPoserTower) == 0x1F8, "al::CameraPoserTower size"); +} // namespace al diff --git a/lib/al/Project/Camera/CameraAngleSwingInfo.h b/lib/al/Project/Camera/CameraAngleSwingInfo.h index f3472fc301..e86a0e33a5 100644 --- a/lib/al/Project/Camera/CameraAngleSwingInfo.h +++ b/lib/al/Project/Camera/CameraAngleSwingInfo.h @@ -15,6 +15,10 @@ class CameraAngleSwingInfo { bool isInvalidSwing() const { return mIsInvalidSwing; } + void validateSwing() { mIsInvalidSwing = false; } + + void invalidateSwing() { mIsInvalidSwing = true; } + void setCurrentAngle(sead::Vector2f currentAngle) { mCurrentAngle = currentAngle; } // all of them are default-initialized in the constructor, but some can't be inlined here