33 lines
800 B
C
33 lines
800 B
C
#pragma once
|
|
|
|
#include <Core/Common/CoreTypes.h>
|
|
#include <Core/Container/Vector.h>
|
|
#include <Entity/Entity.h>
|
|
|
|
struct Entity;
|
|
struct World;
|
|
|
|
struct typed_entity_array
|
|
{
|
|
Arena* arena;
|
|
entity_template* array;
|
|
size_t count;
|
|
};
|
|
|
|
struct EntityManager
|
|
{
|
|
static EntityID ID;
|
|
|
|
// TODO: Should be a pool
|
|
VectorArena<Entity, 100'000> Entities;
|
|
|
|
typed_entity_array by_type[ENTITY(Count)];
|
|
};
|
|
|
|
void InitEntityManager(NonNullPtr<World> world);
|
|
void ShutdownEntityManager();
|
|
EntityManager& GetEntityManager();
|
|
entity_template* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity);
|
|
void RegisterBaseEntity(EntityManager& manager, Entity&& base);
|
|
void UpdateEntityManager(EntityManager& manager);
|