#pragma once #include #include struct World; struct EntityTemplate; struct Entity; struct Class; struct typed_entity_array { Arena* arena; EntityTemplate* 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(); EntityTemplate* RegisterEntity(EntityManager& manager, Entity* base, DerivedType entity); [[nodiscard]] Entity* allocate_entity(EntityManager& manager, NonNullPtr derived_type_class); void UpdateEntityManager(EntityManager& manager); [[nodisacrd]] Entity* deserialize_entity(Archive& archive, EntityManager& manager);