metaforce/Runtime/MP1/World/CBloodFlower.hpp

67 lines
2.5 KiB
C++
Raw Normal View History

2018-10-11 15:57:05 -07:00
#pragma once
#include "Weapon/CProjectileInfo.hpp"
2018-10-11 15:57:05 -07:00
#include "World/CPatterned.hpp"
namespace urde {
class CGenDescription;
class CElementGen;
class CWeaponDescription;
2019-03-23 22:45:47 -07:00
class CTargetableProjectile;
} // namespace urde
2018-12-07 21:30:43 -08:00
namespace urde::MP1 {
class CBloodFlower : public CPatterned {
TLockedToken<CGenDescription> x568_podEffectDesc;
std::unique_ptr<CElementGen> x574_podEffect;
2019-03-23 22:45:47 -07:00
TLockedToken<CWeaponDescription> x578_projectileDesc;
float x584_curAttackTime = 0.f;
float x588_projectileOffset = 0.f;
u32 x58c_projectileState = 0;
CProjectileInfo x590_projectileInfo;
float x5b8_ = 0.f;
float x5bc_projectileDelay = 0.f;
float x5c0_ = 0.f;
2019-03-23 22:45:47 -07:00
TLockedToken<CGenDescription> x5c4_visorParticle;
s16 x5d4_visorSfx;
u32 x5d8_effectState = 0;
2019-03-23 22:45:47 -07:00
CDamageInfo x5dc_projectileDamage;
CDamageInfo x5f8_podDamage;
float x614_;
CAssetId x618_;
CAssetId x61c_;
CAssetId x620_;
void ActivateTriggers(CStateManager& mgr, bool activate);
2019-05-14 15:30:15 -07:00
void CalculateAttackTime(CStateManager&);
void UpdateFire(CStateManager& mgr);
void TurnEffectsOn(u32, CStateManager&);
void TurnEffectsOff(u32, CStateManager&);
void LaunchPollenProjectile(const zeus::CTransform&, CStateManager&, float, s32);
2019-03-23 22:45:47 -07:00
CTargetableProjectile* CreateArcProjectile(CStateManager&, const TToken<CWeaponDescription>&, const zeus::CTransform&,
const CDamageInfo&, TUniqueId);
2018-10-11 15:57:05 -07:00
public:
2018-12-07 21:30:43 -08:00
DEFINE_PATTERNED(BloodFlower)
2018-10-11 15:57:05 -07:00
2018-12-07 21:30:43 -08:00
CBloodFlower(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, CAssetId, CAssetId, const CActorParameters&, CAssetId, const CDamageInfo&,
const CDamageInfo&, const CDamageInfo&, CAssetId, CAssetId, CAssetId, float, CAssetId, u32);
void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&);
void Think(float dt, CStateManager& mgr);
void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type, float dt);
void Render(const CStateManager& mgr) const;
2019-05-14 15:30:15 -07:00
void Touch(CActor&, CStateManager&) {}
CProjectileInfo* GetProjectileInfo() { return &x590_projectileInfo; }
bool ShouldAttack(CStateManager&, float);
bool ShouldTurn(CStateManager&, float);
bool Leash(CStateManager&, float) { return x5c0_ < x3d0_playerLeashTime; }
void Active(CStateManager&, EStateMsg, float);
void InActive(CStateManager&, EStateMsg, float);
void BulbAttack(CStateManager&, EStateMsg, float);
void PodAttack(CStateManager&, EStateMsg, float);
2018-10-11 15:57:05 -07:00
};
2018-12-07 21:30:43 -08:00
} // namespace urde::MP1