0ad/source/simulation/EntityManager.h
MarkT ac082709cd Added some pathfinding code. (SparsePath)
This was SVN commit r284.
2004-05-29 03:32:33 +00:00

57 lines
2.1 KiB
C++
Executable File

// EntityManager.h
//
// Last modified: 22 May 04, Mark Thompson mot20@cam.ac.uk / mark@wildfiregames.com
//
// Maintains entity id->object mappings. Does most of the work involved in creating an entity.
//
// Usage: Do not attempt to directly instantiate an entity class.
// HEntity bob = g_EntityManager.create( unit_class_name, position, orientation );
// or HEntity jim = g_EntityManager.create( pointer_to_unit_class, position, orientation );
//
// Perform updates on all world entities by g_EntityManager.updateAll( timestep )
// Dispatch an identical message to all world entities by g_EntityManager.dispatchAll( message_pointer )
// Get an STL vector container of all entities with a certain property with g_EntityManager.matches( predicate )
// or just get all entities with g_EntityManager.getActive().
//
// Those last two functions - caller has responsibility for deleting the collection when you're done with it.
#ifndef ENTITY_MANAGER_INCLUDED
#define ENTITY_MANAGER_INCLUDED
#include "Singleton.h"
#include "Entity.h"
#include "EntityHandles.h"
#include "EntityMessage.h"
#define MAX_HANDLES 4096
#define g_EntityManager CEntityManager::GetSingleton()
class CEntityManager : public Singleton<CEntityManager>
{
friend HEntity;
friend CHandle;
CHandle m_entities[MAX_HANDLES];
std::vector<HEntity> m_reaper;
int m_nextalloc;
static bool m_extant;
void destroy( u16 handle );
public:
typedef bool (*EntityPredicate)( CEntity* target );
CEntityManager();
~CEntityManager();
HEntity create( CBaseEntity* base, CVector3D position, float orientation );
HEntity create( CStr templatename, CVector3D position, float orientation );
void kill( HEntity ent );
void updateAll( float timestep );
void dispatchAll( CMessage* msg );
void renderAll(); // TODO MT: What's the correct way to hook this up to the renderer?
std::vector<HEntity>* matches( EntityPredicate predicate );
std::vector<HEntity>* getActive();
static inline bool extant() // True if the singleton is actively maintaining handles. When false, system is shutting down, handles are quietly dumped.
{
return( m_extant );
}
};
#endif