mirror of
https://github.com/PrimeDecomp/prime.git
synced 2026-07-12 18:18:56 -07:00
86 lines
3.4 KiB
C++
86 lines
3.4 KiB
C++
#ifndef _CPUDDLETOADGAMMA
|
|
#define _CPUDDLETOADGAMMA
|
|
|
|
#include "types.h"
|
|
|
|
#include "MetroidPrime/CDamageInfo.hpp"
|
|
#include "MetroidPrime/Enemies/CPatterned.hpp"
|
|
|
|
#include "WorldFormat/CCollidableOBBTreeGroup.hpp"
|
|
|
|
#include "rstl/single_ptr.hpp"
|
|
|
|
class CPuddleToadGamma : public CPatterned {
|
|
public:
|
|
CPuddleToadGamma(TUniqueId uid, const rstl::string& name, EFlavorType flavor,
|
|
const CEntityInfo& info, const CTransform4f& xf, const CModelData& mData,
|
|
const CPatternedInfo& pInfo, const CActorParameters& aParms,
|
|
float suckForceMultiplier, float suckAngle, float playerSuckRange,
|
|
CVector3f localShootDir, float playerShootSpeed, float shouldAttackWaitTime,
|
|
float spotPlayerWaitTime, const CDamageInfo& playerShootDamage,
|
|
const CDamageInfo& dInfo2, uint dcln);
|
|
|
|
// CEntity
|
|
~CPuddleToadGamma() override;
|
|
void Accept(IVisitor& visitor) override;
|
|
void Think(float dt, CStateManager& mgr) override;
|
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
|
|
|
// CActor
|
|
rstl::optional_object< CAABox > GetTouchBounds() const override;
|
|
const CDamageVulnerability* GetDamageVulnerability() const override;
|
|
const CDamageVulnerability* GetDamageVulnerability(const CVector3f& pos, const CVector3f& dir,
|
|
const CDamageInfo& dInfo) const override;
|
|
void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type,
|
|
float dt) override;
|
|
|
|
// CPhysicsActor
|
|
const CCollisionPrimitive* GetCollisionPrimitive() const override;
|
|
CTransform4f GetPrimitiveTransform() const override;
|
|
|
|
// CAi
|
|
void InActive(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Active(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Suck(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Attack(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Crouch(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
bool InAttackPosition(CStateManager& mgr, float arg) override;
|
|
bool SpotPlayer(CStateManager& mgr, float arg) override;
|
|
bool ShouldAttack(CStateManager& mgr, float arg) override;
|
|
bool LostInterest(CStateManager& mgr, float arg) override;
|
|
bool Inside(CStateManager& mgr, float arg) override;
|
|
|
|
private:
|
|
void SetSolid(CStateManager& mgr, bool solid);
|
|
void CenterPlayer(CStateManager& mgr, const CVector3f& pos);
|
|
void ShootPlayer(CStateManager& mgr, float speed);
|
|
void SuckPlayer(CStateManager& mgr);
|
|
bool PlayerInVortexArea(const CStateManager& mgr);
|
|
void SetPlayerPosition(CStateManager& mgr, const CVector3f& pos);
|
|
|
|
static const char* mMouthLocatorName;
|
|
static const char* mBellyLocatorName;
|
|
static CVector3f skBellyOffset;
|
|
|
|
int x568_stateProg;
|
|
float x56c_waitTimer;
|
|
CDamageInfo x570_playerShootDamage;
|
|
CDamageInfo x58c_dInfo2;
|
|
float x5a8_suckForceMultiplier;
|
|
float x5ac_minSuckAngleProj;
|
|
float x5b0_playerSuckRange;
|
|
CVector3f x5b4_localShootDir;
|
|
float x5c0_playerShootSpeed;
|
|
float x5c4_shouldAttackWaitTime;
|
|
float x5c8_spotPlayerWaitTime;
|
|
CVector3f x5cc_suckPoint;
|
|
CVector3f x5d8_damageablePoint;
|
|
rstl::single_ptr< CCollidableOBBTreeGroup > x5e4_collisionTreePrim;
|
|
bool x5e8_24_playerInside : 1;
|
|
bool x5e8_25_waitTimerActive : 1;
|
|
bool x5e8_26_shotPlayer : 1;
|
|
};
|
|
CHECK_SIZEOF(CPuddleToadGamma, 0x5F0)
|
|
|
|
#endif // _CPUDDLETOADGAMMA
|