#ifndef PKE_COMPONENTS_HPP #define PKE_COMPONENTS_HPP #include "macros.hpp" #include "dynamic-array.hpp" #include #include #include const uint64_t ECS_UNSET_VAL = 0xFFFFFFFFFFFFFFFF; TypeSafeInt_H(EntityHandle, uint64_t, ECS_UNSET_VAL); TypeSafeInt_H(GrBindsHandle, uint64_t, ECS_UNSET_VAL); TypeSafeInt_H(InstanceHandle, uint64_t, ECS_UNSET_VAL); struct Entity { EntityHandle handle = EntityHandle_MAX; EntityHandle parentHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; InstanceHandle instanceHandle = InstanceHandle_MAX; bool isMarkedForRemoval = false; }; struct InstPos { glm::vec3 pos; glm::vec3 rot; glm::vec3 scale; }; struct CompGrBinds { EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; VkPipelineLayout vkPipelineLayout = VK_NULL_HANDLE; VkDescriptorSet vkDescriptorSet = VK_NULL_HANDLE; VkBuffer vertexBuffer = VK_NULL_HANDLE; uint32_t vertexFirstBinding = 0; uint32_t vertexCount = 0; VkDeviceSize vertexOffsets = 0; VkBuffer normalsBuffer = VK_NULL_HANDLE; uint32_t normalsFirstBinding = 0; uint32_t normalsCount = 0; VkDeviceSize normalsOffsets = 0; VkBuffer uvBuffer = VK_NULL_HANDLE; uint32_t uvFirstBinding = 0; uint32_t uvCount = 0; VkDeviceSize uvOffsets = 0; VkBuffer indexBuffer = VK_NULL_HANDLE; uint32_t indexFirstBinding = 0; uint32_t indexCount = 0; VkDeviceSize indexOffsets = 0; VkBuffer instanceBuffer = VK_NULL_HANDLE; uint32_t instanceFirstBinding = 0; uint32_t instanceCount = 0; VkDeviceSize instanceOffsets = 0; DynArray instances{0}; bool isInstanceBufferNeedingUpdated = false; }; struct CompInstance { EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; InstanceHandle instanceHandle = InstanceHandle_MAX; uint64_t index = ECS_UNSET_VAL; InstPos *ptr = nullptr; }; #endif /* PKE_COMPONENTS_HPP */