#ifndef PKE_ENTITIES_HPP #define PKE_ENTITIES_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 struct EntityTypeDetails { AssetKey textureAssetKey; EntityHandle entityHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; 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 { AssetKey modelAssetKey; const char *entityTypeCode = nullptr; EntityHandle entityHandle = EntityHandle_MAX; VkDeviceMemory deviceMemoryVert = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryInst = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryPhysVert = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryTexture = VK_NULL_HANDLE; int64_t detailsCount = 1; EntityTypeDetails details[1]; }; extern DynArray GlobalEntityTypes; void EntityType_Init(); int64_t EntityType_FindByTypeCode(const char *typeCode); int64_t EntityType_FindByEntityHandle(EntityHandle handle, int64_t &detailIndex); void EntityType_Load(EntityType &et); void EntityType_Tick(double delta); void EntityType_Tick_Late(double delta); void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds); void EntityType_Teardown(); #endif /* PKE_ENTITIES_HPP */