#ifndef PKE_ENTITIES_HPP #define PKE_ENTITIES_HPP #include "memory-type-defs.hpp" #include "vendor/cgltf-include.hpp" #include "vendor/stb_image_include.hpp" #include "ecs.hpp" #include "components.hpp" #include "asset-manager.hpp" #include "memory.hpp" #include "window.hpp" #include #include const size_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; const char *entityTypeCode = nullptr; 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]; PkeCallback createInstanceCallback; // PkeCallback serializeInstanceCallback; // TODO // PkeCallback parseInstanceCallback; // TODO }; struct EntityTypeHandle : PkeHandle {}; constexpr EntityTypeHandle EntityTypeHandle_MAX = EntityTypeHandle{}; void EntityType_Init(); EntityType *EntityType_FindByTypeCode(const char *typeCode); EntityType *EntityType_FindByEntityHandle(EntityHandle handle); EntityType *EntityType_Create(); 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); PkeHandleBucketIndex_T EntityType_GetBucketCount(); EntityType *EntityType_GetEntityTypes(PkeHandleBucketIndex_T bucketIndex, PkeHandleItemIndex_T &itemCount); void EntityType_Teardown(); #endif /* PKE_ENTITIES_HPP */