2022-11-04 05:25:39 +00:00
|
|
|
#ifndef _CCINEMATICCAMERA
|
|
|
|
#define _CCINEMATICCAMERA
|
|
|
|
|
|
|
|
#include "types.h"
|
|
|
|
|
|
|
|
#include "MetroidPrime/Cameras/CGameCamera.hpp"
|
|
|
|
|
|
|
|
class CCinematicCamera : public CGameCamera {
|
|
|
|
public:
|
2022-11-16 20:02:20 +00:00
|
|
|
CCinematicCamera(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
|
|
|
|
const CTransform4f& xf, bool active, float shotDuration, float fovy, float znear,
|
|
|
|
float zfar, float aspect, uint flags);
|
|
|
|
~CCinematicCamera();
|
|
|
|
// CActor
|
2023-02-06 17:01:01 +00:00
|
|
|
void Accept(IVisitor& visitor) override;
|
|
|
|
void Think(float dt, CStateManager& mgr) override;
|
|
|
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
2022-11-16 20:02:20 +00:00
|
|
|
|
|
|
|
// CGameCamera
|
|
|
|
|
2023-02-06 17:01:01 +00:00
|
|
|
void ProcessInput(const CFinalInput&, CStateManager& mgr) override;
|
|
|
|
void Reset(const CTransform4f&, CStateManager& mgr) override;
|
2022-11-16 20:02:20 +00:00
|
|
|
|
|
|
|
// CCinematicCamera
|
|
|
|
u32 GetFlags() const { return x21c_flags; }
|
|
|
|
void WasDeactivated(CStateManager& mgr);
|
|
|
|
void SendArrivedMsg(TUniqueId reciever, CStateManager& mgr) const;
|
|
|
|
float GetDuration() const { return x1e8_duration; }
|
|
|
|
CVector3f GetInterpolatedSplinePoint(const rstl::vector< CVector3f >& points, int& idxOut,
|
|
|
|
float t) const;
|
|
|
|
CQuaternion GetInterpolatedOrientation(const rstl::vector< CQuaternion >& rotations,
|
|
|
|
float t) const;
|
|
|
|
float GetInterpolatedHFov(const rstl::vector< float >& fovs, float t) const;
|
|
|
|
float GetMoveOutofIntoAlpha() const;
|
|
|
|
void DeactivateSelf(CStateManager& mgr);
|
|
|
|
void CalculateMoveOutofIntoEyePosition(bool outOfEye, CStateManager& mgr);
|
|
|
|
void GenerateMoveOutofIntoPoints(bool outOfEye, CStateManager& mgr);
|
|
|
|
static bool PickRandomActiveConnection(const rstl::vector< SConnection >& conns,
|
|
|
|
SConnection& randConn, CStateManager& mgr);
|
|
|
|
void CalculateWaypoints(CStateManager& mgr);
|
2022-11-04 05:25:39 +00:00
|
|
|
|
|
|
|
private:
|
2022-11-16 20:02:20 +00:00
|
|
|
rstl::vector< CVector3f > x188_viewPoints;
|
|
|
|
rstl::vector< CQuaternion > x198_viewOrientations;
|
|
|
|
rstl::vector< TUniqueId > x1a8_viewPointArrivals;
|
|
|
|
rstl::vector< CVector3f > x1b8_targets;
|
|
|
|
rstl::vector< TUniqueId > x1c8_targetArrivals;
|
|
|
|
rstl::vector< float > x1d8_viewHFovs;
|
|
|
|
float x1e8_duration;
|
|
|
|
float x1ec_t;
|
|
|
|
float x1f0_origFovy;
|
|
|
|
int x1f4_passedViewPoint;
|
|
|
|
int x1f8_passedTarget;
|
|
|
|
CQuaternion x1fc_origOrientation;
|
|
|
|
TUniqueId x20c_lookAtId;
|
|
|
|
CVector3f x210_moveIntoEyePos;
|
|
|
|
u32 x21c_flags; // 0x1: look at player
|
|
|
|
// 0x2: out of player eye
|
|
|
|
// 0x4: into player eye
|
|
|
|
// 0x10: finish cine skip
|
|
|
|
// 0x20: disable input
|
|
|
|
// 0x40: draw player
|
|
|
|
// 0x80: check failsafe
|
|
|
|
// 0x100: cinematic pause
|
|
|
|
// 0x200: disable out of into
|
|
|
|
bool x220_24_ : 1;
|
2022-11-04 05:25:39 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _CCINEMATICCAMERA
|