#pragma once #include "World/CWallWalker.hpp" #include "World/CPathFindSearch.hpp" #include "Weapon/CProjectileInfo.hpp" namespace urde::MP1 { class CSeedling : public CWallWalker { static const std::string skNeedleLocators[2][6]; CPathFindSearch x5d8_searchPath; std::unique_ptr x6bc_spikeData; CProjectileInfo x6c0_projectileInfo; CDamageInfo x6e8_deathDamage; zeus::CAABox x704_modelBounds = zeus::skNullBox; float x71c_attackCoolOff = 0.f; TUniqueId x720_prevObj = kInvalidUniqueId; bool x722_24_renderOnlyClusterA : 1; bool x722_25_curNeedleCluster : 1; void LaunchNeedles(CStateManager&); public: DEFINE_PATTERNED(Seedling) CSeedling(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&, const CPatternedInfo&, const CActorParameters&, CAssetId, CAssetId, const CDamageInfo&, const CDamageInfo&, float, float, float, float); void Accept(IVisitor&) override; void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) override; void Think(float, CStateManager&) override; void Render(const CStateManager&) const override; void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type, float dt) override; CProjectileInfo* GetProjectileInfo() override { return &x6c0_projectileInfo; } std::optional GetTouchBounds() const override; void Touch(CActor&, CStateManager&) override; CPathFindSearch* GetSearchPath() override { return &x5d8_searchPath; } void Patrol(CStateManager&, EStateMsg, float) override; void Active(CStateManager&, EStateMsg, float) override; void Enraged(CStateManager&, EStateMsg, float) override; void ProjectileAttack(CStateManager&, EStateMsg, float) override; void Generate(CStateManager&, EStateMsg, float) override; bool ShouldAttack(CStateManager&, float) override; void MassiveDeath(CStateManager&) override; }; } // namespace urde::MP1