#ifndef PKE_COMPONENTS_HPP #define PKE_COMPONENTS_HPP #include "dynamic-array.hpp" #include "macros.hpp" #include "physics.hpp" #include #include #include const uint64_t ECS_UNSET_VAL = 0xFFFFFFFFFFFFFFFF; struct EntityHandle : public PkeHandle { }; struct GrBindsHandle : public PkeHandle { }; struct InstanceHandle : public PkeHandle { }; constexpr EntityHandle EntityHandle_MAX = EntityHandle{}; constexpr GrBindsHandle GrBindsHandle_MAX = GrBindsHandle{}; constexpr InstanceHandle InstanceHandle_MAX = InstanceHandle{}; struct Entity { EntityHandle handle = EntityHandle_MAX; EntityHandle parentHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; InstanceHandle instanceHandle = InstanceHandle_MAX; bool isMarkedForRemoval = false; }; struct BufferBindingDetails { VkBuffer buffer = VK_NULL_HANDLE; uint32_t firstBinding = 0; uint32_t bindingCount = 0; VkDeviceSize offsets[1] = {0}; }; struct CompGrBinds { EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; VkPipelineLayout vkPipelineLayout = VK_NULL_HANDLE; VkPipeline graphicsPipeline = VK_NULL_HANDLE; VkDescriptorSet *vkDescriptorSets = nullptr; VkBuffer vertexBuffer = VK_NULL_HANDLE; uint32_t vertexFirstBinding = 0; uint32_t vertexBindingCount = 0; VkDeviceSize vertexOffsets = 0; VkBuffer normalsBuffer = VK_NULL_HANDLE; uint32_t normalsFirstBinding = 0; uint32_t normalsBindingCount = 0; VkDeviceSize normalsOffsets = 0; VkBuffer uvBuffer = VK_NULL_HANDLE; uint32_t uvFirstBinding = 0; uint32_t uvBindingCount = 0; VkDeviceSize uvOffsets = 0; VkBuffer indexBuffer = VK_NULL_HANDLE; uint32_t indexBindingCount = 0; VkDeviceSize indexOffsets = 0; VkDeviceSize indexCount = 0; BufferBindingDetails physVertBD; BufferBindingDetails physNormBD; BufferBindingDetails physUvBD; BufferBindingDetails physIndxBD; VkBuffer instanceBuffer = VK_NULL_HANDLE; uint32_t instanceFirstBinding = 0; uint32_t instanceBindingCount = 0; uint32_t instanceCounter = 0; uint32_t instanceBufferMaxCount = 0; VkDeviceSize instanceOffsets = 0; }; struct InstPos { btTransform posRot; btVector3 scale; btScalar mass; }; struct InstBt { btDefaultMotionState *motionState; btRigidBody *rigidBody; }; struct CompInstance { EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; InstanceHandle instanceHandle = InstanceHandle_MAX; uint64_t index = ECS_UNSET_VAL; PhysicsCollision physicsLayer = PhysicsCollision{1}; PhysicsCollision physicsMask = PhysicsCollision{1}; InstBt bt; bool isNeedingUpdated = false; }; #endif /* PKE_COMPONENTS_HPP */