#pragma once #include "CCharacterInfo.hpp" #include "CParticleGenInfo.hpp" #include "zeus/CFrustum.hpp" #include "CToken.hpp" #include "Particle/CGenDescription.hpp" #include "Particle/CSwooshDescription.hpp" #include "Particle/CElectricDescription.hpp" #include namespace urde { class CPoseAsTransforms; class CCharLayoutInfo; class CParticleDatabase { std::map>> x0_particleDescs; std::map>> x14_swooshDescs; std::map>> x28_electricDescs; std::map> x3c_rendererDrawLoop; std::map> x50_firstDrawLoop; std::map> x64_lastDrawLoop; std::map> x78_rendererDraw; std::map> x8c_firstDraw; std::map> xa0_lastDraw; bool xb4_24_updatesEnabled : 1; bool xb4_25_anySystemsDrawnWithModel : 1; static void SetModulationColorAllActiveEffectsForParticleDB(const zeus::CColor& color, std::map>& map); static void SuspendAllActiveEffectsForParticleDB(CStateManager& mgr, std::map>& map); static void DeleteAllLightsForParticleDB(CStateManager& mgr, std::map>& map); static void RenderParticleGenMap(const std::map>& map); static void RenderParticleGenMapMasked(const std::map>& map, int mask, int target); static void AddToRendererClippedParticleGenMap(const std::map>& map, const zeus::CFrustum& frustum); static void AddToRendererClippedParticleGenMapMasked(const std::map>& map, const zeus::CFrustum& frustum, int mask, int target); static void UpdateParticleGenDB(float dt, const CPoseAsTransforms& pose, const CCharLayoutInfo& charInfo, const zeus::CTransform& xf, const zeus::CVector3f& vec, CStateManager& stateMgr, std::map>& map, bool deleteIfDone); public: CParticleDatabase(); void CacheParticleDesc(const SObjectTag& tag); void CacheParticleDesc(const CCharacterInfo::CParticleResData& desc); void SetModulationColorAllActiveEffects(const zeus::CColor& color); void SuspendAllActiveEffects(CStateManager& stateMgr); void DeleteAllLights(CStateManager& stateMgr); void Update(float dt, const CPoseAsTransforms& pose, const CCharLayoutInfo& charInfo, const zeus::CTransform& xf, const zeus::CVector3f& scale, CStateManager& stateMgr); void RenderSystemsToBeDrawnLastMasked(int mask, int target) const; void RenderSystemsToBeDrawnLast() const; void RenderSystemsToBeDrawnFirstMasked(int mask, int target) const; void RenderSystemsToBeDrawnFirst() const; void AddToRendererClippedMasked(const zeus::CFrustum& frustum, int mask, int target) const; void AddToRendererClipped(const zeus::CFrustum& frustum) const; CParticleGenInfo* GetParticleEffect(std::string_view name) const; void SetParticleEffectState(std::string_view name, bool active, CStateManager& mgr); void SetCEXTValue(std::string_view name, int idx, float value); void AddAuxiliaryParticleEffect(std::string_view name, int flags, const CAuxiliaryParticleData& data, const zeus::CVector3f& scale, CStateManager& mgr, TAreaId aid, int lightId); void AddParticleEffect(std::string_view name, int flags, const CParticleData& data, const zeus::CVector3f& scale, CStateManager& mgr, TAreaId aid, bool oneShot, int lightId); void InsertParticleGen(bool oneShot, int flags, std::string_view name, std::unique_ptr&& gen); bool AreAnySystemsDrawnWithModel() const { return xb4_25_anySystemsDrawnWithModel; } void SetUpdatesEnabled(bool active) { xb4_24_updatesEnabled = active; } }; }