#ifndef PKE_COMPONENTS_HPP #define PKE_COMPONENTS_HPP #include "components-vk.hpp" #include "pk.h" #include "physics.hpp" #include "plugin-types.hpp" #include #include #include const uint64_t ECS_UNSET_VAL = 0xFFFFFFFFFFFFFFFF; const uint32_t ECS_UNSET_VAL_32 = 0xFFFFFFFF; struct EntityHandle : public pk_bkt_arr_handle { }; struct GenericEntityHandle : public pk_bkt_arr_handle { }; struct GrBindsHandle : public pk_bkt_arr_handle { }; struct InstanceHandle : public pk_bkt_arr_handle { }; struct PkeEventHandle : public pk_bkt_arr_handle { }; struct SceneHandle : public pk_bkt_arr_handle { }; struct LevelHandle : public pk_bkt_arr_handle { }; constexpr EntityHandle EntityHandle_MAX = EntityHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr GenericEntityHandle GenericEntityHandle_MAX = GenericEntityHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr GrBindsHandle GrBindsHandle_MAX = GrBindsHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr InstanceHandle InstanceHandle_MAX = InstanceHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr PkeEventHandle PkeEventHandle_MAX = PkeEventHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr SceneHandle SceneHandle_MAX = SceneHandle{ pk_bkt_arr_handle_MAX_constexpr }; constexpr LevelHandle LevelHandle_MAX = LevelHandle{ pk_bkt_arr_handle_MAX_constexpr }; TypeSafeInt_constexpr(ENTITY_FLAGS, uint64_t, 0xFFFFFFFFFFFFFFFF); TypeSafeInt_constexpr(COMPONENT_INSTANCE_FLAGS, uint64_t, 0xFFFFFFFFFFFFFFFF); constexpr ENTITY_FLAGS ENTITY_FLAG_NONE = ENTITY_FLAGS(0x00); constexpr ENTITY_FLAGS ENTITY_FLAG_DO_NOT_SERIALIZE = ENTITY_FLAGS(0x01); constexpr COMPONENT_INSTANCE_FLAGS COMPONENT_INSTANCE_FLAG_NONE = COMPONENT_INSTANCE_FLAGS(0x00); constexpr COMPONENT_INSTANCE_FLAGS COMPONENT_INSTANCE_FLAG_DO_NOT_SERIALIZE = COMPONENT_INSTANCE_FLAGS(0x01); struct Entity_Base { EntityHandle handle = EntityHandle_MAX; EntityHandle parentHandle = EntityHandle_MAX; pk_uuid uuid = pk_uuid_max; ENTITY_FLAGS entity_flags = ENTITY_FLAG_NONE; bool isMarkedForRemoval = false; }; struct CompGrBinds { EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; VkPipelineLayout vkPipelineLayout = VK_NULL_HANDLE; VkPipeline graphicsPipeline = VK_NULL_HANDLE; VkDescriptorSet *vkDescriptorSets = nullptr; BufferBindingDetails vertexBD; BufferBindingDetails normalsBD; BufferBindingDetails uvBD; BufferBindingDetails indexBD; BufferBindingDetails instanceBD; BufferBindingDetails physVertBD; BufferBindingDetails physNormBD; BufferBindingDetails physUvBD; BufferBindingDetails physIndxBD; uint32_t indexCount; uint32_t instanceCounter = 0; uint32_t instanceBufferMaxCount = 0; PkeCallback collisionCallback{}; }; struct InstPos { btTransform posRot; btVector3 scale; btScalar mass; }; struct InstBt { btCollisionShape *collision_shape = nullptr; btDefaultMotionState *motionState = nullptr; btRigidBody *rigidBody = nullptr; }; struct CompInstance { COMPONENT_INSTANCE_FLAGS comp_instance_flags = COMPONENT_INSTANCE_FLAG_NONE; EntityHandle entHandle = EntityHandle_MAX; GrBindsHandle grBindsHandle = GrBindsHandle_MAX; InstanceHandle instanceHandle = InstanceHandle_MAX; pk_uuid uuid = pk_uuid_max; uint32_t index = ECS_UNSET_VAL_32; PhysicsCollision physicsLayer = PhysicsCollision{1}; PhysicsCollision physicsMask = PhysicsCollision{1}; InstBt bt{}; PkeCallback collisionCallback{}; bool isNeedingUpdated = false; }; struct pke_component_event { const pk_ev_mgr_id_T ev_mgr_id = 0; pk_ev_id_T ev_id = pk_ev_id_T_MAX; EntityHandle entity_handle = EntityHandle_MAX; PkeEventHandle pke_event_handle = PkeEventHandle_MAX; pk_uuid uuid = pk_uuid_max; }; #endif /* PKE_COMPONENTS_HPP */