#ifndef PKE_ECS_HPP #define PKE_ECS_HPP #include "dynamic-array.hpp" #include "macros.hpp" #include "memory.hpp" #include "components.hpp" #include "glm/vec3.hpp" extern DynArray EntitiesToBeRemoved; extern DynArray EntitiesWithExcessInstances; static struct { uint64_t Entity = 1ULL << 0; uint64_t GrBinds = 1ULL << 1; uint64_t Instance = 1ULL << 2; } ComponentTypes; void ECS_Init(); void ECS_Teardown(); void ECS_Tick_Early(double delta); void ECS_Tick(double delta); void ECS_Tick_Late(double delta); EntityHandle ECS_CreateEntity(Entity_Base *entity, Entity_Base *parentEnt = nullptr); Entity_Base *ECS_GetEntity(EntityHandle handle); void ECS_MarkForRemoval(Entity_Base *entity); void ECS_HandleCollision(Entity_Base *lhs, Entity_Base *rhs); CompGrBinds *ECS_CreateGrBinds(Entity_Base *); CompGrBinds *ECS_GetGrBinds(GrBindsHandle grBindsHandle); uint64_t ECS_GetGrBinds_BucketCount(); CompGrBinds *ECS_GetGrBinds(uint64_t bucketIndex, uint64_t &itemCount); CompInstance *ECS_CreateInstance(Entity_Base *entity, CompGrBinds *entityTypeGrBinds); CompInstance *ECS_GetInstance(InstanceHandle instanceHandle); void ECS_UpdateInstance(CompInstance *instance, const InstPos &instPos, bool overridePhysics = false); uint64_t ECS_GetInstances_BucketCount(); CompInstance *ECS_GetInstances(uint64_t bucketIndex, uint64_t &itemCount); #endif /* PKE_ECS_HPP */