Improving entity manager and entity support for a simpler version, made some cleanup on the road to support serialization of world
This commit is contained in:
+20
-12
@@ -1,24 +1,32 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include <Core/Common/CoreTypes.h>
|
||||
#include <Core/Container/Vector.h>
|
||||
#include <game.h>
|
||||
|
||||
using EntityID = uint64_t;
|
||||
#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;
|
||||
|
||||
Arena* Arena;
|
||||
|
||||
// TODO: Should be a pool
|
||||
VectorArena<Entity, 1024> Entities;
|
||||
VectorArena<Entity, 100'000> Entities;
|
||||
|
||||
typed_entity_array by_type[ENTITY(Count)];
|
||||
};
|
||||
|
||||
void InitEntityManager(NonNullPtr<World> world);
|
||||
void ShutdownEntityManager();
|
||||
EntityManager& GetEntityManager();
|
||||
void RegisterEntity(EntityManager& manager, Entity* entity);
|
||||
void UpdateEntityManager(EntityManager& manager);
|
||||
void InitEntityManager(NonNullPtr<World> world);
|
||||
void ShutdownEntityManager();
|
||||
EntityManager& GetEntityManager();
|
||||
void Serialize(NonNullPtr<EntityManager> entityManager);
|
||||
entity_template* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity);
|
||||
void UpdateEntityManager(EntityManager& manager);
|
||||
|
||||
Reference in New Issue
Block a user