metaforce/Runtime/Character/CParticleDatabase.hpp

77 lines
4.5 KiB
C++
Raw Normal View History

2016-04-13 06:07:23 +00:00
#ifndef __URDE_CPARTICLEDATABASE_HPP__
#define __URDE_CPARTICLEDATABASE_HPP__
#include "CCharacterInfo.hpp"
#include "CParticleGenInfo.hpp"
2016-09-04 02:27:35 +00:00
#include "zeus/CFrustum.hpp"
2017-03-01 06:02:54 +00:00
#include "CToken.hpp"
#include "Particle/CGenDescription.hpp"
#include "Particle/CSwooshDescription.hpp"
#include "Particle/CElectricDescription.hpp"
#include <map>
namespace urde
{
2016-09-04 02:27:35 +00:00
class CPoseAsTransforms;
class CCharLayoutInfo;
class CParticleDatabase
{
2017-08-13 05:26:14 +00:00
std::map<CAssetId, std::shared_ptr<TLockedToken<CGenDescription>>> x0_particleDescs;
std::map<CAssetId, std::shared_ptr<TLockedToken<CSwooshDescription>>> x14_swooshDescs;
std::map<CAssetId, std::shared_ptr<TLockedToken<CElectricDescription>>> x28_electricDescs;
2017-06-03 06:03:07 +00:00
std::map<std::string, std::unique_ptr<CParticleGenInfo>> x3c_rendererDrawLoop;
std::map<std::string, std::unique_ptr<CParticleGenInfo>> x50_firstDrawLoop;
std::map<std::string, std::unique_ptr<CParticleGenInfo>> x64_lastDrawLoop;
std::map<std::string, std::unique_ptr<CParticleGenInfo>> x78_rendererDraw;
std::map<std::string, std::unique_ptr<CParticleGenInfo>> x8c_firstDraw;
std::map<std::string, std::unique_ptr<CParticleGenInfo>> xa0_lastDraw;
bool xb4_24_active : 1;
bool xb4_25_anySystemsDrawnWithModel : 1;
2016-11-20 21:53:15 +00:00
2017-06-03 06:03:07 +00:00
static void SetModulationColorAllActiveEffectsForParticleDB(const zeus::CColor& color,
std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map);
static void SuspendAllActiveEffectsForParticleDB(CStateManager& mgr,
std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map);
static void DeleteAllLightsForParticleDB(CStateManager& mgr,
std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map);
static void RenderParticleGenMap(const std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map);
static void RenderParticleGenMapMasked(const std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map,
int mask, int target);
static void AddToRendererClippedParticleGenMap(const std::map<std::string, std::unique_ptr<CParticleGenInfo>>& map,
const zeus::CFrustum& frustum);
static void AddToRendererClippedParticleGenMapMasked(const std::map<std::string, std::unique_ptr<CParticleGenInfo>>& 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<std::string, std::unique_ptr<CParticleGenInfo>>& map, bool deleteIfDone);
public:
2017-06-03 06:03:07 +00:00
CParticleDatabase();
2017-11-24 08:01:06 +00:00
void CacheParticleDesc(const SObjectTag& tag);
void CacheParticleDesc(const CCharacterInfo::CParticleResData& desc);
void SetModulationColorAllActiveEffects(const zeus::CColor& color);
2016-08-21 20:39:18 +00:00
void SuspendAllActiveEffects(CStateManager& stateMgr);
2017-06-03 06:03:07 +00:00
void DeleteAllLights(CStateManager& stateMgr);
2016-11-20 21:53:15 +00:00
void Update(float dt, const CPoseAsTransforms& pose, const CCharLayoutInfo& charInfo, const zeus::CTransform& xf,
2017-06-03 06:03:07 +00:00
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;
2017-11-13 06:19:18 +00:00
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,
2017-06-04 01:01:09 +00:00
const zeus::CVector3f& scale, CStateManager& mgr, TAreaId aid, int lightId);
2017-11-13 06:19:18 +00:00
void AddParticleEffect(std::string_view name, int flags, const CParticleData& data,
2017-06-04 01:01:09 +00:00
const zeus::CVector3f& scale, CStateManager& mgr, TAreaId aid, bool oneShot, int lightId);
2017-11-13 06:19:18 +00:00
void InsertParticleGen(bool oneShot, int flags, std::string_view name,
2017-06-03 06:03:07 +00:00
std::unique_ptr<CParticleGenInfo>&& gen);
bool AreAnySystemsDrawnWithModel() const { return xb4_25_anySystemsDrawnWithModel; }
};
}
2016-04-13 06:07:23 +00:00
#endif // __URDE_CPARTICLEDATABASE_HPP__