//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $Workfile:     $
// $Date:         $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#if !defined( BASETEMPENTITY_H )
#define BASETEMPENTITY_H
#ifdef _WIN32
#pragma once
#endif

#include "edict.h"

// This is the base class for TEMP ENTITIES that use the 
//  event system to propagate
class CBaseTempEntity
{
public:
	DECLARE_CLASS_NOBASE( CBaseTempEntity );
	DECLARE_SERVERCLASS();

						CBaseTempEntity( const char *name );
	virtual				~CBaseTempEntity( void );

	const char			*GetName( void );

	// Force all derived classes to implement a test
	virtual void		Test( const Vector& current_origin, const QAngle& current_angles );

	virtual	void		Create( IRecipientFilter& filter, float delay = 0.0 );

	virtual void		Precache( void );

	CBaseTempEntity		*GetNext( void );

	// Get list of tempentities
	static CBaseTempEntity *GetList( void );

	// Called at startup to allow temp entities to precache any models/sounds that they need
	static void			PrecacheTempEnts( void );

	void NetworkStateChanged() {}	// TE's are sent out right away so we don't track whether state changes or not,
									// but we want to allow CNetworkVars.
	void NetworkStateChanged( void *pVar ) {}

private:
	// Descriptive name, for when running tests
	const char			*m_pszName;

	// Next in chain
	CBaseTempEntity		*m_pNext;

	// ConVars add themselves to this list for the executable. Then ConVarMgr::Init() runs through 
	// all the console variables and registers them.
	static CBaseTempEntity	*s_pTempEntities;
};

#endif // BASETEMPENTITY_H