#pragma once #include #include "Runtime/Particle/IElement.hpp" /* Documentation at: https://wiki.axiodl.com/w/Particle_Script#Mod_Vector_Elements */ namespace metaforce { class CMVEImplosion : public CModVectorElement { std::unique_ptr x4_implPoint; std::unique_ptr x8_magScale; std::unique_ptr xc_maxMag; std::unique_ptr x10_minMag; bool x14_enableMinMag; public: CMVEImplosion(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c, std::unique_ptr&& d, bool e) : x4_implPoint(std::move(a)) , x8_magScale(std::move(b)) , xc_maxMag(std::move(c)) , x10_minMag(std::move(d)) , x14_enableMinMag(e) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEExponentialImplosion : public CModVectorElement { std::unique_ptr x4_implPoint; std::unique_ptr x8_magScale; std::unique_ptr xc_maxMag; std::unique_ptr x10_minMag; bool x14_enableMinMag; public: CMVEExponentialImplosion(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c, std::unique_ptr&& d, bool e) : x4_implPoint(std::move(a)) , x8_magScale(std::move(b)) , xc_maxMag(std::move(c)) , x10_minMag(std::move(d)) , x14_enableMinMag(e) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVELinearImplosion : public CModVectorElement { std::unique_ptr x4_implPoint; std::unique_ptr x8_magScale; std::unique_ptr xc_maxMag; std::unique_ptr x10_minMag; bool x14_enableMinMag; public: CMVELinearImplosion(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c, std::unique_ptr&& d, bool e) : x4_implPoint(std::move(a)) , x8_magScale(std::move(b)) , xc_maxMag(std::move(c)) , x10_minMag(std::move(d)) , x14_enableMinMag(e) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVETimeChain : public CModVectorElement { std::unique_ptr x4_a; std::unique_ptr x8_b; std::unique_ptr xc_swFrame; public: CMVETimeChain(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c) : x4_a(std::move(a)), x8_b(std::move(b)), xc_swFrame(std::move(c)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEBounce : public CModVectorElement { std::unique_ptr x4_planePoint; std::unique_ptr x8_planeNormal; std::unique_ptr xc_friction; std::unique_ptr x10_restitution; bool x14_planePrecomputed = false; bool x15_dieOnPenetrate; zeus::CVector3f x18_planeValidatedNormal; float x24_planeD = 0.0f; public: CMVEBounce(std::unique_ptr&& planePoint, std::unique_ptr&& planeNormal, std::unique_ptr&& friction, std::unique_ptr&& restitution, bool e); bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEConstant : public CModVectorElement { std::unique_ptr x4_x; std::unique_ptr x8_y; std::unique_ptr xc_z; public: CMVEConstant(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c) : x4_x(std::move(a)), x8_y(std::move(b)), xc_z(std::move(c)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEFastConstant : public CModVectorElement { zeus::CVector3f x4_val; public: CMVEFastConstant(float a, float b, float c) : x4_val(a, b, c) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEGravity : public CModVectorElement { std::unique_ptr x4_a; public: explicit CMVEGravity(std::unique_ptr&& a) : x4_a(std::move(a)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEExplode : public CModVectorElement { std::unique_ptr x4_a; std::unique_ptr x8_b; public: CMVEExplode(std::unique_ptr&& a, std::unique_ptr&& b) : x4_a(std::move(a)), x8_b(std::move(b)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVESetPosition : public CModVectorElement { std::unique_ptr x4_a; public: explicit CMVESetPosition(std::unique_ptr&& a) : x4_a(std::move(a)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEPulse : public CModVectorElement { std::unique_ptr x4_aDuration; std::unique_ptr x8_bDuration; std::unique_ptr xc_aVal; std::unique_ptr x10_bVal; public: CMVEPulse(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c, std::unique_ptr&& d) : x4_aDuration(std::move(a)), x8_bDuration(std::move(b)), xc_aVal(std::move(c)), x10_bVal(std::move(d)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVEWind : public CModVectorElement { std::unique_ptr x4_velocity; std::unique_ptr x8_factor; public: CMVEWind(std::unique_ptr&& a, std::unique_ptr&& b) : x4_velocity(std::move(a)), x8_factor(std::move(b)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; class CMVESwirl : public CModVectorElement { std::unique_ptr x4_helixPoint; std::unique_ptr x8_curveBinormal; std::unique_ptr xc_filterGain; std::unique_ptr x10_tangentialVelocity; public: CMVESwirl(std::unique_ptr&& a, std::unique_ptr&& b, std::unique_ptr&& c, std::unique_ptr&& d) : x4_helixPoint(std::move(a)) , x8_curveBinormal(std::move(b)) , xc_filterGain(std::move(c)) , x10_tangentialVelocity(std::move(d)) {} bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const override; }; } // namespace metaforce