diff options
Diffstat (limited to 'mp/src/game/shared/particle_property.h')
| -rw-r--r-- | mp/src/game/shared/particle_property.h | 258 |
1 files changed, 129 insertions, 129 deletions
diff --git a/mp/src/game/shared/particle_property.h b/mp/src/game/shared/particle_property.h index 441b73cc..30d62e9e 100644 --- a/mp/src/game/shared/particle_property.h +++ b/mp/src/game/shared/particle_property.h @@ -1,129 +1,129 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================
-
-#ifndef PARTICLEPROPERTY_H
-#define PARTICLEPROPERTY_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "smartptr.h"
-#include "globalvars_base.h"
-#include "particles_new.h"
-#include "particle_parse.h"
-
-//-----------------------------------------------------------------------------
-// Forward declarations
-//-----------------------------------------------------------------------------
-class CBaseEntity;
-class CNewParticleEffect;
-
-// Argh: Server considers -1 to be an invalid attachment, whereas the client uses 0
-#ifdef CLIENT_DLL
-#define INVALID_PARTICLE_ATTACHMENT 0
-#else
-#define INVALID_PARTICLE_ATTACHMENT -1
-#endif
-
-struct ParticleControlPoint_t
-{
- ParticleControlPoint_t()
- {
- iControlPoint = 0;
- iAttachType = PATTACH_ABSORIGIN_FOLLOW;
- iAttachmentPoint = 0;
- vecOriginOffset = vec3_origin;
- }
-
- int iControlPoint;
- ParticleAttachment_t iAttachType;
- int iAttachmentPoint;
- Vector vecOriginOffset;
- EHANDLE hEntity;
-};
-
-struct ParticleEffectList_t
-{
- ParticleEffectList_t()
- {
- pParticleEffect = NULL;
- }
-
- CUtlVector<ParticleControlPoint_t> pControlPoints;
- CSmartPtr<CNewParticleEffect> pParticleEffect;
-};
-
-extern int GetAttachTypeFromString( const char *pszString );
-
-//-----------------------------------------------------------------------------
-// Encapsulates particle handling for an entity
-//-----------------------------------------------------------------------------
-class CParticleProperty
-{
- DECLARE_CLASS_NOBASE( CParticleProperty );
- DECLARE_EMBEDDED_NETWORKVAR();
- DECLARE_PREDICTABLE();
- DECLARE_DATADESC();
-
-public:
- CParticleProperty();
- ~CParticleProperty();
-
- void Init( CBaseEntity *pEntity );
- CBaseEntity *GetOuter( void ) { return m_pOuter; }
-
- // Effect Creation
- CNewParticleEffect *Create( const char *pszParticleName, ParticleAttachment_t iAttachType, const char *pszAttachmentName );
- CNewParticleEffect *Create( const char *pszParticleName, ParticleAttachment_t iAttachType, int iAttachmentPoint = INVALID_PARTICLE_ATTACHMENT, Vector vecOriginOffset = vec3_origin );
- void AddControlPoint( CNewParticleEffect *pEffect, int iPoint, C_BaseEntity *pEntity, ParticleAttachment_t iAttachType, const char *pszAttachmentName = NULL, Vector vecOriginOffset = vec3_origin );
- void AddControlPoint( int iEffectIndex, int iPoint, C_BaseEntity *pEntity, ParticleAttachment_t iAttachType, int iAttachmentPoint = INVALID_PARTICLE_ATTACHMENT, Vector vecOriginOffset = vec3_origin );
-
- inline void SetControlPointParent( CNewParticleEffect *pEffect, int whichControlPoint, int parentIdx );
- void SetControlPointParent( int iEffectIndex, int whichControlPoint, int parentIdx );
-
- // Commands
- void StopEmission( CNewParticleEffect *pEffect = NULL, bool bWakeOnStop = false, bool bDestroyAsleepSystems = false );
- void StopEmissionAndDestroyImmediately( CNewParticleEffect *pEffect = NULL );
-
- // kill all particle systems involving a given entity for their control points
- void StopParticlesInvolving( CBaseEntity *pEntity );
- void StopParticlesNamed( const char *pszEffectName, bool bForceRemoveInstantly = false ); ///< kills all particles using the given definition name
- void StopParticlesWithNameAndAttachment( const char *pszEffectName, int iAttachmentPoint, bool bForceRemoveInstantly = false ); ///< kills all particles using the given definition name
-
- // Particle System hooks
- void OnParticleSystemUpdated( CNewParticleEffect *pEffect, float flTimeDelta );
- void OnParticleSystemDeleted( CNewParticleEffect *pEffect );
-
-#ifdef CLIENT_DLL
- void OwnerSetDormantTo( bool bDormant );
-#endif
-
- // Used to replace a particle effect with a different one; attaches the control point updating to the new one
- void ReplaceParticleEffect( CNewParticleEffect *pOldEffect, CNewParticleEffect *pNewEffect );
-
- // Debugging
- void DebugPrintEffects( void );
-
- int FindEffect( const char *pEffectName, int nStart = 0 );
- inline CNewParticleEffect *GetParticleEffectFromIdx( int idx );
-
-private:
- int GetParticleAttachment( C_BaseEntity *pEntity, const char *pszAttachmentName, const char *pszParticleName );
- int FindEffect( CNewParticleEffect *pEffect );
- void UpdateParticleEffect( ParticleEffectList_t *pEffect, bool bInitializing = false, int iOnlyThisControlPoint = -1 );
- void UpdateControlPoint( ParticleEffectList_t *pEffect, int iPoint, bool bInitializing );
-
-private:
- CBaseEntity *m_pOuter;
- CUtlVector<ParticleEffectList_t> m_ParticleEffects;
- int m_iDormancyChangedAtFrame;
-
- friend class CBaseEntity;
-};
-
-#include "particle_property_inlines.h"
-
-#endif // PARTICLEPROPERTY_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#ifndef PARTICLEPROPERTY_H +#define PARTICLEPROPERTY_H +#ifdef _WIN32 +#pragma once +#endif + +#include "smartptr.h" +#include "globalvars_base.h" +#include "particles_new.h" +#include "particle_parse.h" + +//----------------------------------------------------------------------------- +// Forward declarations +//----------------------------------------------------------------------------- +class CBaseEntity; +class CNewParticleEffect; + +// Argh: Server considers -1 to be an invalid attachment, whereas the client uses 0 +#ifdef CLIENT_DLL +#define INVALID_PARTICLE_ATTACHMENT 0 +#else +#define INVALID_PARTICLE_ATTACHMENT -1 +#endif + +struct ParticleControlPoint_t +{ + ParticleControlPoint_t() + { + iControlPoint = 0; + iAttachType = PATTACH_ABSORIGIN_FOLLOW; + iAttachmentPoint = 0; + vecOriginOffset = vec3_origin; + } + + int iControlPoint; + ParticleAttachment_t iAttachType; + int iAttachmentPoint; + Vector vecOriginOffset; + EHANDLE hEntity; +}; + +struct ParticleEffectList_t +{ + ParticleEffectList_t() + { + pParticleEffect = NULL; + } + + CUtlVector<ParticleControlPoint_t> pControlPoints; + CSmartPtr<CNewParticleEffect> pParticleEffect; +}; + +extern int GetAttachTypeFromString( const char *pszString ); + +//----------------------------------------------------------------------------- +// Encapsulates particle handling for an entity +//----------------------------------------------------------------------------- +class CParticleProperty +{ + DECLARE_CLASS_NOBASE( CParticleProperty ); + DECLARE_EMBEDDED_NETWORKVAR(); + DECLARE_PREDICTABLE(); + DECLARE_DATADESC(); + +public: + CParticleProperty(); + ~CParticleProperty(); + + void Init( CBaseEntity *pEntity ); + CBaseEntity *GetOuter( void ) { return m_pOuter; } + + // Effect Creation + CNewParticleEffect *Create( const char *pszParticleName, ParticleAttachment_t iAttachType, const char *pszAttachmentName ); + CNewParticleEffect *Create( const char *pszParticleName, ParticleAttachment_t iAttachType, int iAttachmentPoint = INVALID_PARTICLE_ATTACHMENT, Vector vecOriginOffset = vec3_origin ); + void AddControlPoint( CNewParticleEffect *pEffect, int iPoint, C_BaseEntity *pEntity, ParticleAttachment_t iAttachType, const char *pszAttachmentName = NULL, Vector vecOriginOffset = vec3_origin ); + void AddControlPoint( int iEffectIndex, int iPoint, C_BaseEntity *pEntity, ParticleAttachment_t iAttachType, int iAttachmentPoint = INVALID_PARTICLE_ATTACHMENT, Vector vecOriginOffset = vec3_origin ); + + inline void SetControlPointParent( CNewParticleEffect *pEffect, int whichControlPoint, int parentIdx ); + void SetControlPointParent( int iEffectIndex, int whichControlPoint, int parentIdx ); + + // Commands + void StopEmission( CNewParticleEffect *pEffect = NULL, bool bWakeOnStop = false, bool bDestroyAsleepSystems = false ); + void StopEmissionAndDestroyImmediately( CNewParticleEffect *pEffect = NULL ); + + // kill all particle systems involving a given entity for their control points + void StopParticlesInvolving( CBaseEntity *pEntity ); + void StopParticlesNamed( const char *pszEffectName, bool bForceRemoveInstantly = false ); ///< kills all particles using the given definition name + void StopParticlesWithNameAndAttachment( const char *pszEffectName, int iAttachmentPoint, bool bForceRemoveInstantly = false ); ///< kills all particles using the given definition name + + // Particle System hooks + void OnParticleSystemUpdated( CNewParticleEffect *pEffect, float flTimeDelta ); + void OnParticleSystemDeleted( CNewParticleEffect *pEffect ); + +#ifdef CLIENT_DLL + void OwnerSetDormantTo( bool bDormant ); +#endif + + // Used to replace a particle effect with a different one; attaches the control point updating to the new one + void ReplaceParticleEffect( CNewParticleEffect *pOldEffect, CNewParticleEffect *pNewEffect ); + + // Debugging + void DebugPrintEffects( void ); + + int FindEffect( const char *pEffectName, int nStart = 0 ); + inline CNewParticleEffect *GetParticleEffectFromIdx( int idx ); + +private: + int GetParticleAttachment( C_BaseEntity *pEntity, const char *pszAttachmentName, const char *pszParticleName ); + int FindEffect( CNewParticleEffect *pEffect ); + void UpdateParticleEffect( ParticleEffectList_t *pEffect, bool bInitializing = false, int iOnlyThisControlPoint = -1 ); + void UpdateControlPoint( ParticleEffectList_t *pEffect, int iPoint, bool bInitializing ); + +private: + CBaseEntity *m_pOuter; + CUtlVector<ParticleEffectList_t> m_ParticleEffects; + int m_iDormancyChangedAtFrame; + + friend class CBaseEntity; +}; + +#include "particle_property_inlines.h" + +#endif // PARTICLEPROPERTY_H |