|
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
|
|
//
|
|
|
|
// Purpose:
|
|
|
|
//
|
|
|
|
// $NoKeywords: $
|
|
|
|
//
|
|
|
|
//=============================================================================//
|
|
|
|
|
|
|
|
// Particle system entities can derive from this to handle some of the mundane
|
|
|
|
// functionality of hooking into the engine's entity system.
|
|
|
|
|
|
|
|
#ifndef PARTICLE_BASEEFFECT_H
|
|
|
|
#define PARTICLE_BASEEFFECT_H
|
|
|
|
|
|
|
|
#include "predictable_entity.h"
|
|
|
|
#include "baseentity_shared.h"
|
|
|
|
|
|
|
|
#if defined( CLIENT_DLL )
|
|
|
|
#define CBaseParticleEntity C_BaseParticleEntity
|
|
|
|
|
|
|
|
#include "particlemgr.h"
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class CBaseParticleEntity : public CBaseEntity
|
|
|
|
#if defined( CLIENT_DLL )
|
|
|
|
, public IParticleEffect
|
|
|
|
#endif
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DECLARE_CLASS( CBaseParticleEntity, CBaseEntity );
|
|
|
|
DECLARE_PREDICTABLE();
|
|
|
|
DECLARE_NETWORKCLASS();
|
|
|
|
|
|
|
|
CBaseParticleEntity();
|
|
|
|
virtual ~CBaseParticleEntity();
|
|
|
|
|
|
|
|
virtual int ObjectCaps()
|
|
|
|
{
|
|
|
|
if( m_bShouldDeletedOnChangelevel )
|
|
|
|
return BaseClass::ObjectCaps() & ~FCAP_ACROSS_TRANSITION;
|
|
|
|
else
|
|
|
|
return BaseClass::ObjectCaps();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetShouldDeletedOnChangelevel( bool bDel ) { m_bShouldDeletedOnChangelevel = bDel; }
|
|
|
|
|
|
|
|
// CBaseEntity overrides.
|
|
|
|
public:
|
|
|
|
#if !defined( CLIENT_DLL )
|
|
|
|
virtual int UpdateTransmitState( void );
|
|
|
|
#else
|
|
|
|
// Default IParticleEffect overrides.
|
|
|
|
public:
|
|
|
|
|
|
|
|
virtual bool ShouldSimulate() const { return m_bSimulate; }
|
|
|
|
virtual void SetShouldSimulate( bool bSim ) { m_bSimulate = bSim; }
|
|
|
|
|
|
|
|
virtual void SimulateParticles( CParticleSimulateIterator *pIterator );
|
|
|
|
virtual void RenderParticles( CParticleRenderIterator *pIterator );
|
|
|
|
virtual const Vector & GetSortOrigin();
|
|
|
|
public:
|
|
|
|
CParticleEffectBinding m_ParticleEffect;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
virtual void Activate();
|
|
|
|
virtual void Think();
|
|
|
|
|
|
|
|
#if defined( CLIENT_DLL )
|
|
|
|
// NOTE: Ths enclosed particle effect binding will do all the drawing
|
|
|
|
virtual bool ShouldDraw() { return false; }
|
|
|
|
|
|
|
|
int AllocateToolParticleEffectId();
|
|
|
|
int GetToolParticleEffectId() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
int m_nToolParticleEffectId;
|
|
|
|
bool m_bSimulate;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
public:
|
|
|
|
void FollowEntity(CBaseEntity *pEntity);
|
|
|
|
|
|
|
|
// UTIL_Remove will be called after the specified amount of time.
|
|
|
|
// If you pass in -1, the entity will never go away automatically.
|
|
|
|
void SetLifetime(float lifetime);
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool m_bShouldDeletedOnChangelevel;
|
|
|
|
|
|
|
|
CBaseParticleEntity( const CBaseParticleEntity & ); // not defined, not accessible
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#if defined( CLIENT_DLL )
|
|
|
|
|
|
|
|
inline int CBaseParticleEntity::GetToolParticleEffectId() const
|
|
|
|
{
|
|
|
|
return m_nToolParticleEffectId;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline int CBaseParticleEntity::AllocateToolParticleEffectId()
|
|
|
|
{
|
|
|
|
m_nToolParticleEffectId = ParticleMgr()->AllocateToolParticleEffectId();
|
|
|
|
return m_nToolParticleEffectId;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // CLIENT_DLL
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|