#ifndef _CSCRIPTDOCK #define _CSCRIPTDOCK #include "MetroidPrime/CPhysicsActor.hpp" class CScriptDock : public CPhysicsActor { public: CScriptDock(TUniqueId uid, const rstl::string& name, const CEntityInfo& info, const CVector3f& position, const CVector3f& extent, int dock, TAreaId area, bool active, int dockReferenceCount, bool loadConnected); ~CScriptDock(); void SetDockReference(CStateManager& mgr, int); void Accept(IVisitor& visitor) override; void Think(float, CStateManager&) override; void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) override; rstl::optional_object< CAABox > GetTouchBounds() const override; void Touch(CActor&, CStateManager&) override; void CleanUp() {} CPlane GetPlane(const CStateManager&) const; TAreaId GetAreaId() const { return x260_area; } int GetDockId() const { return x25c_dock; } int GetDockReference(const CStateManager& mgr) const; TAreaId GetCurrentConnectedAreaId(const CStateManager&) const; void UpdateAreaActivateFlags(CStateManager&); bool HasPointCrossedDock(const CStateManager&, const CVector3f&) const; void AreaLoaded(CStateManager&); void AreaUnloaded(CStateManager&); void SetLoadConnected(CStateManager&, bool); private: enum EDockState { kDS_InSourceRoom, kDS_PlayerTouched, kDS_EnterNextArea, kDS_InNextRoom }; friend class CScriptDoor; int x258_dockReferenceCount; int x25c_dock; TAreaId x260_area; EDockState x264_dockState; bool x268_24_dockReferenced : 1; bool x268_25_loadConnected : 1; bool x268_26_areaPostConstructed : 1; }; #endif // _CSCRIPTDOCK