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.
133 lines
3.2 KiB
133 lines
3.2 KiB
//========= 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 |
|
|
|
|
|
|
|
|