mirror of
				https://github.com/AxioDL/metaforce.git
				synced 2025-10-27 15:30:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include "World/CPatterned.hpp"
 | |
| #include "Weapon/CProjectileInfo.hpp"
 | |
| #include "Particle/CElementGen.hpp"
 | |
| 
 | |
| namespace urde::MP1 {
 | |
| class CPuddleSpore : public CPatterned {
 | |
|   static constexpr u32 kEyeCount = 16;
 | |
|   static const std::string_view kEyeLocators[16];
 | |
|   float x568_ = 0.f;
 | |
|   float x56c_ = 0.f;
 | |
|   float x570_;
 | |
|   float x574_;
 | |
|   float x578_;
 | |
|   float x57c_;
 | |
|   float x580_;
 | |
|   zeus::CVector3f x584_bodyOrigin;
 | |
|   float x590_halfExtent;
 | |
|   float x594_height;
 | |
|   float x598_ = 0.f;
 | |
|   float x59c_ = 1.f;
 | |
|   CCollidableAABox x5a0_;
 | |
|   u32 x5c8_ = 0;
 | |
|   u32 x5cc_ = 0;
 | |
|   TToken<CGenDescription> x5d0_;
 | |
|   std::vector<std::unique_ptr<CElementGen>> x5dc_elemGens; // originally a vector of CElementGen
 | |
|   CProjectileInfo x5ec_projectileInfo;
 | |
|   bool x614_24 : 1;
 | |
|   bool x614_25 : 1;
 | |
| 
 | |
|   bool HitShell(const zeus::CVector3f& ) const;
 | |
|   void KnockPlayer(CStateManager&, float);
 | |
|   void UpdateBoundingState(const zeus::CAABox&, CStateManager&, float);
 | |
| public:
 | |
|   DEFINE_PATTERNED(PuddleSpore)
 | |
| 
 | |
|   CPuddleSpore(TUniqueId, std::string_view, EFlavorType, const CEntityInfo&, const zeus::CTransform&,
 | |
|                CModelData&&, const CPatternedInfo&, EColliderType, CAssetId, float, float, float, float, float,
 | |
|                const CActorParameters&, CAssetId, const CDamageInfo&);
 | |
| 
 | |
|   void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr);
 | |
|   void PreThink(float, CStateManager&);
 | |
|   void Think(float, CStateManager&);
 | |
|   void Render(const CStateManager&) const;
 | |
|   void Touch(CActor&, CStateManager&);
 | |
|   void FluidFXThink(EFluidState, CScriptWater&, CStateManager&);
 | |
|   void KnockBack(const zeus::CVector3f& dir, CStateManager& mgr, const CDamageInfo& dInfo, EKnockBackType type,
 | |
|                  bool inDeferred, float dt)
 | |
|   {
 | |
|     if (x5c8_ == 1)
 | |
|       return;
 | |
|     CPatterned::KnockBack(dir, mgr, dInfo, type, inDeferred, dt);
 | |
|   }
 | |
|   EWeaponCollisionResponseTypes GetCollisionResponseType(const zeus::CVector3f& point, const zeus::CVector3f&,
 | |
|     const CWeaponMode&, EProjectileAttrib) const
 | |
|   {
 | |
|     return HitShell(point) ? EWeaponCollisionResponseTypes::Unknown84 : EWeaponCollisionResponseTypes::Unknown34;
 | |
|   }
 | |
|   void DoUserAnimEvent(CStateManager&, const CInt32POINode&, EUserEventType, float);
 | |
|   void CollidedWith(TUniqueId uid, const CCollisionInfoList& colList, CStateManager& mgr)
 | |
|   {
 | |
|     if (x5c8_ == 2)
 | |
|       return;
 | |
|     CPatterned::CollidedWith(uid, colList, mgr);
 | |
|   }
 | |
|   const CCollisionPrimitive* GetCollisionPrimitive() const { return &x5a0_; }
 | |
|   zeus::CAABox CalculateBoundingBox() const;
 | |
|   CProjectileInfo* GetProjectileInfo() { return &x5ec_projectileInfo; }
 | |
| 
 | |
|   bool InAttackPosition(CStateManager&, float) { return x568_ >= x570_; }
 | |
|   bool ShouldAttack(CStateManager&, float) { return x568_ >= x574_; }
 | |
|   bool ShouldTurn(CStateManager&, float);
 | |
|   bool AnimOver(CStateManager&, float) { return x5cc_ == 2; }
 | |
| 
 | |
|   void InActive(CStateManager&, EStateMsg, float);
 | |
|   void Active(CStateManager&, EStateMsg, float);
 | |
|   void Run(CStateManager&, EStateMsg, float);
 | |
|   void TurnAround(CStateManager&, EStateMsg, float);
 | |
|   void GetUp(CStateManager&, EStateMsg, float);
 | |
|   void Attack(CStateManager&, EStateMsg, float);
 | |
| };
 | |
| } |