27#include "IEntitySystem.h"
28#include "IRenderSystem.h"
30#include "CEntityGroup.h"
32#include "GameObject/CGameObject.h"
33#include "Camera/CCamera.h"
34#include "Transform/CWorldTransformData.h"
36#define MAX_ENTITY_DEPTH 256
40 class IEntityManagerCallback
43 IEntityManagerCallback()
48 virtual ~IEntityManagerCallback()
53 virtual void onEntityCreated(
CEntity* entity)
58 virtual void onEntityCreated(
CEntity** entity,
int count)
63 virtual void onEntityRemoved(
CEntity* entity)
68 virtual void onEntityRemoved(
CEntity** entity,
int count)
88 class SKYLICHT_API CEntityManager
100 std::vector<IEntitySystem*> m_systems;
101 std::vector<IRenderSystem*> m_renders;
103 std::vector<IEntitySystem*> m_sortUpdate;
104 std::vector<IRenderSystem*> m_sortRender;
106 std::vector<IEntityManagerCallback*> m_callbacks;
108 bool m_systemChanged;
109 bool m_rendererChanged;
110 bool m_needSortEntities;
119 virtual ~CEntityManager();
125 void renderEmission();
127 void cullingAndRender();
133 void sortAliveEntities();
141 inline void setCamera(
CCamera* camera)
153 m_renderPipeline = p;
158 return m_renderPipeline;
165 void releaseAllEntities();
167 void releaseAllSystems();
169 void releaseAllGroups();
171 inline int getNumEntities()
173 return (
int)m_entities.size();
176 inline CEntity* getEntity(
int index)
178 return m_entities[index];
183 return m_entities.pointer();
186 CEntity* getEntityByID(
const char*
id);
188 void removeEntity(
int index);
190 void removeEntity(
CEntity* entity);
192 void updateRemoveEntity();
198 T* addRenderSystem();
204 T* getRenderSystem();
210 void updateEntityParent(
CEntity* entity);
224 void removeAllGroup();
226 void notifyUpdateSortEntities();
228 void notifyUpdateGroup(
u32 dataType);
230 inline void notifySystemOrderChanged()
232 m_systemChanged =
true;
235 inline void notifyRendererOrderChanged()
237 m_rendererChanged =
true;
242 void initDefaultData(
CEntity* entity);
250 T* CEntityManager::addSystem()
252 T* existSystem = getSystem<T>();
253 if (existSystem != NULL)
258 T* newSystem =
new T();
263 char exceptionInfo[512];
264 sprintf(exceptionInfo,
"CEntityManager::addSystem %s must inherit IEntitySystem",
typeid(T).name());
265 os::Printer::log(exceptionInfo);
272 m_systemChanged =
true;
274 int order = (int)m_systems.size();
275 m_systems.push_back(system);
276 newSystem->setSystemOrder(order);
282 T* CEntityManager::addRenderSystem()
284 T* system = getSystem<T>();
290 T* newSystem =
new T();
292 IRenderSystem* render =
dynamic_cast<IRenderSystem*
>(newSystem);
295 char exceptionInfo[512];
296 sprintf(exceptionInfo,
"CEntityManager::addRenderSystem %s must inherit IRenderSystem",
typeid(T).name());
297 os::Printer::log(exceptionInfo);
304 int order = (int)m_systems.size();
306 m_systems.push_back(render);
307 m_renders.push_back(render);
309 newSystem->setSystemOrder(order);
311 m_rendererChanged =
true;
317 T* CEntityManager::getSystem()
319 for (IEntitySystem*& s : m_systems)
321 T* system =
dynamic_cast<T*
>(s);
331 T* CEntityManager::getRenderSystem()
333 for (IRenderSystem*& s : m_renders)
335 T* system =
dynamic_cast<T*
>(s);
This is an object class used to set up the camera, including its position, viewing angle,...
Definition CCamera.h:70
The object class is designed to optimize entity queries.
Definition CEntityGroup.h:54
This is the object class that describes an entity.
Definition CEntity.h:58
Definition CArrayUtils.h:31
Definition CEntityManager.h:41
This is the interface for object classes responsible for processing Entity data.
Definition IEntitySystem.h:48
Definition IRenderPipeline.h:37
Self reallocating template array (like stl vector) with additional features.
Definition irrArray.h:23
Everything in the Skylicht Engine. You can start by looking at the topics.
Definition AudioDebugLog.h:29
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.h:58