diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/game/client/particles_simple.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/game/client/particles_simple.h')
| -rw-r--r-- | sp/src/game/client/particles_simple.h | 510 |
1 files changed, 255 insertions, 255 deletions
diff --git a/sp/src/game/client/particles_simple.h b/sp/src/game/client/particles_simple.h index 3227cd0b..4b30f110 100644 --- a/sp/src/game/client/particles_simple.h +++ b/sp/src/game/client/particles_simple.h @@ -1,255 +1,255 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//===========================================================================//
-
-#ifndef PARTICLES_SIMPLE_H
-#define PARTICLES_SIMPLE_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "particlemgr.h"
-#include "particlesphererenderer.h"
-#include "smartptr.h"
-
-
-// ------------------------------------------------------------------------------------------------ //
-// CParticleEffect is the base class that you can derive from to make a particle effect.
-// These can be used two ways:
-//
-// 1. Allocate a CParticleEffect-based object using the class's static Create() function. This gives
-// you back a smart pointer that handles the reference counting for you.
-//
-// 2. Contain a CParticleEffect object in your class.
-// ------------------------------------------------------------------------------------------------ //
-
-class CParticleEffect : public IParticleEffect
-{
-public:
- DECLARE_CLASS_NOBASE( CParticleEffect );
-
- friend class CRefCountAccessor;
-
- // Call this before adding a bunch of particles to give it a rough estimate of where
- // your particles are for sorting amongst other translucent entities.
- void SetSortOrigin( const Vector &vSortOrigin );
-
- PMaterialHandle GetPMaterial(const char *name);
-
- Particle* AddParticle( unsigned int particleSize, PMaterialHandle material, const Vector &origin );
-
- CParticleEffectBinding& GetBinding() { return m_ParticleEffect; }
-
- const char *GetEffectName();
-
- void AddFlags( int iFlags ) { m_Flags |= iFlags; }
- void RemoveFlags( int iFlags ) { m_Flags &= ~iFlags; }
-
- void SetDontRemove( bool bSet )
- {
- if( bSet )
- AddFlags( FLAG_DONT_REMOVE );
- else
- RemoveFlags( FLAG_DONT_REMOVE );
- }
-
-// IParticleEffect overrides
-public:
-
- virtual void SetParticleCullRadius( float radius );
- virtual void NotifyRemove( void );
- virtual const Vector & GetSortOrigin();
- virtual void NotifyDestroyParticle( Particle* pParticle );
- virtual void Update( float flTimeDelta );
-
- // All Create() functions should call this so the effect deletes itself
- // when it is removed from the particle manager.
- void SetDynamicallyAllocated( bool bDynamic=true );
-
- virtual bool ShouldSimulate() const { return m_bSimulate; }
- virtual void SetShouldSimulate( bool bSim ) { m_bSimulate = bSim; }
-
- int AllocateToolParticleEffectId();
- int GetToolParticleEffectId() const;
-protected:
- CParticleEffect( const char *pDebugName );
- virtual ~CParticleEffect();
-
- // Returns nonzero if Release() has been called.
- int IsReleased();
-
- enum
- {
- FLAG_ALLOCATED = (1<<1), // Most of the CParticleEffects are dynamically allocated but
- // some are member variables of a class. If they're member variables.
- FLAG_DONT_REMOVE = (1<<2),
- };
-
- // Used to track down bugs.
- char const *m_pDebugName;
-
- CParticleEffectBinding m_ParticleEffect;
- Vector m_vSortOrigin;
-
- int m_Flags; // Combination of CParticleEffect::FLAG_
-
- bool m_bSimulate;
- int m_nToolParticleEffectId;
-
-private:
- // Update the reference count.
- void AddRef();
- void Release();
-
- int m_RefCount; // When this goes to zero and the effect has no more active
- // particles, (and it's dynamically allocated), it will delete itself.
-
- CParticleEffect( const CParticleEffect & ); // not defined, not accessible
-};
-
-inline int CParticleEffect::GetToolParticleEffectId() const
-{
- return m_nToolParticleEffectId;
-}
-
-inline int CParticleEffect::AllocateToolParticleEffectId()
-{
- m_nToolParticleEffectId = ParticleMgr()->AllocateToolParticleEffectId();
- return m_nToolParticleEffectId;
-}
-
-
-//-----------------------------------------------------------------------------
-// Particle flags
-//-----------------------------------------------------------------------------
-enum SimpleParticleFlag_t
-{
- SIMPLE_PARTICLE_FLAG_WINDBLOWN = 0x1,
- SIMPLE_PARTICLE_FLAG_NO_VEL_DECAY = 0x2 // Used by the blood spray emitter. By default, it decays the
- // particle velocity.
-};
-
-class SimpleParticle : public Particle
-{
-public:
- SimpleParticle() : m_iFlags(0) {}
-
- // AddSimpleParticle automatically initializes these fields.
- Vector m_vecVelocity;
- float m_flRoll;
- float m_flDieTime; // How long it lives for.
- float m_flLifetime; // How long it has been alive for so far.
- unsigned char m_uchColor[3];
- unsigned char m_uchStartAlpha;
- unsigned char m_uchEndAlpha;
- unsigned char m_uchStartSize;
- unsigned char m_uchEndSize;
- unsigned char m_iFlags; // See SimpleParticleFlag_t above
- float m_flRollDelta;
-};
-
-
-
-// CSimpleEmitter implements a common way to simulate and render particles.
-//
-// Effects can add particles to the particle manager and point at CSimpleEmitter
-// for the effect so they don't have to implement the simulation code. It simulates
-// velocity, and fades their alpha from invisible to solid and back to invisible over their lifetime.
-//
-// Particles you add using this effect must use the class CParticleSimple::Particle.
-class CSimpleEmitter : public CParticleEffect
-{
-// IParticleEffect overrides.
-public:
-
- DECLARE_CLASS( CSimpleEmitter, CParticleEffect );
-
- static CSmartPtr<CSimpleEmitter> Create( const char *pDebugName );
-
- virtual void SimulateParticles( CParticleSimulateIterator *pIterator );
- virtual void RenderParticles( CParticleRenderIterator *pIterator );
-
- void SetNearClip( float nearClipMin, float nearClipMax );
-
- void SetDrawBeforeViewModel( bool state = true );
-
- SimpleParticle* AddSimpleParticle( PMaterialHandle hMaterial, const Vector &vOrigin, float flDieTime=3, unsigned char uchSize=10 );
-
-// Overridables for variants like CEmberEffect.
-protected:
- CSimpleEmitter( const char *pDebugName = NULL );
- virtual ~CSimpleEmitter();
-
- virtual float UpdateAlpha( const SimpleParticle *pParticle );
- virtual float UpdateScale( const SimpleParticle *pParticle );
- virtual float UpdateRoll( SimpleParticle *pParticle, float timeDelta );
- virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta );
- virtual Vector UpdateColor( const SimpleParticle *pParticle );
-
- float m_flNearClipMin;
- float m_flNearClipMax;
-
-private:
- CSimpleEmitter( const CSimpleEmitter & ); // not defined, not accessible
-};
-
-//==================================================
-// EmberEffect
-//==================================================
-
-class CEmberEffect : public CSimpleEmitter
-{
-public:
- CEmberEffect( const char *pDebugName );
- static CSmartPtr<CEmberEffect> Create( const char *pDebugName );
-
- virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta );
- virtual Vector UpdateColor( const SimpleParticle *pParticle );
-
-private:
- CEmberEffect( const CEmberEffect & ); // not defined, not accessible
-};
-
-
-//==================================================
-// FireSmokeEffect
-//==================================================
-
-class CFireSmokeEffect : public CSimpleEmitter
-{
-public:
- CFireSmokeEffect( const char *pDebugName );
- static CSmartPtr<CFireSmokeEffect> Create( const char *pDebugName );
-
- virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta );
- virtual float UpdateAlpha( const SimpleParticle *pParticle );
-
-protected:
- VPlane m_planeClip;
-
-private:
- CFireSmokeEffect( const CFireSmokeEffect & ); // not defined, not accessible
-};
-
-
-//==================================================
-// CFireParticle
-//==================================================
-
-class CFireParticle : public CSimpleEmitter
-{
-public:
- CFireParticle( const char *pDebugName );
- static CSmartPtr<CFireParticle> Create( const char *pDebugName );
-
- virtual Vector UpdateColor( const SimpleParticle *pParticle );
-
-private:
- CFireParticle( const CFireParticle & ); // not defined, not accessible
-};
-
-
-#endif // PARTICLES_SIMPLE_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//===========================================================================// + +#ifndef PARTICLES_SIMPLE_H +#define PARTICLES_SIMPLE_H +#ifdef _WIN32 +#pragma once +#endif + +#include "particlemgr.h" +#include "particlesphererenderer.h" +#include "smartptr.h" + + +// ------------------------------------------------------------------------------------------------ // +// CParticleEffect is the base class that you can derive from to make a particle effect. +// These can be used two ways: +// +// 1. Allocate a CParticleEffect-based object using the class's static Create() function. This gives +// you back a smart pointer that handles the reference counting for you. +// +// 2. Contain a CParticleEffect object in your class. +// ------------------------------------------------------------------------------------------------ // + +class CParticleEffect : public IParticleEffect +{ +public: + DECLARE_CLASS_NOBASE( CParticleEffect ); + + friend class CRefCountAccessor; + + // Call this before adding a bunch of particles to give it a rough estimate of where + // your particles are for sorting amongst other translucent entities. + void SetSortOrigin( const Vector &vSortOrigin ); + + PMaterialHandle GetPMaterial(const char *name); + + Particle* AddParticle( unsigned int particleSize, PMaterialHandle material, const Vector &origin ); + + CParticleEffectBinding& GetBinding() { return m_ParticleEffect; } + + const char *GetEffectName(); + + void AddFlags( int iFlags ) { m_Flags |= iFlags; } + void RemoveFlags( int iFlags ) { m_Flags &= ~iFlags; } + + void SetDontRemove( bool bSet ) + { + if( bSet ) + AddFlags( FLAG_DONT_REMOVE ); + else + RemoveFlags( FLAG_DONT_REMOVE ); + } + +// IParticleEffect overrides +public: + + virtual void SetParticleCullRadius( float radius ); + virtual void NotifyRemove( void ); + virtual const Vector & GetSortOrigin(); + virtual void NotifyDestroyParticle( Particle* pParticle ); + virtual void Update( float flTimeDelta ); + + // All Create() functions should call this so the effect deletes itself + // when it is removed from the particle manager. + void SetDynamicallyAllocated( bool bDynamic=true ); + + virtual bool ShouldSimulate() const { return m_bSimulate; } + virtual void SetShouldSimulate( bool bSim ) { m_bSimulate = bSim; } + + int AllocateToolParticleEffectId(); + int GetToolParticleEffectId() const; +protected: + CParticleEffect( const char *pDebugName ); + virtual ~CParticleEffect(); + + // Returns nonzero if Release() has been called. + int IsReleased(); + + enum + { + FLAG_ALLOCATED = (1<<1), // Most of the CParticleEffects are dynamically allocated but + // some are member variables of a class. If they're member variables. + FLAG_DONT_REMOVE = (1<<2), + }; + + // Used to track down bugs. + char const *m_pDebugName; + + CParticleEffectBinding m_ParticleEffect; + Vector m_vSortOrigin; + + int m_Flags; // Combination of CParticleEffect::FLAG_ + + bool m_bSimulate; + int m_nToolParticleEffectId; + +private: + // Update the reference count. + void AddRef(); + void Release(); + + int m_RefCount; // When this goes to zero and the effect has no more active + // particles, (and it's dynamically allocated), it will delete itself. + + CParticleEffect( const CParticleEffect & ); // not defined, not accessible +}; + +inline int CParticleEffect::GetToolParticleEffectId() const +{ + return m_nToolParticleEffectId; +} + +inline int CParticleEffect::AllocateToolParticleEffectId() +{ + m_nToolParticleEffectId = ParticleMgr()->AllocateToolParticleEffectId(); + return m_nToolParticleEffectId; +} + + +//----------------------------------------------------------------------------- +// Particle flags +//----------------------------------------------------------------------------- +enum SimpleParticleFlag_t +{ + SIMPLE_PARTICLE_FLAG_WINDBLOWN = 0x1, + SIMPLE_PARTICLE_FLAG_NO_VEL_DECAY = 0x2 // Used by the blood spray emitter. By default, it decays the + // particle velocity. +}; + +class SimpleParticle : public Particle +{ +public: + SimpleParticle() : m_iFlags(0) {} + + // AddSimpleParticle automatically initializes these fields. + Vector m_vecVelocity; + float m_flRoll; + float m_flDieTime; // How long it lives for. + float m_flLifetime; // How long it has been alive for so far. + unsigned char m_uchColor[3]; + unsigned char m_uchStartAlpha; + unsigned char m_uchEndAlpha; + unsigned char m_uchStartSize; + unsigned char m_uchEndSize; + unsigned char m_iFlags; // See SimpleParticleFlag_t above + float m_flRollDelta; +}; + + + +// CSimpleEmitter implements a common way to simulate and render particles. +// +// Effects can add particles to the particle manager and point at CSimpleEmitter +// for the effect so they don't have to implement the simulation code. It simulates +// velocity, and fades their alpha from invisible to solid and back to invisible over their lifetime. +// +// Particles you add using this effect must use the class CParticleSimple::Particle. +class CSimpleEmitter : public CParticleEffect +{ +// IParticleEffect overrides. +public: + + DECLARE_CLASS( CSimpleEmitter, CParticleEffect ); + + static CSmartPtr<CSimpleEmitter> Create( const char *pDebugName ); + + virtual void SimulateParticles( CParticleSimulateIterator *pIterator ); + virtual void RenderParticles( CParticleRenderIterator *pIterator ); + + void SetNearClip( float nearClipMin, float nearClipMax ); + + void SetDrawBeforeViewModel( bool state = true ); + + SimpleParticle* AddSimpleParticle( PMaterialHandle hMaterial, const Vector &vOrigin, float flDieTime=3, unsigned char uchSize=10 ); + +// Overridables for variants like CEmberEffect. +protected: + CSimpleEmitter( const char *pDebugName = NULL ); + virtual ~CSimpleEmitter(); + + virtual float UpdateAlpha( const SimpleParticle *pParticle ); + virtual float UpdateScale( const SimpleParticle *pParticle ); + virtual float UpdateRoll( SimpleParticle *pParticle, float timeDelta ); + virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta ); + virtual Vector UpdateColor( const SimpleParticle *pParticle ); + + float m_flNearClipMin; + float m_flNearClipMax; + +private: + CSimpleEmitter( const CSimpleEmitter & ); // not defined, not accessible +}; + +//================================================== +// EmberEffect +//================================================== + +class CEmberEffect : public CSimpleEmitter +{ +public: + CEmberEffect( const char *pDebugName ); + static CSmartPtr<CEmberEffect> Create( const char *pDebugName ); + + virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta ); + virtual Vector UpdateColor( const SimpleParticle *pParticle ); + +private: + CEmberEffect( const CEmberEffect & ); // not defined, not accessible +}; + + +//================================================== +// FireSmokeEffect +//================================================== + +class CFireSmokeEffect : public CSimpleEmitter +{ +public: + CFireSmokeEffect( const char *pDebugName ); + static CSmartPtr<CFireSmokeEffect> Create( const char *pDebugName ); + + virtual void UpdateVelocity( SimpleParticle *pParticle, float timeDelta ); + virtual float UpdateAlpha( const SimpleParticle *pParticle ); + +protected: + VPlane m_planeClip; + +private: + CFireSmokeEffect( const CFireSmokeEffect & ); // not defined, not accessible +}; + + +//================================================== +// CFireParticle +//================================================== + +class CFireParticle : public CSimpleEmitter +{ +public: + CFireParticle( const char *pDebugName ); + static CSmartPtr<CFireParticle> Create( const char *pDebugName ); + + virtual Vector UpdateColor( const SimpleParticle *pParticle ); + +private: + CFireParticle( const CFireParticle & ); // not defined, not accessible +}; + + +#endif // PARTICLES_SIMPLE_H |