134 lines
3.3 KiB
C++
134 lines
3.3 KiB
C++
//========= Copyright © 1996-2005, 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
|
|
|
|
|
|
|