#pragma once #include #include #include "Runtime/RetroTypes.hpp" #include #include #include #include namespace metaforce { class CElementGen; class CParticleGlobals { CParticleGlobals() = default; static std::unique_ptr g_ParticleGlobals; public: int m_EmitterTime = 0; float m_EmitterTimeReal = 0.f; void SetEmitterTime(int frame) { m_EmitterTime = frame; m_EmitterTimeReal = float(frame); } int m_ParticleLifetime = 0; float m_ParticleLifetimeReal = 0.f; void SetParticleLifetime(int frame) { m_ParticleLifetime = frame; m_ParticleLifetimeReal = float(frame); } int m_ParticleLifetimePercentage = 0; float m_ParticleLifetimePercentageReal = 0.f; float m_ParticleLifetimePercentageRemainder = 0.f; void UpdateParticleLifetimeTweenValues(int frame) { const float lt = m_ParticleLifetime != 0 ? float(m_ParticleLifetime) : 1.0f; m_ParticleLifetimePercentageReal = 100.0f * float(frame) / lt; m_ParticleLifetimePercentage = int(m_ParticleLifetimePercentageReal); m_ParticleLifetimePercentageRemainder = m_ParticleLifetimePercentageReal - float(m_ParticleLifetimePercentage); m_ParticleLifetimePercentage = zeus::clamp(0, m_ParticleLifetimePercentage, 100); } const std::array* m_particleAccessParameters = nullptr; struct SParticleSystem { FourCC x0_type; CElementGen* x4_system; }; SParticleSystem* m_currentParticleSystem = nullptr; static CParticleGlobals* instance() { if (!g_ParticleGlobals) g_ParticleGlobals.reset(new CParticleGlobals()); return g_ParticleGlobals.get(); } }; //struct SParticleInstanceTex { // std::array pos; // zeus::CColor color; // std::array uvs; //}; //extern std::vector g_instTexData; // //struct SParticleInstanceIndTex { // std::array pos; // zeus::CColor color; // std::array texrTindUVs; // zeus::CVector4f sceneUVs; //}; //extern std::vector g_instIndTexData; // //struct SParticleInstanceNoTex { // std::array pos; // zeus::CColor color; //}; //extern std::vector g_instNoTexData; // //struct SParticleUniforms { // zeus::CMatrix4f mvp; // zeus::CColor moduColor; //}; } // namespace metaforce