mirror of
https://github.com/PrimeDecomp/prime.git
synced 2026-07-12 18:18:56 -07:00
83 lines
3.0 KiB
C++
83 lines
3.0 KiB
C++
#ifndef _CATOMICALPHA
|
|
#define _CATOMICALPHA
|
|
|
|
#include "types.h"
|
|
|
|
#include "MetroidPrime/CModelData.hpp"
|
|
#include "MetroidPrime/CSteeringBehaviors.hpp"
|
|
#include "MetroidPrime/Enemies/CPatterned.hpp"
|
|
#include "MetroidPrime/PathFinding/CPathFindSearch.hpp"
|
|
#include "MetroidPrime/Weapons/CProjectileInfo.hpp"
|
|
|
|
#include "Kyoto/Animation/CharacterCommon.hpp"
|
|
|
|
#include "rstl/reserved_vector.hpp"
|
|
#include "rstl/string.hpp"
|
|
|
|
class CAtomicAlpha : public CPatterned {
|
|
public:
|
|
CAtomicAlpha(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
|
|
const CTransform4f& xf, const CModelData& mData,
|
|
const CActorParameters& actParms, const CPatternedInfo& pInfo,
|
|
CAssetId bombWeapon, const CDamageInfo& bombDamage, float bombDropDelay,
|
|
float bombReappearDelay, float bombRappearTime, CAssetId cmdl,
|
|
bool invisible, bool applyBeamAttraction);
|
|
|
|
// CEntity
|
|
~CAtomicAlpha() override {}
|
|
void Accept(IVisitor& visitor) override;
|
|
void Think(float dt, CStateManager& mgr) override;
|
|
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
|
|
|
// CActor
|
|
void AddToRenderer(const CFrustumPlanes& frustum, const CStateManager& mgr) const override;
|
|
void Render(const CStateManager& mgr) const override;
|
|
EWeaponCollisionResponseTypes GetCollisionResponseType(const CVector3f&, const CVector3f&,
|
|
const CWeaponMode&, int) const override;
|
|
void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type,
|
|
float dt) override;
|
|
|
|
// CPhysicsActor
|
|
void CollidedWith(const TUniqueId& id, const CCollisionInfoList& list,
|
|
CStateManager& mgr) override;
|
|
|
|
// CAi
|
|
void Patrol(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Attack(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
bool Leash(CStateManager& mgr, float arg) override;
|
|
bool AggressionCheck(CStateManager& mgr, float arg) override;
|
|
|
|
// CPatterned
|
|
CProjectileInfo* ProjectileInfo() override { return &x668_bombProjectile; }
|
|
CPathFindSearch* GetSearchPath() override { return &x580_pathFind; }
|
|
|
|
private:
|
|
enum { kBombCount = 4 };
|
|
|
|
struct SBomb {
|
|
rstl::string x0_locatorName;
|
|
pas::ELocomotionType x10_locomotionType;
|
|
float x14_scaleTime;
|
|
|
|
SBomb(const rstl::string& name, pas::ELocomotionType loco, float scale)
|
|
: x0_locatorName(name), x10_locomotionType(loco), x14_scaleTime(scale) {}
|
|
};
|
|
|
|
bool x568_24_inRange : 1;
|
|
bool x568_25_invisible : 1;
|
|
bool x568_26_applyBeamAttraction : 1;
|
|
float x56c_bombDropDelay;
|
|
float x570_bombReappearDelay;
|
|
float x574_bombRappearTime;
|
|
float x578_bombTime;
|
|
uint x57c_curBomb;
|
|
CPathFindSearch x580_pathFind;
|
|
CSteeringBehaviors x664_steeringBehaviors;
|
|
CProjectileInfo x668_bombProjectile;
|
|
CModelData x690_bombModel;
|
|
rstl::reserved_vector< SBomb, kBombCount > x6dc_bombLocators;
|
|
};
|
|
CHECK_SIZEOF(CAtomicAlpha, 0x740)
|
|
|
|
#endif // _CATOMICALPHA
|