mirror of https://github.com/PrimeDecomp/prime.git
88 lines
3.1 KiB
C++
88 lines
3.1 KiB
C++
#ifndef _CNEWINTROBOSS
|
|
#define _CNEWINTROBOSS
|
|
|
|
#include "MetroidPrime/Enemies/CPatterned.hpp"
|
|
|
|
#include "Kyoto/Animation/CharacterCommon.hpp"
|
|
#include "MetroidPrime/CBoneTracking.hpp"
|
|
#include "MetroidPrime/Weapons/CProjectileInfo.hpp"
|
|
|
|
class CCollisionActorManager;
|
|
class CPatternedInfo;
|
|
|
|
class CNewIntroBoss : public CPatterned {
|
|
public:
|
|
CNewIntroBoss(TUniqueId, const rstl::string&, const CEntityInfo& info, const CTransform4f& xf,
|
|
const CModelData& mData, const CPatternedInfo& pInfo,
|
|
const CActorParameters& actParms, float minTurnAngle, CAssetId projectile,
|
|
const CDamageInfo& dInfo, CAssetId beamContactFxId, CAssetId beamPulseFxId,
|
|
CAssetId beamTextureId, CAssetId beamGlowTextureId);
|
|
|
|
// CEntity
|
|
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&, const CStateManager&) const override;
|
|
rstl::optional_object< CAABox > GetTouchBounds() const override;
|
|
void OnScanStateChange(EScanState, CStateManager&) override;
|
|
CAABox GetSortingBounds(const CStateManager&) const override;
|
|
void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type,
|
|
float dt) override;
|
|
|
|
// CAi
|
|
void Patrol(CStateManager&, EStateMsg, float) override;
|
|
void Generate(CStateManager& mgr, EStateMsg msg, float arg) override;
|
|
void Attack(CStateManager&, EStateMsg, float) override;
|
|
bool InAttackPosition(CStateManager&, float) override;
|
|
bool AnimOver(CStateManager&, float) override;
|
|
bool ShouldAttack(CStateManager&, float) override;
|
|
bool ShouldTurn(CStateManager&, float) override;
|
|
bool AIStage(CStateManager&, float) override;
|
|
|
|
// CPatterned
|
|
CProjectileInfo* ProjectileInfo() override;
|
|
|
|
pas::ELocomotionType GetLocoForHealth(const CStateManager& mgr) const;
|
|
pas::EGenerateType GetGenerateForHealth(const CStateManager& mgr) const;
|
|
float GetNextAttackTime(CStateManager& mgr) const;
|
|
CVector3f PlayerPos(const CStateManager& mgr) const;
|
|
void DeleteBeam(CStateManager& mgr);
|
|
void StopRumble(CStateManager& mgr);
|
|
|
|
float GetInitialHP() const { return x640_initialHp; }
|
|
|
|
private:
|
|
pas::ELocomotionType x568_locomotion;
|
|
uint x56c_stateProg;
|
|
float x570_minTurnAngle;
|
|
CBoneTracking x574_boneTracking;
|
|
CProjectileInfo x5ac_projectileInfo;
|
|
TUniqueId x5d4_stage1Projectile;
|
|
TUniqueId x5d6_stage2Projectile;
|
|
TUniqueId x5d8_stage3Projectile;
|
|
rstl::string x5dc_damageLocator; // ???
|
|
rstl::single_ptr< CCollisionActorManager > x5ec_collisionManager;
|
|
CAssetId x5f0_beamContactFxId;
|
|
CAssetId x5f4_beamPulseFxId;
|
|
CAssetId x5f8_beamTextureId;
|
|
CAssetId x5fc_beamGlowTextureId;
|
|
TUniqueId x600_headActor;
|
|
TUniqueId x602_pelvisActor;
|
|
CVector3f x604_predictedPlayerPos;
|
|
CVector3f x610_lookPos;
|
|
CVector3f x61c_startPlayerPos;
|
|
float x628_firingTime;
|
|
CVector3f x62c_targetPos;
|
|
float x638_;
|
|
float x63c_attackTime;
|
|
float x640_initialHp;
|
|
CTransform4f x644_initialXf;
|
|
short x674_rumbleVoice;
|
|
TUniqueId x676_curProjectile;
|
|
bool x678_;
|
|
};
|
|
|
|
#endif // _CNEWINTROBOSS
|