mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-08 17:44:54 +00:00
72 lines
2.0 KiB
C++
72 lines
2.0 KiB
C++
#ifndef _CSCRIPTDOOR
|
|
#define _CSCRIPTDOOR
|
|
|
|
#include "MetroidPrime/CPhysicsActor.hpp"
|
|
|
|
class CScriptDoor : public CPhysicsActor {
|
|
public:
|
|
enum EDoorState {
|
|
kDS_Open,
|
|
kDS_Close,
|
|
kDS_Ready,
|
|
};
|
|
|
|
enum EDoorOpenCondition {
|
|
kDOC_NotReady,
|
|
kDOC_Loading,
|
|
kDOC_Ready,
|
|
};
|
|
|
|
CScriptDoor(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
|
|
const CTransform4f& xf, const CModelData& modelData,
|
|
const CActorParameters& actorParameters, const CVector3f& orbitPosition,
|
|
const CAABox& bounds, bool active, bool open, bool projectilesCollide,
|
|
float animationLength, bool ballDoor);
|
|
|
|
void SetDoorAnimation(EDoorState state);
|
|
|
|
rstl::optional_object< CAABox > GetTouchBounds() const override;
|
|
|
|
rstl::optional_object< CAABox > GetProjectileBounds() const;
|
|
CVector3f GetOrbitPosition(const CStateManager& mgr) const override;
|
|
|
|
EDoorOpenCondition GetDoorOpenCondition(CStateManager& mgr);
|
|
void OpenDoor(TUniqueId uid, CStateManager& mgr);
|
|
|
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId other, CStateManager& mgr) override;
|
|
void Think(float dt, CStateManager& mgr) override;
|
|
|
|
const TUniqueId GetConnectedDockID() const { return mDockId; }
|
|
bool IsOpen() const { return mIsOpen; }
|
|
void SetDoClose(const bool close) { mDoClose = close; }
|
|
|
|
bool IsConnectedToArea(const CStateManager& mgr, TAreaId area) const;
|
|
void ForceClosed(CStateManager& mgr);
|
|
|
|
void AddToRenderer(const CFrustumPlanes& /*frustum*/, const CStateManager& mgr) const override;
|
|
void Render(const CStateManager& mgr) const override;
|
|
void Accept(IVisitor& visitor) override;
|
|
|
|
private:
|
|
float mAnimLength;
|
|
float mAnimTime;
|
|
EDoorState mDoorState;
|
|
CAABox x264_;
|
|
TUniqueId mPartner1;
|
|
TUniqueId mPartner2;
|
|
TUniqueId mPrevDoor;
|
|
TUniqueId mDockId;
|
|
CAABox mModelBounds;
|
|
CVector3f mOrbitPos;
|
|
|
|
bool mClosing : 1;
|
|
bool mWasOpen : 1;
|
|
bool mIsOpen : 1;
|
|
bool mConditionsMet : 1;
|
|
bool mProjectilesCollide : 1;
|
|
bool mBallDoor : 1;
|
|
bool mDoClose : 1;
|
|
};
|
|
|
|
#endif // _CSCRIPTDOOR
|