#pragma once #include "sead/math/seadMatrix.h" #include "sead/math/seadQuat.h" #include "sead/math/seadVector.h" namespace al { class ActorPoseKeeperBase { public: ActorPoseKeeperBase(); virtual const sead::Vector3& getRotate() const; virtual const sead::Vector3& getScale() const; virtual const sead::Vector3& getVelocity() const; virtual const sead::Vector3& getFront() const; virtual const sead::Vector3& getUp() const; virtual const sead::Quat& getQuat() const; virtual const sead::Vector3& getGravity() const; virtual const sead::Matrix34& getMtx() const; virtual sead::Vector3* getRotatePtr(); virtual sead::Vector3* getScalePtr(); virtual sead::Vector3* getVelocityPtr(); virtual sead::Vector3* getFrontPtr(); virtual sead::Vector3* getUpPtr(); virtual sead::Quat* getQuatPtr(); virtual sead::Vector3* getGravityPtr(); virtual sead::Matrix34* getMtxPtr(); virtual void updatePoseTrans(const sead::Vector3 &) = 0; virtual void updatePoseRotate(const sead::Vector3 &) = 0; virtual void updatePoseQuat(const sead::Quat &) = 0; virtual void updatePoseMtx(const sead::Matrix34 *) = 0; virtual void copyPose(const al::ActorPoseKeeperBase *); virtual void calcBaseMtx(sead::Matrix34 *) = 0; sead::Vector3 mTranslation; // _8 static const sead::Vector3 sDefaultVelocity; }; class ActorPoseKeeperTRSV : public ActorPoseKeeperBase { public: virtual const sead::Vector3& getRotate() const; virtual const sead::Vector3& getScale() const; virtual const sead::Vector3& getVelocity() const; virtual sead::Vector3* getRotatePtr(); virtual sead::Vector3* getScalePtr(); virtual sead::Vector3* getVelocityPtr(); virtual void updatePoseTrans(const sead::Vector3 &); virtual void updatePoseRotate(const sead::Vector3 &); virtual void updatePoseQuat(const sead::Quat &); virtual void updatePoseMtx(const sead::Matrix34 *); virtual void calcBaseMtx(sead::Matrix34 *); sead::Vector3 mRotation; // _14 sead::Vector3 mScale; // _20 sead::Vector3 mVelocity; // _2C }; };