#pragma once #include #include #include 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 Entities; typed_entity_array by_type[ENTITY(Count)]; }; void InitEntityManager(NonNullPtr world); void ShutdownEntityManager(); EntityManager& GetEntityManager(); entity_template* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity); void RegisterBaseEntity(EntityManager& manager, Entity&& base); void UpdateEntityManager(EntityManager& manager);