mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Library/Camera: Implement CameraPoser (#398)
This commit is contained in:
parent
5ba8ccae43
commit
e91b84f0f4
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -25,6 +25,8 @@ bin/
|
|||
/cmake-build-*
|
||||
compile_commands.json
|
||||
.clangd
|
||||
manifest.json
|
||||
.lite_project.lua
|
||||
|
||||
# IDA
|
||||
*.id0
|
||||
|
|
|
|||
|
|
@ -5221,16 +5221,16 @@ Address,Quality,Size,Name
|
|||
0x00000071000cc5e4,U,000060,_ZN30CameraPoserFollowLimitFunction21calcRotateSpeedDegreeEi
|
||||
0x00000071000cc620,U,000012,_ZN30CameraPoserFollowLimitFunction23getRotateStickThresholdEv
|
||||
0x00000071000cc62c,U,000072,_ZN30CameraPoserFollowLimitFunction27isPreCameraFollowOrParallelERKN2al15CameraStartInfoE
|
||||
0x00000071000cc674,U,000004,_ZN2al11CameraPoser7endInitEv
|
||||
0x00000071000cc678,U,000012,_ZN2al11CameraPoser3endEv
|
||||
0x00000071000cc684,U,000004,_ZNK2al11CameraPoser16makeLookAtCameraEPN4sead12LookAtCameraE
|
||||
0x00000071000cc688,U,000008,_ZNK2al11CameraPoser9isZoomingEv
|
||||
0x00000071000cc690,U,000008,_ZNK2al11CameraPoser7getNameEv
|
||||
0x00000071000cc698,U,000008,_ZNK2al11CameraPoser14getNerveKeeperEv
|
||||
0x00000071000cc6a0,U,000008,_ZNK2al11CameraPoser14getAudioKeeperEv
|
||||
0x00000071000cc6a8,U,000008,_ZThn8_NK2al11CameraPoser14getAudioKeeperEv
|
||||
0x00000071000cc6b0,U,000008,_ZThn24_NK2al11CameraPoser7getNameEv
|
||||
0x00000071000cc6b8,U,000008,_ZThn32_NK2al11CameraPoser14getNerveKeeperEv
|
||||
0x00000071000cc674,O,000004,_ZN2al11CameraPoser7endInitEv
|
||||
0x00000071000cc678,O,000012,_ZN2al11CameraPoser3endEv
|
||||
0x00000071000cc684,O,000004,_ZNK2al11CameraPoser16makeLookAtCameraEPN4sead12LookAtCameraE
|
||||
0x00000071000cc688,O,000008,_ZNK2al11CameraPoser9isZoomingEv
|
||||
0x00000071000cc690,O,000008,_ZNK2al11CameraPoser7getNameEv
|
||||
0x00000071000cc698,O,000008,_ZNK2al11CameraPoser14getNerveKeeperEv
|
||||
0x00000071000cc6a0,O,000008,_ZNK2al11CameraPoser14getAudioKeeperEv
|
||||
0x00000071000cc6a8,O,000008,_ZThn8_NK2al11CameraPoser14getAudioKeeperEv
|
||||
0x00000071000cc6b0,O,000008,_ZThn24_NK2al11CameraPoser7getNameEv
|
||||
0x00000071000cc6b8,O,000008,_ZThn32_NK2al11CameraPoser14getNerveKeeperEv
|
||||
0x00000071000cc6c0,U,000020,_ZNK12_GLOBAL__N_131CameraPoserFollowLimitNrvFollow7executeEPN2al11NerveKeeperE
|
||||
0x00000071000cc6d4,U,000212,
|
||||
0x00000071000cc7a8,U,000020,_ZNK12_GLOBAL__N_130CameraPoserFollowLimitNrvWater7executeEPN2al11NerveKeeperE
|
||||
|
|
@ -5245,18 +5245,18 @@ Address,Quality,Size,Name
|
|||
0x00000071000cd264,U,000236,_ZNK18CameraPoserGetMoon14checkCollisionEPN4sead7Vector3IfEERKS2_S5_S5_
|
||||
0x00000071000cd350,U,000260,_ZN18CameraPoserGetMoon10verifyWallEv
|
||||
0x00000071000cd454,U,000292,_ZN18CameraPoserGetMoon22verifyWallOneDirectionERKN4sead7Vector3IfEE
|
||||
0x00000071000cd578,U,000004,_ZN2al11CameraPoser18initByPlacementObjERKNS_13PlacementInfoE
|
||||
0x00000071000cd57c,U,000004,_ZN2al11CameraPoser9loadParamERKNS_9ByamlIterE
|
||||
0x00000071000cd580,U,000008,_ZN2al11CameraPoser24receiveRequestFromObjectERKNS_23CameraObjectRequestInfoE
|
||||
0x00000071000cd588,U,000004,_ZN2al11CameraPoser17startSnapShotModeEv
|
||||
0x00000071000cd58c,U,000004,_ZN2al11CameraPoser15endSnapShotModeEv
|
||||
0x00000071000cd590,U,000008,_ZN2al11CameraPoser22requestTurnToDirectionEPKNS_14CameraTurnInfoE
|
||||
0x00000071000cd578,O,000004,_ZN2al11CameraPoser18initByPlacementObjERKNS_13PlacementInfoE
|
||||
0x00000071000cd57c,O,000004,_ZN2al11CameraPoser9loadParamERKNS_9ByamlIterE
|
||||
0x00000071000cd580,O,000008,_ZN2al11CameraPoser24receiveRequestFromObjectERKNS_23CameraObjectRequestInfoE
|
||||
0x00000071000cd588,O,000004,_ZN2al11CameraPoser17startSnapShotModeEv
|
||||
0x00000071000cd58c,O,000004,_ZN2al11CameraPoser15endSnapShotModeEv
|
||||
0x00000071000cd590,O,000008,_ZN2al11CameraPoser22requestTurnToDirectionEPKNS_14CameraTurnInfoE
|
||||
0x00000071000cd598,U,000088,_ZN29CameraPoserKoopaFireBeamStartC2EPKc
|
||||
0x00000071000cd5f0,U,000048,_ZN29CameraPoserKoopaFireBeamStart4initEv
|
||||
0x00000071000cd620,U,000040,_ZN29CameraPoserKoopaFireBeamStart12prepareStartERKN4sead7Vector3IfEES4_
|
||||
0x00000071000cd648,U,000500,_ZN29CameraPoserKoopaFireBeamStart5startERKN2al15CameraStartInfoE
|
||||
0x00000071000cd83c,U,000328,_ZN29CameraPoserKoopaFireBeamStart7exeWaitEv
|
||||
0x00000071000cd984,U,000004,_ZN2al11CameraPoser6updateEv
|
||||
0x00000071000cd984,O,000004,_ZN2al11CameraPoser6updateEv
|
||||
0x00000071000cd988,U,000020,_ZNK12_GLOBAL__N_136CameraPoserKoopaFireBeamStartNrvWait7executeEPN2al11NerveKeeperE
|
||||
0x00000071000cd99c,U,000180,_ZN25CameraPoserWarpCheckpointC2EPN4sead7Vector3IfEES3_S3_PKN2al9LiveActorE
|
||||
0x00000071000cda50,U,000004,_ZN25CameraPoserWarpCheckpoint4initEv
|
||||
|
|
@ -5338,7 +5338,7 @@ Address,Quality,Size,Name
|
|||
0x00000071000cf74c,O,000004,_ZNK2al12IUseExecutor4drawEv
|
||||
0x00000071000cf750,U,000008,_ZNK12_GLOBAL__N_143SafetyPointRecoveryCameraWatcherNrvDeactive7executeEPN2al11NerveKeeperE
|
||||
0x00000071000cf758,U,000004,j__ZN21alCameraPoserFunction23initCameraArrowColliderEPN2al11CameraPoserE
|
||||
0x00000071000cf75c,U,000004,_ZN2al11CameraPoser5startERKNS_15CameraStartInfoE
|
||||
0x00000071000cf75c,O,000004,_ZN2al11CameraPoser5startERKNS_15CameraStartInfoE
|
||||
0x00000071000cf760,U,000008,_ZNK12_GLOBAL__N_153SafetyPointRecoveryCameraWatcherNrvActiveObjectCamera7executeEPN2al11NerveKeeperE
|
||||
0x00000071000cf768,U,000008,_ZNK12_GLOBAL__N_141SafetyPointRecoveryCameraWatcherNrvActive7executeEPN2al11NerveKeeperE
|
||||
0x00000071000cf770,U,000008,_ZNK12_GLOBAL__N_151SafetyPointRecoveryCameraWatcherNrvActiveGoalCamera7executeEPN2al11NerveKeeperE
|
||||
|
|
@ -5384,7 +5384,7 @@ Address,Quality,Size,Name
|
|||
0x00000071000d0af8,U,000296,_ZN32ScenarioStartCameraPoserRailMove18initScenarioCameraERKN2al13PlacementInfoE
|
||||
0x00000071000d0c20,U,000440,_ZN32ScenarioStartCameraPoserRailMove9loadParamERKN2al9ByamlIterE
|
||||
0x00000071000d0dd8,U,000720,_ZN32ScenarioStartCameraPoserRailMove6updateEv
|
||||
0x00000071000d10a8,U,000004,_ZN2al11CameraPoser4initEv
|
||||
0x00000071000d10a8,O,000004,_ZN2al11CameraPoser4initEv
|
||||
0x00000071000d10ac,U,000004,_ZN14CapManHeroBase14makeActorAliveEv
|
||||
0x00000071000d10b0,U,000004,_ZN14CapManHeroBase7controlEv
|
||||
0x00000071000d10b4,U,000004,_ZN22CapManHeroDemoFunction17capManHeroControlEPN2al9LiveActorE
|
||||
|
|
@ -51357,45 +51357,45 @@ Address,Quality,Size,Name
|
|||
0x0000007100832d08,U,000012,_ZN2al19CameraParamTransfer12setFuncTableEPKNS_29NameToCameraParamTransferFuncEi
|
||||
0x0000007100832d14,U,000236,_ZNK2al19CameraParamTransfer16tryTransferParamEPNS_11CameraPoserES2_
|
||||
0x0000007100832e00,U,000168,_ZNK2al19CameraParamTransfer19tryFindTransferFuncEPKcS2_
|
||||
0x0000007100832ea8,U,000232,_ZN2al11CameraPoserC2EPKc
|
||||
0x0000007100832f90,U,000092,_ZNK2al11CameraPoser26tryCalcOrthoProjectionInfoEPNS_19OrthoProjectionInfoE
|
||||
0x0000007100832fec,U,000068,_ZNK2al11CameraPoser19isEnableRotateByPadEv
|
||||
0x0000007100832ea8,O,000232,_ZN2al11CameraPoserC2EPKc
|
||||
0x0000007100832f90,O,000092,_ZNK2al11CameraPoser26tryCalcOrthoProjectionInfoEPNS_19OrthoProjectionInfoE
|
||||
0x0000007100832fec,O,000068,_ZNK2al11CameraPoser19isEnableRotateByPadEv
|
||||
0x0000007100833030,O,000060,_ZNK2al11CameraPoser13getFovyDegreeEv
|
||||
0x000000710083306c,U,000012,_ZNK2al11CameraPoser18getSceneFovyDegreeEv
|
||||
0x0000007100833078,U,000012,_ZNK2al11CameraPoser18getAreaObjDirectorEv
|
||||
0x0000007100833084,U,000012,_ZNK2al11CameraPoser20getCollisionDirectorEv
|
||||
0x0000007100833090,U,000012,_ZThn16_NK2al11CameraPoser20getCollisionDirectorEv
|
||||
0x000000710083309c,U,000012,_ZNK2al11CameraPoser14getInputHolderEv
|
||||
0x00000071008330a8,U,000012,_ZNK2al11CameraPoser15getTargetHolderEv
|
||||
0x00000071008330b4,U,000012,_ZNK2al11CameraPoser11getFlagCtrlEv
|
||||
0x00000071008330c0,U,000024,_ZNK2al11CameraPoser12getRailRiderEv
|
||||
0x00000071008330d8,U,000024,_ZThn40_NK2al11CameraPoser12getRailRiderEv
|
||||
0x00000071008330f0,U,000020,_ZNK2al11CameraPoser27isInterpoleByCameraDistanceEv
|
||||
0x0000007100833104,U,000024,_ZNK2al11CameraPoser16getInterpoleStepEv
|
||||
0x000000710083311c,U,000020,_ZN2al11CameraPoser16setInterpoleStepEi
|
||||
0x0000007100833130,U,000024,_ZN2al11CameraPoser18resetInterpoleStepEv
|
||||
0x0000007100833148,U,000020,_ZNK2al11CameraPoser18isInterpoleEaseOutEv
|
||||
0x000000710083315c,U,000016,_ZN2al11CameraPoser19setInterpoleEaseOutEv
|
||||
0x000000710083316c,U,000020,_ZNK2al11CameraPoser20isEndInterpoleByStepEv
|
||||
0x0000007100833180,U,000012,_ZNK2al11CameraPoser19getEndInterpoleStepEv
|
||||
0x000000710083318c,U,000076,_ZN2al11CameraPoser9initNerveEPKNS_5NerveEi
|
||||
0x00000071008331d8,U,000016,_ZN2al11CameraPoser17initArrowColliderEPNS_19CameraArrowColliderE
|
||||
0x00000071008331e8,U,000048,_ZN2al11CameraPoser15initAudioKeeperEPKc
|
||||
0x0000007100833218,U,000064,_ZN2al11CameraPoser8initRailERKNS_13PlacementInfoE
|
||||
0x0000007100833258,U,000064,_ZN2al11CameraPoser18initLocalInterpoleEv
|
||||
0x0000007100833298,U,000064,_ZN2al11CameraPoser19initLookAtInterpoleEf
|
||||
0x00000071008332d8,U,000052,_ZN2al11CameraPoser24initOrthoProjectionParamEv
|
||||
0x000000710083330c,U,000040,_ZN2al11CameraPoser19tryInitAreaLimitterERKNS_13PlacementInfoE
|
||||
0x0000007100833334,U,000500,_ZN2al11CameraPoser4loadERKNS_9ByamlIterE
|
||||
0x0000007100833528,U,000012,_ZNK2al11CameraPoser11isFirstCalcEv
|
||||
0x0000007100833534,U,000228,_ZN2al11CameraPoser6appearERKNS_15CameraStartInfoE
|
||||
0x000000710083306c,O,000012,_ZNK2al11CameraPoser18getSceneFovyDegreeEv
|
||||
0x0000007100833078,O,000012,_ZNK2al11CameraPoser18getAreaObjDirectorEv
|
||||
0x0000007100833084,O,000012,_ZNK2al11CameraPoser20getCollisionDirectorEv
|
||||
0x0000007100833090,O,000012,_ZThn16_NK2al11CameraPoser20getCollisionDirectorEv
|
||||
0x000000710083309c,O,000012,_ZNK2al11CameraPoser14getInputHolderEv
|
||||
0x00000071008330a8,O,000012,_ZNK2al11CameraPoser15getTargetHolderEv
|
||||
0x00000071008330b4,O,000012,_ZNK2al11CameraPoser11getFlagCtrlEv
|
||||
0x00000071008330c0,O,000024,_ZNK2al11CameraPoser12getRailRiderEv
|
||||
0x00000071008330d8,O,000024,_ZThn40_NK2al11CameraPoser12getRailRiderEv
|
||||
0x00000071008330f0,O,000020,_ZNK2al11CameraPoser27isInterpoleByCameraDistanceEv
|
||||
0x0000007100833104,O,000024,_ZNK2al11CameraPoser16getInterpoleStepEv
|
||||
0x000000710083311c,O,000020,_ZN2al11CameraPoser16setInterpoleStepEi
|
||||
0x0000007100833130,O,000024,_ZN2al11CameraPoser18resetInterpoleStepEv
|
||||
0x0000007100833148,O,000020,_ZNK2al11CameraPoser18isInterpoleEaseOutEv
|
||||
0x000000710083315c,O,000016,_ZN2al11CameraPoser19setInterpoleEaseOutEv
|
||||
0x000000710083316c,O,000020,_ZNK2al11CameraPoser20isEndInterpoleByStepEv
|
||||
0x0000007100833180,O,000012,_ZNK2al11CameraPoser19getEndInterpoleStepEv
|
||||
0x000000710083318c,O,000076,_ZN2al11CameraPoser9initNerveEPKNS_5NerveEi
|
||||
0x00000071008331d8,O,000016,_ZN2al11CameraPoser17initArrowColliderEPNS_19CameraArrowColliderE
|
||||
0x00000071008331e8,O,000048,_ZN2al11CameraPoser15initAudioKeeperEPKc
|
||||
0x0000007100833218,O,000064,_ZN2al11CameraPoser8initRailERKNS_13PlacementInfoE
|
||||
0x0000007100833258,O,000064,_ZN2al11CameraPoser18initLocalInterpoleEv
|
||||
0x0000007100833298,O,000064,_ZN2al11CameraPoser19initLookAtInterpoleEf
|
||||
0x00000071008332d8,O,000052,_ZN2al11CameraPoser24initOrthoProjectionParamEv
|
||||
0x000000710083330c,O,000040,_ZN2al11CameraPoser19tryInitAreaLimitterERKNS_13PlacementInfoE
|
||||
0x0000007100833334,O,000500,_ZN2al11CameraPoser4loadERKNS_9ByamlIterE
|
||||
0x0000007100833528,O,000012,_ZNK2al11CameraPoser11isFirstCalcEv
|
||||
0x0000007100833534,O,000228,_ZN2al11CameraPoser6appearERKNS_15CameraStartInfoE
|
||||
0x0000007100833618,U,001096,_ZN2al11CameraPoser8movementEv
|
||||
0x0000007100833a60,U,000536,_ZNK2al11CameraPoser20makeLookAtCameraPrevEPN4sead12LookAtCameraE
|
||||
0x0000007100833c78,U,000080,_ZNK2al11CameraPoser20makeLookAtCameraPostEPN4sead12LookAtCameraE
|
||||
0x0000007100833cc8,U,000064,_ZNK2al11CameraPoser20makeLookAtCameraLastEPN4sead12LookAtCameraE
|
||||
0x0000007100833d08,U,000028,_ZNK2al11CameraPoser23makeLookAtCameraCollideEPN4sead12LookAtCameraE
|
||||
0x0000007100833d24,U,000164,_ZNK2al11CameraPoser14calcCameraPoseEPN4sead12LookAtCameraE
|
||||
0x0000007100833dc8,U,000116,_ZN2al11CameraPoser28receiveRequestFromObjectCoreERKNS_23CameraObjectRequestInfoE
|
||||
0x0000007100833a60,O,000536,_ZNK2al11CameraPoser20makeLookAtCameraPrevEPN4sead12LookAtCameraE
|
||||
0x0000007100833c78,O,000080,_ZNK2al11CameraPoser20makeLookAtCameraPostEPN4sead12LookAtCameraE
|
||||
0x0000007100833cc8,O,000064,_ZNK2al11CameraPoser20makeLookAtCameraLastEPN4sead12LookAtCameraE
|
||||
0x0000007100833d08,O,000028,_ZNK2al11CameraPoser23makeLookAtCameraCollideEPN4sead12LookAtCameraE
|
||||
0x0000007100833d24,O,000164,_ZNK2al11CameraPoser14calcCameraPoseEPN4sead12LookAtCameraE
|
||||
0x0000007100833dc8,O,000116,_ZN2al11CameraPoser28receiveRequestFromObjectCoreERKNS_23CameraObjectRequestInfoE
|
||||
0x0000007100833e3c,O,000056,_ZN2al11CameraPoser21startSnapShotModeCoreEv
|
||||
0x0000007100833e74,O,000012,_ZN2al11CameraPoser19endSnapShotModeCoreEv
|
||||
0x0000007100833e80,U,000028,_ZN2al18CameraPoserFactoryC2EPKc
|
||||
|
|
|
|||
|
Can't render this file because it is too large.
|
|
|
@ -1,22 +1,390 @@
|
|||
#include "Library/Camera/CameraPoser.h"
|
||||
|
||||
#include <gfx/seadCamera.h>
|
||||
|
||||
#include "Library/Area/AreaObjDirector.h"
|
||||
#include "Library/Audio/System/AudioKeeper.h"
|
||||
#include "Library/Base/StringUtil.h"
|
||||
#include "Library/Camera/CameraArrowCollider.h"
|
||||
#include "Library/Camera/CameraOffsetCtrlPreset.h"
|
||||
#include "Library/Camera/CameraParamMoveLimit.h"
|
||||
#include "Library/Camera/CameraPoserFlag.h"
|
||||
#include "Library/Camera/CameraPoserFunction.h"
|
||||
#include "Library/Camera/CameraPoserSceneInfo.h"
|
||||
#include "Library/Camera/CameraStartInfo.h"
|
||||
#include "Library/Camera/CameraTargetAreaLimitter.h"
|
||||
#include "Library/Camera/CameraViewCtrlGyro.h"
|
||||
#include "Library/Camera/SnapShotCameraCtrl.h"
|
||||
#include "Library/Math/MathUtil.h"
|
||||
#include "Library/Nerve/NerveKeeper.h"
|
||||
#include "Library/Play/Camera/CameraVerticalAbsorber.h"
|
||||
#include "Library/Rail/RailKeeper.h"
|
||||
#include "Library/Yaml/ByamlIter.h"
|
||||
#include "Library/Yaml/ByamlUtil.h"
|
||||
#include "Project/Camera/CameraAngleCtrlInfo.h"
|
||||
#include "Project/Camera/CameraAngleSwingInfo.h"
|
||||
#include "Project/Camera/CameraObjectRequestInfo.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
CameraPoser::CameraPoser(const char* name) : mPoserName(name) {
|
||||
mPoserFlag = new CameraPoserFlag();
|
||||
mActiveInterpoleParam = new CameraInterpoleParam();
|
||||
mEndInterpoleParam = new CameraInterpoleStep();
|
||||
};
|
||||
|
||||
void CameraPoser::init() {}
|
||||
|
||||
void CameraPoser::initByPlacementObj(const PlacementInfo& mInfo) {}
|
||||
|
||||
void CameraPoser::endInit() {}
|
||||
|
||||
void CameraPoser::start(const CameraStartInfo& mInfo) {}
|
||||
|
||||
void CameraPoser::update() {}
|
||||
|
||||
void CameraPoser::end() {
|
||||
mActiveState = ActiveState::End;
|
||||
}
|
||||
|
||||
void CameraPoser::loadParam(const ByamlIter& iter) {}
|
||||
|
||||
void CameraPoser::makeLookAtCamera(sead::LookAtCamera* cam) const {}
|
||||
|
||||
bool CameraPoser::receiveRequestFromObject(const CameraObjectRequestInfo& mInfo) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CameraPoser::isZooming() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
void CameraPoser::startSnapShotMode() {}
|
||||
|
||||
void CameraPoser::endSnapShotMode() {}
|
||||
|
||||
const char* CameraPoser::getName() const {
|
||||
return mPoserName;
|
||||
}
|
||||
|
||||
NerveKeeper* CameraPoser::getNerveKeeper() const {
|
||||
return mNerveKeeper;
|
||||
}
|
||||
|
||||
AudioKeeper* CameraPoser::getAudioKeeper() const {
|
||||
return mAudioKeeper;
|
||||
}
|
||||
|
||||
bool CameraPoser::requestTurnToDirection(const CameraTurnInfo* mInfo) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CameraPoser::tryCalcOrthoProjectionInfo(OrthoProjectionInfo* projectionInfo) const {
|
||||
OrthoProjectionParam* param = mOrthoProjectionParam;
|
||||
if (param && param->isSetInfo && param->info.nearClipWidth > 0.1f &&
|
||||
param->info.nearClipHeight > 0.1f) {
|
||||
*projectionInfo = {param->info.nearClipWidth, param->info.nearClipHeight};
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CameraPoser::isEnableRotateByPad() const {
|
||||
if (mAngleCtrlInfo != nullptr)
|
||||
return !mAngleCtrlInfo->isFixByRangeHV();
|
||||
|
||||
if (mAngleSwingInfo != nullptr)
|
||||
return !mAngleSwingInfo->isInvalidSwing();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
f32 CameraPoser::getFovyDegree() const {
|
||||
if (alCameraPoserFunction::isSnapShotMode(this) && mSnapShotCtrl)
|
||||
return mSnapShotCtrl->getFovyDegree();
|
||||
|
||||
return mFovyDegree;
|
||||
}
|
||||
|
||||
f32 CameraPoser::getSceneFovyDegree() const {
|
||||
return mSceneInfo->sceneFovyDegree;
|
||||
}
|
||||
|
||||
AreaObjDirector* CameraPoser::getAreaObjDirector() const {
|
||||
return mSceneInfo->areaObjDirector;
|
||||
}
|
||||
|
||||
CollisionDirector* CameraPoser::getCollisionDirector() const {
|
||||
return mSceneInfo->collisionDirector;
|
||||
}
|
||||
|
||||
CameraInputHolder* CameraPoser::getInputHolder() const {
|
||||
return mSceneInfo->inputHolder;
|
||||
}
|
||||
|
||||
CameraTargetHolder* CameraPoser::getTargetHolder() const {
|
||||
return mSceneInfo->targetHolder;
|
||||
}
|
||||
|
||||
CameraFlagCtrl* CameraPoser::getFlagCtrl() const {
|
||||
return mSceneInfo->flagCtrl;
|
||||
}
|
||||
|
||||
RailRider* CameraPoser::getRailRider() const {
|
||||
return mRailKeeper ? mRailKeeper->getRailRider() : nullptr;
|
||||
}
|
||||
|
||||
bool CameraPoser::isInterpoleByCameraDistance() const {
|
||||
return mActiveInterpoleParam->stepType == CameraInterpoleStepType::ByCameraDistance;
|
||||
}
|
||||
|
||||
s32 CameraPoser::getInterpoleStep() const {
|
||||
return mActiveInterpoleParam->stepNum < 0 ? 60 : mActiveInterpoleParam->stepNum;
|
||||
}
|
||||
|
||||
void CameraPoser::setInterpoleStep(s32 step) {
|
||||
mActiveInterpoleParam->set(CameraInterpoleStepType::ByStep, step, true);
|
||||
}
|
||||
|
||||
void CameraPoser::resetInterpoleStep() {
|
||||
mActiveInterpoleParam->set(CameraInterpoleStepType::ByCameraDistance, -1, false);
|
||||
}
|
||||
|
||||
bool CameraPoser::isInterpoleEaseOut() const {
|
||||
return mActiveInterpoleParam->isEaseOut;
|
||||
}
|
||||
|
||||
void CameraPoser::setInterpoleEaseOut() {
|
||||
mActiveInterpoleParam->isEaseOut = true;
|
||||
}
|
||||
|
||||
bool CameraPoser::isEndInterpoleByStep() const {
|
||||
return mEndInterpoleParam->stepType == CameraInterpoleStepType::ByStep;
|
||||
}
|
||||
|
||||
s32 CameraPoser::getEndInterpoleStep() const {
|
||||
return mEndInterpoleParam->stepNum;
|
||||
}
|
||||
|
||||
void CameraPoser::initNerve(const Nerve* nerve, s32 maxStates) {
|
||||
mNerveKeeper = new NerveKeeper(this, nerve, maxStates);
|
||||
}
|
||||
|
||||
void CameraPoser::initArrowCollider(CameraArrowCollider* arrowCollider) {
|
||||
mArrowCollider = arrowCollider;
|
||||
mPoserFlag->isInvalidCollider = false;
|
||||
}
|
||||
|
||||
void CameraPoser::initAudioKeeper(const char* name) {
|
||||
mAudioKeeper =
|
||||
alAudioKeeperFunction::createAudioKeeper(mSceneInfo->audioDirector, name, nullptr);
|
||||
}
|
||||
|
||||
void CameraPoser::initRail(const PlacementInfo& mInfo) {
|
||||
mRailKeeper = new RailKeeper(mInfo);
|
||||
}
|
||||
|
||||
void CameraPoser::initLocalInterpole() {
|
||||
mLocalInterpole = new LocalInterpole();
|
||||
}
|
||||
|
||||
void CameraPoser::initLookAtInterpole(f32 v) {
|
||||
mLookAtInterpole = new LookAtInterpole(v);
|
||||
}
|
||||
|
||||
void CameraPoser::initOrthoProjectionParam() {
|
||||
mOrthoProjectionParam = new OrthoProjectionParam();
|
||||
}
|
||||
|
||||
void CameraPoser::tryInitAreaLimitter(const PlacementInfo& mInfo) {
|
||||
mTargetAreaLimitter = CameraTargetAreaLimitter::tryCreate(mInfo);
|
||||
}
|
||||
|
||||
inline void CameraPoser::CameraInterpoleParam::set(CameraInterpoleStepType type, s32 step,
|
||||
bool is_interpolate_by_step) {
|
||||
stepType = type;
|
||||
stepNum = step;
|
||||
isInterpolateByStep = is_interpolate_by_step;
|
||||
}
|
||||
|
||||
inline void CameraPoser::CameraInterpoleParam::load(const ByamlIter& iter) {
|
||||
tryGetByamlS32((s32*)&stepType, iter, "InterpoleStepType");
|
||||
|
||||
const char* curveType = nullptr;
|
||||
if (tryGetByamlString(&curveType, iter, "InterpoleCurveType") != 0 && curveType &&
|
||||
isEqualString(curveType, "EaseOut"))
|
||||
isEaseOut = true;
|
||||
|
||||
isInterpolateByStep = tryGetByamlS32(&stepNum, iter, "InterpoleStep");
|
||||
if (isInterpolateByStep)
|
||||
stepType = CameraInterpoleStepType::ByStep;
|
||||
}
|
||||
|
||||
inline void CameraPoser::CameraInterpoleStep::load(const ByamlIter& iter) {
|
||||
ByamlIter newIter;
|
||||
if (tryGetByamlIterByKey(&newIter, iter, "EndInterpoleParam")) {
|
||||
if (isEqualString(getByamlKeyString(newIter, "Type"), "Step"))
|
||||
stepType = CameraInterpoleStepType::ByStep;
|
||||
if (stepType == CameraInterpoleStepType::ByStep)
|
||||
stepNum = getByamlKeyInt(newIter, "Step");
|
||||
}
|
||||
}
|
||||
|
||||
inline void CameraPoser::OrthoProjectionParam::load(const ByamlIter& iter) {
|
||||
bool isExist = tryGetByamlBool(&isSetInfo, iter, "IsSetOrthoProjectionInfo");
|
||||
|
||||
if (isExist && isSetInfo) {
|
||||
tryGetByamlF32(&info.nearClipWidth, iter, "OrthoProjectionNearClipWidth");
|
||||
tryGetByamlF32(&info.nearClipHeight, iter, "OrthoProjectionNearClipHeight");
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPoser::load(const ByamlIter& iter) {
|
||||
loadParam(iter);
|
||||
tryGetByamlF32(&mFovyDegree, iter, "FovyDegree");
|
||||
|
||||
mPoserFlag->load(iter);
|
||||
mActiveInterpoleParam->load(iter);
|
||||
mEndInterpoleParam->load(iter);
|
||||
|
||||
if (mVerticalAbsorber != nullptr)
|
||||
mVerticalAbsorber->load(iter);
|
||||
|
||||
if (mAngleCtrlInfo != nullptr)
|
||||
mAngleCtrlInfo->load(iter);
|
||||
|
||||
if (mAngleSwingInfo != nullptr)
|
||||
mAngleSwingInfo->load(iter);
|
||||
|
||||
if (mOffsetCtrlPreset != nullptr)
|
||||
mOffsetCtrlPreset->load(iter);
|
||||
|
||||
if (mParamMoveLimit != nullptr)
|
||||
mParamMoveLimit->load(iter);
|
||||
|
||||
if (mSnapShotCtrl != nullptr)
|
||||
mSnapShotCtrl->load(iter);
|
||||
|
||||
if (mOrthoProjectionParam != nullptr)
|
||||
mOrthoProjectionParam->load(iter);
|
||||
}
|
||||
|
||||
bool CameraPoser::isFirstCalc() const {
|
||||
return mPoserFlag->isFirstCalc;
|
||||
}
|
||||
|
||||
void CameraPoser::appear(const CameraStartInfo& mInfo) {
|
||||
mActiveState = ActiveState::Active;
|
||||
if (mAngleCtrlInfo != nullptr) {
|
||||
sead::Vector3f vec = {0, 0, 0};
|
||||
alCameraPoserFunction::calcPreCameraDir(&vec, this);
|
||||
mAngleCtrlInfo->start(sead::Mathf::rad2deg(asinf(vec.y)));
|
||||
}
|
||||
|
||||
if (mAngleSwingInfo != nullptr)
|
||||
mAngleSwingInfo->setCurrentAngle({0, 0});
|
||||
|
||||
start(mInfo);
|
||||
|
||||
if (mArrowCollider != nullptr && !mPoserFlag->isInvalidCollider)
|
||||
mArrowCollider->start();
|
||||
|
||||
if (mVerticalAbsorber != nullptr && !mPoserFlag->isOffVerticalAbsorb)
|
||||
mVerticalAbsorber->start(mTargetTrans, mInfo);
|
||||
|
||||
if (mLookAtInterpole != nullptr)
|
||||
mLookAtInterpole->lookAtPos.set(mTargetTrans);
|
||||
}
|
||||
|
||||
// TODO: CameraPoser::movement
|
||||
|
||||
inline void CameraPoser::LocalInterpole::interpolate(sead::LookAtCamera* cam) {
|
||||
if (step > -1) {
|
||||
f32 rate = hermiteRate(normalize(step, 0, end), 1.5f, 0.0f);
|
||||
|
||||
sead::Vector3f camPosNext = sead::Vector3f(0, 0, 0);
|
||||
sead::Vector3f lookAtPosNext = sead::Vector3f(0, 0, 0);
|
||||
lerpVec(&camPosNext, prevCameraPos, cam->getPos(), rate);
|
||||
lerpVec(&lookAtPosNext, prevLookAtPos, cam->getAt(), rate);
|
||||
|
||||
cam->setPos(camPosNext);
|
||||
cam->setAt(lookAtPosNext);
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPoser::makeLookAtCameraPrev(sead::LookAtCamera* cam) const {
|
||||
cam->setPos(mPosition);
|
||||
cam->setAt(mTargetTrans);
|
||||
cam->setUp(mCameraUp);
|
||||
cam->normalizeUp();
|
||||
|
||||
if (mVerticalAbsorber != nullptr && !mPoserFlag->isOffVerticalAbsorb)
|
||||
mVerticalAbsorber->makeLookAtCamera(cam);
|
||||
|
||||
if (mLocalInterpole != nullptr)
|
||||
mLocalInterpole->interpolate(cam);
|
||||
|
||||
if (mAngleSwingInfo != nullptr)
|
||||
mAngleSwingInfo->makeLookAtCamera(cam);
|
||||
|
||||
if (mTargetAreaLimitter != nullptr) {
|
||||
sead::Vector3f camPosNext = cam->getAt();
|
||||
if (mTargetAreaLimitter->applyAreaLimit(&camPosNext, camPosNext)) {
|
||||
sead::Vector3f camDiff = camPosNext - cam->getAt();
|
||||
cam->setPos(camDiff + cam->getPos());
|
||||
cam->setAt(camDiff + cam->getAt());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CameraPoser::makeLookAtCameraPost(sead::LookAtCamera* cam) const {
|
||||
if (alCameraPoserFunction::isSnapShotMode(this) && mSnapShotCtrl != nullptr)
|
||||
mSnapShotCtrl->makeLookAtCameraPost(cam);
|
||||
|
||||
if (mParamMoveLimit != nullptr)
|
||||
mParamMoveLimit->apply(cam);
|
||||
}
|
||||
|
||||
void CameraPoser::makeLookAtCameraLast(sead::LookAtCamera* cam) const {
|
||||
if (alCameraPoserFunction::isSnapShotMode(this) && mSnapShotCtrl != nullptr)
|
||||
mSnapShotCtrl->makeLookAtCameraLast((cam));
|
||||
}
|
||||
|
||||
void CameraPoser::makeLookAtCameraCollide(sead::LookAtCamera* cam) const {
|
||||
if (!mPoserFlag->isInvalidCollider && mArrowCollider)
|
||||
mArrowCollider->makeLookAtCamera(cam);
|
||||
}
|
||||
|
||||
void CameraPoser::calcCameraPose(sead::LookAtCamera* cam) const {
|
||||
makeLookAtCameraPrev(cam);
|
||||
makeLookAtCamera(cam);
|
||||
makeLookAtCameraPost(cam);
|
||||
makeLookAtCameraCollide(cam);
|
||||
makeLookAtCameraLast(cam);
|
||||
}
|
||||
|
||||
bool CameraPoser::receiveRequestFromObjectCore(const CameraObjectRequestInfo& mInfo) {
|
||||
if (receiveRequestFromObject(mInfo))
|
||||
return true;
|
||||
|
||||
if (mVerticalAbsorber != nullptr && mInfo.isStopVerticalAbsorb) {
|
||||
mVerticalAbsorber->liberateAbsorb();
|
||||
return true;
|
||||
}
|
||||
if (mAngleCtrlInfo != nullptr && mAngleCtrlInfo->receiveRequestFromObject(mInfo))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CameraPoser::startSnapShotModeCore() {
|
||||
if (mSnapshotCtrl)
|
||||
mSnapshotCtrl->start(mFovyDegree);
|
||||
if (mSnapShotCtrl != nullptr)
|
||||
mSnapShotCtrl->start(mFovyDegree);
|
||||
|
||||
startSnapShotMode();
|
||||
}
|
||||
|
||||
void CameraPoser::endSnapShotModeCore() {
|
||||
endSnapShotMode();
|
||||
}
|
||||
|
||||
f32 CameraPoser::getFovyDegree() const {
|
||||
if (alCameraPoserFunction::isSnapShotMode(this) && mSnapshotCtrl)
|
||||
return mSnapshotCtrl->getFovyDegree();
|
||||
return mFovyDegree;
|
||||
}
|
||||
} // namespace al
|
||||
|
|
|
|||
|
|
@ -11,26 +11,37 @@
|
|||
#include "Library/HostIO/HioNode.h"
|
||||
#include "Library/HostIO/IUseName.h"
|
||||
#include "Library/Nerve/IUseNerve.h"
|
||||
#include "Library/Projection/OrthoProjectionInfo.h"
|
||||
#include "Library/Rail/IUseRail.h"
|
||||
|
||||
namespace al {
|
||||
class CameraVerticalAbsorber;
|
||||
class AudioDirector;
|
||||
class ByamlIter;
|
||||
class CameraAngleCtrlInfo;
|
||||
class CameraAngleSwingInfo;
|
||||
class CameraArrowCollider;
|
||||
class CameraFlagCtrl;
|
||||
class CameraInputHolder;
|
||||
class CameraOffsetCtrlPreset;
|
||||
class CameraParamMoveLimit;
|
||||
class GyroCameraCtrl;
|
||||
class CameraViewInfo;
|
||||
struct CameraStartInfo;
|
||||
class CameraObjectRequestInfo;
|
||||
class CameraRequestParamHolder;
|
||||
class CameraTargetAreaLimitter;
|
||||
class CameraTargetCollideInfoHolder;
|
||||
class CameraTargetHolder;
|
||||
class CameraTurnInfo;
|
||||
struct CameraPoserFlag;
|
||||
class RailKeeper;
|
||||
class PlacementInfo;
|
||||
class ByamlIter;
|
||||
class CameraVerticalAbsorber;
|
||||
class CameraViewInfo;
|
||||
class GyroCameraCtrl;
|
||||
class Nerve;
|
||||
class PlacementInfo;
|
||||
class RailKeeper;
|
||||
class SnapShotCameraCtrl;
|
||||
struct CameraObjectRequestInfo;
|
||||
struct CameraPoserFlag;
|
||||
struct CameraPoserSceneInfo;
|
||||
struct CameraStartInfo;
|
||||
struct OrthoProjectionInfo;
|
||||
struct SnapShotCameraSceneInfo;
|
||||
|
||||
class CameraPoser : public HioNode,
|
||||
public IUseAreaObj,
|
||||
|
|
@ -40,8 +51,72 @@ class CameraPoser : public HioNode,
|
|||
public IUseNerve,
|
||||
public IUseRail {
|
||||
public:
|
||||
CameraPoser(const char* poserName);
|
||||
enum class ActiveState : s32 {
|
||||
Start = 0,
|
||||
Active = 1,
|
||||
End = 2,
|
||||
};
|
||||
|
||||
enum class CameraInterpoleStepType : s32 {
|
||||
Undefined = -1,
|
||||
ByStep = 0,
|
||||
ByCameraDistance = 1,
|
||||
};
|
||||
|
||||
struct LocalInterpole {
|
||||
inline void interpolate(sead::LookAtCamera* cam);
|
||||
|
||||
s32 step = -1;
|
||||
s32 end = 0;
|
||||
sead::Vector3f prevCameraPos = {0, 0, 0};
|
||||
sead::Vector3f prevLookAtPos = {0, 0, 0};
|
||||
};
|
||||
|
||||
static_assert(sizeof(LocalInterpole) == 0x20);
|
||||
|
||||
struct LookAtInterpole {
|
||||
inline LookAtInterpole(f32 v) : _c(v) {}
|
||||
|
||||
sead::Vector3f lookAtPos = {0.0f, 0.0f, 0.0f};
|
||||
f32 _c;
|
||||
};
|
||||
|
||||
static_assert(sizeof(LookAtInterpole) == 0x10);
|
||||
|
||||
struct CameraInterpoleStep {
|
||||
inline void load(const ByamlIter& iter);
|
||||
|
||||
CameraInterpoleStepType stepType = CameraInterpoleStepType::Undefined;
|
||||
s32 stepNum = -1;
|
||||
};
|
||||
|
||||
static_assert(sizeof(CameraInterpoleStep) == 0x8);
|
||||
|
||||
struct CameraInterpoleParam : public CameraInterpoleStep {
|
||||
inline CameraInterpoleParam()
|
||||
: CameraInterpoleStep({CameraInterpoleStepType::ByCameraDistance}) {}
|
||||
|
||||
inline void load(const ByamlIter& iter);
|
||||
inline void set(CameraInterpoleStepType type, s32 step, bool isInterpolate);
|
||||
|
||||
s8 isEaseOut = false;
|
||||
bool isInterpolateByStep = false;
|
||||
};
|
||||
|
||||
static_assert(sizeof(CameraInterpoleParam) == 0xC);
|
||||
|
||||
struct OrthoProjectionParam {
|
||||
OrthoProjectionParam() {}
|
||||
|
||||
inline void load(const ByamlIter& iter);
|
||||
|
||||
bool isSetInfo = false;
|
||||
OrthoProjectionInfo info;
|
||||
};
|
||||
|
||||
static_assert(sizeof(OrthoProjectionParam) == 0xC);
|
||||
|
||||
CameraPoser(const char* poserName);
|
||||
virtual AreaObjDirector* getAreaObjDirector() const override;
|
||||
virtual void init();
|
||||
virtual void initByPlacementObj(const PlacementInfo&);
|
||||
|
|
@ -51,7 +126,7 @@ public:
|
|||
virtual void end();
|
||||
virtual void loadParam(const ByamlIter&);
|
||||
virtual void makeLookAtCamera(sead::LookAtCamera*) const;
|
||||
virtual void receiveRequestFromObject(const CameraObjectRequestInfo&);
|
||||
virtual bool receiveRequestFromObject(const CameraObjectRequestInfo&);
|
||||
virtual bool isZooming() const;
|
||||
virtual bool isEnableRotateByPad() const;
|
||||
virtual void startSnapShotMode();
|
||||
|
|
@ -63,82 +138,103 @@ public:
|
|||
virtual AudioKeeper* getAudioKeeper() const override;
|
||||
virtual RailRider* getRailRider() const override;
|
||||
|
||||
virtual void load(const ByamlIter&);
|
||||
virtual void movement();
|
||||
virtual void calcCameraPose(sead::LookAtCamera*) const;
|
||||
virtual void requestTurnToDirection(const CameraTurnInfo*);
|
||||
virtual void load(const ByamlIter& iter);
|
||||
virtual void movement(); // TODO: implementation missing
|
||||
virtual void calcCameraPose(sead::LookAtCamera* cam) const;
|
||||
virtual bool requestTurnToDirection(const CameraTurnInfo*);
|
||||
|
||||
void appear(const CameraStartInfo& startInfo);
|
||||
bool receiveRequestFromObjectCore(const CameraObjectRequestInfo& objRequestInfo);
|
||||
|
||||
bool isInterpoleByCameraDistance() const;
|
||||
bool isInterpoleEaseOut() const;
|
||||
bool isEndInterpoleByStep() const;
|
||||
bool isFirstCalc() const;
|
||||
|
||||
void initNerve(const Nerve*, s32);
|
||||
void initArrowCollider(CameraArrowCollider*);
|
||||
void initAudioKeeper(const char*);
|
||||
void initRail(const PlacementInfo&);
|
||||
void initNerve(const Nerve* nerve, s32 maxStates);
|
||||
void initArrowCollider(CameraArrowCollider* arrowCollider);
|
||||
void initAudioKeeper(const char* name);
|
||||
void initRail(const PlacementInfo& placementInfo);
|
||||
void initLocalInterpole();
|
||||
void initLookAtInterpole(f32);
|
||||
void initOrthoProjectionParam();
|
||||
void tryInitAreaLimitter(const PlacementInfo&);
|
||||
void tryInitAreaLimitter(const PlacementInfo& placementInfo);
|
||||
bool tryCalcOrthoProjectionInfo(OrthoProjectionInfo* projectionInfo) const;
|
||||
|
||||
void makeLookAtCameraPrev(sead::LookAtCamera*) const;
|
||||
void makeLookAtCameraPost(sead::LookAtCamera*) const;
|
||||
void makeLookAtCameraLast(sead::LookAtCamera*) const;
|
||||
void makeLookAtCameraCollide(sead::LookAtCamera*) const;
|
||||
void makeLookAtCameraPrev(sead::LookAtCamera* cam) const;
|
||||
void makeLookAtCameraPost(sead::LookAtCamera* cam) const;
|
||||
void makeLookAtCameraLast(sead::LookAtCamera* cam) const;
|
||||
void makeLookAtCameraCollide(sead::LookAtCamera* cam) const;
|
||||
|
||||
void getInterpoleStep();
|
||||
void setInterpoleStep(s32);
|
||||
void resetInterpoleStep();
|
||||
s32 getEndInterpoleStep() const;
|
||||
s32 getInterpoleStep() const;
|
||||
void setInterpoleStep(s32 step);
|
||||
void setInterpoleEaseOut();
|
||||
void getEndInterpoleStep();
|
||||
|
||||
void appear(const CameraStartInfo&);
|
||||
void calcCameraPose(sead::LookAtCamera*);
|
||||
void receiveRequestFromObjectCore(const CameraObjectRequestInfo&);
|
||||
void resetInterpoleStep();
|
||||
|
||||
void startSnapShotModeCore();
|
||||
void endSnapShotModeCore();
|
||||
|
||||
f32 getFovyDegree() const;
|
||||
f32 getSceneFovyDegree() const;
|
||||
CameraInputHolder* getInputHolder() const;
|
||||
CameraTargetHolder* getTargetHolder() const;
|
||||
CameraFlagCtrl* getFlagCtrl() const;
|
||||
|
||||
sead::Vector3f getPosition() const { return mPosition; };
|
||||
// get
|
||||
const sead::Vector3f& getPosition() const { return mPosition; };
|
||||
|
||||
sead::Vector3f getTargetTrans() const { return mTargetTrans; };
|
||||
const sead::Vector3f& getTargetTrans() const { return mTargetTrans; };
|
||||
|
||||
sead::Vector3f getCameraUp() const { return mCameraUp; };
|
||||
const sead::Vector3f& getCameraUp() const { return mCameraUp; };
|
||||
|
||||
const sead::Matrix34f& getViewMtx() const { return mViewMtx; };
|
||||
|
||||
CameraViewInfo* getViewInfo() const { return mViewInfo; }
|
||||
|
||||
// set
|
||||
void setPosition(const sead::Vector3f& vec) { mPosition.set(vec); };
|
||||
|
||||
void setTargetTrans(const sead::Vector3f& vec) { mTargetTrans.set(vec); };
|
||||
|
||||
void setCameraUp(const sead::Vector3f& vec) { mCameraUp.set(vec); };
|
||||
|
||||
void setViewMtx(const sead::Matrix34f& mtx) { mViewMtx = mtx; }
|
||||
|
||||
void setFovyDegree(f32 fovy) { mFovyDegree = fovy; }
|
||||
|
||||
protected:
|
||||
const char* mPoserName;
|
||||
f32 field_38;
|
||||
sead::Vector3f mPosition;
|
||||
sead::Vector3f mTargetTrans = sead::Vector3f::ex;
|
||||
ActiveState mActiveState = ActiveState::Start;
|
||||
sead::Vector3f mPosition = {0.0f, 0.0f, 0.0f};
|
||||
sead::Vector3f mTargetTrans = {0.0f, 0.0f, 500.0f};
|
||||
sead::Vector3f mCameraUp = sead::Vector3f::ey;
|
||||
f32 mFovyDegree = 35.0f;
|
||||
f32 field_64;
|
||||
f32 _64 = -1.0f;
|
||||
sead::Matrix34f mViewMtx = sead::Matrix34f::ident;
|
||||
bool field_98 = false;
|
||||
CameraViewInfo* mViewInfo;
|
||||
AreaObjDirector* mAreaDirector;
|
||||
CameraPoserFlag* mPoserFlags;
|
||||
CameraVerticalAbsorber* mVerticalAbsorber;
|
||||
CameraAngleCtrlInfo* mAngleCtrlInfo;
|
||||
CameraAngleSwingInfo* mAngleSwingInfo;
|
||||
CameraArrowCollider* mArrowCollider;
|
||||
CameraOffsetCtrlPreset* mOffsetCtrlPreset;
|
||||
f32* mLocalInterpole; // size = 0x20
|
||||
f32* mLookAtInterpole; // size = 0x10
|
||||
CameraParamMoveLimit* mParamMoveLimit;
|
||||
void* field_f8;
|
||||
GyroCameraCtrl* mGyroCtrl;
|
||||
SnapShotCameraCtrl* mSnapshotCtrl;
|
||||
AudioKeeper* mAudioKeeper;
|
||||
NerveKeeper* mNerveKeeper;
|
||||
RailKeeper* mRailKeeper;
|
||||
s32* field_128; // (size = 0xC) interpolesteptype?
|
||||
s32* field_130; // (size - 0x8)
|
||||
sead::Vector3f* mOrthoProjectionParam;
|
||||
bool _98 = false;
|
||||
CameraPoserSceneInfo* mSceneInfo = nullptr;
|
||||
CameraViewInfo* mViewInfo = nullptr;
|
||||
CameraPoserFlag* mPoserFlag;
|
||||
CameraVerticalAbsorber* mVerticalAbsorber = nullptr;
|
||||
CameraAngleCtrlInfo* mAngleCtrlInfo = nullptr;
|
||||
CameraAngleSwingInfo* mAngleSwingInfo = nullptr;
|
||||
CameraArrowCollider* mArrowCollider = nullptr;
|
||||
CameraOffsetCtrlPreset* mOffsetCtrlPreset = nullptr;
|
||||
LocalInterpole* mLocalInterpole = nullptr;
|
||||
LookAtInterpole* mLookAtInterpole = nullptr;
|
||||
CameraParamMoveLimit* mParamMoveLimit = nullptr;
|
||||
CameraTargetAreaLimitter* mTargetAreaLimitter = nullptr;
|
||||
GyroCameraCtrl* mGyroCtrl = nullptr;
|
||||
SnapShotCameraCtrl* mSnapShotCtrl = nullptr;
|
||||
AudioKeeper* mAudioKeeper = nullptr;
|
||||
NerveKeeper* mNerveKeeper = nullptr;
|
||||
RailKeeper* mRailKeeper = nullptr;
|
||||
CameraInterpoleParam* mActiveInterpoleParam = nullptr;
|
||||
CameraInterpoleStep* mEndInterpoleParam = nullptr;
|
||||
OrthoProjectionParam* mOrthoProjectionParam = nullptr;
|
||||
};
|
||||
|
||||
static_assert(sizeof(CameraPoser) == 0x140);
|
||||
|
||||
} // namespace al
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
namespace al {
|
||||
class CameraPoser;
|
||||
struct CameraStartInfo;
|
||||
class CameraObjectRequestInfo;
|
||||
struct CameraObjectRequestInfo;
|
||||
class IUseCollision;
|
||||
class PlacementInfo;
|
||||
} // namespace al
|
||||
|
|
@ -24,7 +24,7 @@ void getProjectionMtx(const al::CameraPoser*);
|
|||
f32 getNear(const al::CameraPoser*);
|
||||
f32 getFar(const al::CameraPoser*);
|
||||
f32 getAspect(const al::CameraPoser*);
|
||||
void getPreCameraPos(const al::CameraPoser*);
|
||||
const sead::Vector3f& getPreCameraPos(const al::CameraPoser*);
|
||||
const sead::Vector3f& getPreLookAtPos(const al::CameraPoser*);
|
||||
void getPreUpDir(const al::CameraPoser*);
|
||||
void getPreFovyDegree(const al::CameraPoser*);
|
||||
|
|
@ -216,7 +216,7 @@ void initCameraRail(al::CameraPoser*, const al::PlacementInfo&, const char*);
|
|||
bool tryGetCameraRailArg(f32*, const al::PlacementInfo&, const char*, const char*);
|
||||
// void getCameraRailPointObjId(al::CameraPoser const*, s32);
|
||||
bool tryFindNearestLimitRailKeeper(const al::CameraPoser*, const sead::Vector3f&);
|
||||
sead::Vector2f calcCameraRotateStick(sead::Vector2f*, const al::CameraPoser*);
|
||||
void calcCameraRotateStick(sead::Vector2f*, const al::CameraPoser*);
|
||||
f32 calcCameraRotateStickH(const al::CameraPoser*);
|
||||
f32 calcCameraRotateStickV(const al::CameraPoser*);
|
||||
f32 calcCameraRotateStickPower(const al::CameraPoser*);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace al {
|
|||
CameraViewInfo::CameraViewInfo(s32 index, const sead::LookAtCamera& lookAtCam,
|
||||
const Projection& projection, const CameraViewFlag& flag,
|
||||
const OrthoProjectionInfo& orthoProjectionInfo)
|
||||
: mIndex(index), mLookAtCam(lookAtCam), mProjection(projection), mCamViewFlag(flag),
|
||||
: mIndex(index), mLookAtCam(lookAtCam), mProjection(projection), mViewFlag(flag),
|
||||
mOrthoProjectionInfo(orthoProjectionInfo) {}
|
||||
|
||||
const sead::Projection& CameraViewInfo::getProjectionSead() const {
|
||||
|
|
|
|||
|
|
@ -32,11 +32,11 @@ public:
|
|||
private:
|
||||
s32 mIndex;
|
||||
bool mIsValid = true;
|
||||
bool _5 = true;
|
||||
bool mIsActiveInterpole = true;
|
||||
bool _6 = false;
|
||||
const sead::LookAtCamera& mLookAtCam;
|
||||
const Projection& mProjection;
|
||||
const CameraViewFlag& mCamViewFlag;
|
||||
const CameraViewFlag& mViewFlag;
|
||||
const OrthoProjectionInfo& mOrthoProjectionInfo;
|
||||
};
|
||||
} // namespace al
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ struct CameraParam {
|
|||
};
|
||||
|
||||
namespace al {
|
||||
class SnapShotCameraSceneInfo;
|
||||
struct SnapShotCameraSceneInfo;
|
||||
class ICameraInput;
|
||||
class IUseCollision;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
#include "Library/Camera/CameraPoser.h"
|
||||
#include "Library/Camera/CameraStartInfo.h"
|
||||
#include "Library/Math/MathUtil.h"
|
||||
#include "Library/Nerve/NerveSetupUtil.h"
|
||||
#include "Library/Nerve/NerveUtil.h"
|
||||
#include "Library/Yaml/ByamlUtil.h"
|
||||
|
||||
namespace {
|
||||
|
|
|
|||
|
|
@ -4,11 +4,7 @@
|
|||
#include <gfx/seadProjection.h>
|
||||
|
||||
#include "Library/Camera/CameraPoserFunction.h"
|
||||
#include "Library/Nerve/Nerve.h"
|
||||
#include "Library/Nerve/NerveExecutor.h"
|
||||
#include "Library/Nerve/NerveKeeper.h"
|
||||
#include "Library/Nerve/NerveSetupUtil.h"
|
||||
#include "Library/Nerve/NerveUtil.h"
|
||||
#include "Library/Yaml/ByamlIter.h"
|
||||
|
||||
namespace al {
|
||||
|
|
@ -27,7 +23,7 @@ public:
|
|||
void invalidate();
|
||||
bool isAbsorbing() const;
|
||||
bool isValid() const;
|
||||
void liverateAbsorb();
|
||||
void liberateAbsorb();
|
||||
void load(const ByamlIter&);
|
||||
void makeLookAtCamera(sead::LookAtCamera*) const;
|
||||
void start(const sead::Vector3f&, const CameraStartInfo&);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public:
|
|||
|
||||
void start(f32);
|
||||
void load(const ByamlIter& iter);
|
||||
void update(const sead::Vector2f&, f32, bool);
|
||||
void update(const sead::Vector2f& cameraStick, f32 sensitivityScale, bool isTriggerReset);
|
||||
|
||||
s32 getMaxResetStep() const;
|
||||
bool isFixByRangeHV() const;
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@ public:
|
|||
void update(const sead::Vector2f& stickInput, f32 stickSensitivity);
|
||||
void makeLookAtCamera(sead::LookAtCamera* camera) const;
|
||||
|
||||
bool isInvalidSwing() const { return mIsInvalidSwing; }
|
||||
|
||||
void setCurrentAngle(sead::Vector2f currentAngle) { mCurrentAngle = currentAngle; }
|
||||
|
||||
// all of them are default-initialized in the constructor, but some can't be inlined here
|
||||
private:
|
||||
bool mIsInvalidSwing = false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue