#ifndef PKE_ENTITIES_HPP #define PKE_ENTITIES_HPP #include "components.hpp" #include "asset-manager.hpp" #include "pk.h" #include #include const int64_t EntityTypeDetails_MAX = 1; struct EntityTypeDetails { AssetKey textureAssetKey; CompGrBinds *grBinds = nullptr; VkImage textureImage = VK_NULL_HANDLE; VkImageView textureImageView = VK_NULL_HANDLE; VkDescriptorPool vkDescriptorPool = VK_NULL_HANDLE; struct { btCollisionShape *shape = nullptr; btScalar startingMass = 1.f; PhysicsCollision startingCollisionLayer = PhysicsCollision{1}; PhysicsCollision startingCollisionMask = PhysicsCollision{1}; } bt; uint32_t startingInstanceCount = 1024; }; struct EntityType : public Entity_Base { AssetKey modelAssetKey; pk_str entityTypeCode; VkDeviceMemory deviceMemoryVert = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryInst = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryPhysVert = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryTexture = VK_NULL_HANDLE; int64_t detailsCount = 0; EntityTypeDetails details[EntityTypeDetails_MAX]; pk_ev_cb_id_T pke_ev_cb_id_framebuffer_resized; PkeCallback createInstanceCallback; // PkeCallback collisionCallback; // TODO // PkeCallback serializeInstanceCallback; // TODO // PkeCallback deserializeInstanceCallback; // TODO }; struct EntityTypeHandle : pk_bkt_arr_handle {}; constexpr EntityTypeHandle EntityTypeHandle_MAX = EntityTypeHandle{ pk_bkt_arr_handle_MAX_constexpr }; void EntityType_Init(); EntityType *EntityType_FindByTypeCode(const char *typeCode); EntityType *EntityType_FindByEntityHandle(EntityHandle handle); EntityType *EntityType_Create(pk_uuid uuid); Entity_Base *EntityType_CreateGenericInstance(EntityType *et, Entity_Base *levelEnt, CompInstance *srcInstance = nullptr, InstPos *instPos = nullptr); void EntityType_Load(EntityType &et); void EntityType_Tick(double delta); void EntityType_Tick_Late(double delta); void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds); pk_bkt_arr *EntityType_GetEntityTypes(); void EntityType_Teardown(); #endif /* PKE_ENTITIES_HPP */