//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef TEST_STRESSENTITIES_H
#define TEST_STRESSENTITIES_H
#ifdef _WIN32
#pragma once
#endif


class CBaseEntity;


typedef CBaseEntity* (*StressEntityFn)();	// Function to create an entity for the stress test.


// Each game DLL can instantiate these to register types of entities it can create
// for the entity stress test.
class CStressEntityReg
{
public:

							CStressEntityReg( StressEntityFn fn )
							{
								m_pFn = fn;
								m_pNext = s_pHead;
								s_pHead = this;
							}

	static CStressEntityReg*GetListHead()	{ return s_pHead; }
	CStressEntityReg*		GetNext()		{ return m_pNext; }
	StressEntityFn			GetFn()			{ return m_pFn; }


private:
	static CStressEntityReg	*s_pHead;	// List of all CStressEntityReg's.
	CStressEntityReg		*m_pNext;
	StressEntityFn			m_pFn;
};


// Use this macro to register a function to create stresstest entities.
#define REGISTER_STRESS_ENTITY( fnName ) static CStressEntityReg s_##fnName##__( fnName );


// Helper function for the functions that create the stress entities.
// Moves the entity to a random place in the level and returns the entity.
CBaseEntity*	MoveToRandomSpot( CBaseEntity *pEnt );
Vector			GetRandomSpot();


#endif // TEST_STRESSENTITIES_H