#ifndef _CENERGYPROJECTILE #define _CENERGYPROJECTILE #include "types.h" #include "MetroidPrime/Cameras/CCameraShakeData.hpp" #include "MetroidPrime/Weapons/CGameProjectile.hpp" #include "Kyoto/Audio/CSfxHandle.hpp" #include "Kyoto/Math/CVector3f.hpp" class CEnergyProjectile : public CGameProjectile { public: CEnergyProjectile(bool active, const TToken< CWeaponDescription >& desc, EWeaponType type, const CTransform4f& xf, EMaterialTypes excludeMat, const CDamageInfo& damage, TUniqueId uid, TAreaId aid, TUniqueId owner, TUniqueId homingTarget, uint attribs, bool underwater, const CVector3f& scale, const rstl::optional_object< TLockedToken< CGenDescription > >& visorParticle, ushort visorSfx, bool sendCollideMsg); // CEntity ~CEnergyProjectile() 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&, const CStateManager&) const override; void Render(const CStateManager&) const override; void Touch(CActor&, CStateManager&) override; // CGameProjectile void ResolveCollisionWithActor(const CRayCastResult& res, CActor& act, CStateManager& mgr) override; // CEnergyProjectile virtual bool Explode(const CVector3f& pos, const CVector3f& normal, EWeaponCollisionResponseTypes type, CStateManager& mgr, const CDamageVulnerability& dVuln, TUniqueId hitActor); void Set3d0_26(bool v) { x3d0_26_ = v; } private: CSfxHandle x2e8_sfx; CVector3f x2ec_dir; float x2f8_mag; CCameraShakeData x2fc_camShake; bool x3d0_24_dead : 1; bool x3d0_25_ : 1; bool x3d0_26_ : 1; bool x3d0_27_camShakeDirty : 1; float x3d4_curTime; }; CHECK_SIZEOF(CEnergyProjectile, 0x3d8); #endif // _CENERGYPROJECTILE