Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.2 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// This file defines the C_TEParticleSystem class, which handles most of the
// interfacing with the particle manager, simulation, and rendering.
// NOTE: most tempents are singletons.
#ifndef C_TE_PARTICLESYSTEM_H
#define C_TE_PARTICLESYSTEM_H
#include "particlemgr.h"
#include "c_basetempentity.h"
#include "particles_simple.h"
#define SIMSHIFT 10
typedef enum {
pt_static,
pt_grav,
pt_slowgrav,
pt_fire,
pt_explode,
pt_explode2,
pt_blob,
pt_blob2,
pt_vox_slowgrav,
pt_vox_grav,
pt_snow,
pt_rain,
pt_clientcustom // Must have callback function specified
} ptype_t;
class C_TEParticleSystem : public C_BaseTempEntity
{
public:
DECLARE_CLASS( C_TEParticleSystem, C_BaseTempEntity );
DECLARE_CLIENTCLASS();
C_TEParticleSystem();
public:
// particle effect sort origin
Vector m_vecOrigin;
};
// This is the class that legacy tempents use to emit particles.
// They use it in this pattern:
// CTEParticleRenderer *pRen = CTEParticleRenderer::Create();
// pRen->AddParticle....
// pRen->Release();
class CTEParticleRenderer : public CParticleEffect
{
public:
DECLARE_CLASS( CTEParticleRenderer, CParticleEffect );
virtual ~CTEParticleRenderer();
// Create a CTEParticleRenderer. Pass in your sort origin (m_vecOrigin).
static CSmartPtr<CTEParticleRenderer> Create( const char *pDebugName, const Vector &vOrigin );
StandardParticle_t* AddParticle();
CParticleMgr* GetParticleMgr();
void SetParticleType( StandardParticle_t *pParticle, ptype_t type );
ptype_t GetParticleType( StandardParticle_t *pParticle );
// Get/set lifetime. Note: lifetime here is a counter. You set it to a value and it
// counts down and disappears after that long.
void SetParticleLifetime( StandardParticle_t *pParticle, float lifetime );
float GetParticleLifetime( StandardParticle_t *pParticle );
// IParticleEffect overrides.
public:
virtual void RenderParticles( CParticleRenderIterator *pIterator );
virtual void SimulateParticles( CParticleSimulateIterator *pIterator );
private:
CTEParticleRenderer( const char *pDebugName );
CTEParticleRenderer( const CTEParticleRenderer & ); // not defined, not accessible
int m_nActiveParticles;
float m_ParticleSize;
PMaterialHandle m_MaterialHandle;
};
// ------------------------------------------------------------------------ //
// Inlines.
// ------------------------------------------------------------------------ //
inline void CTEParticleRenderer::SetParticleType(StandardParticle_t *pParticle, ptype_t type)
{
pParticle->m_EffectData = (unsigned char)type;
}
inline ptype_t CTEParticleRenderer::GetParticleType(StandardParticle_t *pParticle)
{
return (ptype_t)pParticle->m_EffectData;
}
// Get/set lifetime. Note that
inline void CTEParticleRenderer::SetParticleLifetime(StandardParticle_t *pParticle, float lifetime)
{
pParticle->m_Lifetime = lifetime;
}
inline float CTEParticleRenderer::GetParticleLifetime(StandardParticle_t *pParticle)
{
return pParticle->m_Lifetime;
}
#endif