diff options
Diffstat (limited to 'src/entities.cpp')
| -rw-r--r-- | src/entities.cpp | 80 |
1 files changed, 39 insertions, 41 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index cb66cef..609fc51 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -3,10 +3,7 @@ #include "bucketed-array.hpp" #include "ecs.hpp" -#include "game-settings.hpp" -#include "level.hpp" #include "math-helpers.hpp" -#include "memory.hpp" #include "physics.hpp" #include "plugins.hpp" #include "static/missing-texture.hpp" @@ -15,7 +12,6 @@ #include <BulletCollision/CollisionShapes/btConvexHullShape.h> #include <BulletCollision/CollisionShapes/btConvexPolyhedron.h> #include <filesystem> -#include <type_traits> #include <vulkan/vulkan_core.h> BucketContainer<EntityType> EntityType_BC{}; @@ -74,10 +70,10 @@ Entity_Base *EntityType_CreateGenericInstance(EntityType *et, Entity_Base *level btVector3 localInertia(0, 0, 0); etd.bt.shape->calculateLocalInertia(mass, localInertia); - compInst->bt.motionState = Pke_New<btDefaultMotionState>(MemBkt_Bullet); + compInst->bt.motionState = pk_new<btDefaultMotionState>(MemBkt_Bullet); new (compInst->bt.motionState) btDefaultMotionState(posRot); - compInst->bt.rigidBody = Pke_New<btRigidBody>(MemBkt_Bullet); + compInst->bt.rigidBody = pk_new<btRigidBody>(MemBkt_Bullet); new (compInst->bt.rigidBody) btRigidBody(mass, compInst->bt.motionState, etd.bt.shape, localInertia); compInst->bt.rigidBody->setLinearVelocity(btVector3(0,0,0)); @@ -92,13 +88,13 @@ Entity_Base *EntityType_CreateGenericInstance(EntityType *et, Entity_Base *level } EntityType *EntityType_FindByTypeCode(const char *typeCode) { - for (PkeHandleBucketIndex_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { + for (pk_handle_bucket_index_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { auto &bkt = EntityType_BC.buckets[b]; long itemCount = EntityType_BC.pkeHandle.bucketIndex == b ? EntityType_BC.pkeHandle.itemIndex : EntityType_BC.limits.itemIndex; - for (PkeHandleItemIndex_T i = 0; i < itemCount; ++i) { + for (pk_handle_item_index_T i = 0; i < itemCount; ++i) { auto &entityType = bkt[i]; if (entityType.handle == EntityHandle_MAX) continue; - if (strcmp(typeCode, entityType.entityTypeCode) == 0) { + if (strcmp(typeCode, entityType.entityTypeCode.val) == 0) { return &entityType; } } @@ -108,10 +104,10 @@ EntityType *EntityType_FindByTypeCode(const char *typeCode) { EntityType *EntityType_FindByEntityHandle(EntityHandle handle) { if (handle == EntityHandle_MAX) return nullptr; - for (PkeHandleBucketIndex_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { + for (pk_handle_bucket_index_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { auto &bkt = EntityType_BC.buckets[b]; long itemCount = EntityType_BC.pkeHandle.bucketIndex == b ? EntityType_BC.pkeHandle.itemIndex : EntityType_BC.limits.itemIndex; - for (PkeHandleItemIndex_T i = 0; i < itemCount; ++i) { + for (pk_handle_item_index_T i = 0; i < itemCount; ++i) { auto &entityType = bkt[i]; if (entityType.handle == handle) { return &entityType; @@ -167,7 +163,7 @@ struct EntityTypeDetails_LoadHelperStruct { } physDbg; }; struct EntityType_LoadHelperStruct { - MemBucket *bkt = nullptr; + struct pk_membucket *bkt = nullptr; EntityType &et; DynArray<EntityTypeDetails_LoadHelperStruct> *etdHelpers = nullptr; const cgltf_data *gltfData = nullptr; @@ -220,21 +216,21 @@ void EntityType_PreLoad(EntityType_LoadHelperStruct &helper) { EntityTypeDetails_LoadHelperStruct &etdHelper = helper.etdHelpers->Push(); etdHelper.etd = &etd; etd.grBinds = ECS_CreateGrBinds(&helper.et);; - etdHelper.physDbg.vertexes = reinterpret_cast<DynArray<glm::vec3> *>(Pke_New(sizeof(DynArray<glm::vec3>), 64, helper.bkt)); - etdHelper.physDbg.normals = reinterpret_cast<DynArray<glm::vec3> *>(Pke_New(sizeof(DynArray<glm::vec3>), 64, helper.bkt)); - etdHelper.physDbg.uv = reinterpret_cast<DynArray<glm::vec2> *>(Pke_New(sizeof(DynArray<glm::vec2>), 64, helper.bkt)); - etdHelper.physDbg.indexes = reinterpret_cast<DynArray<uint16_t> *>(Pke_New(sizeof(DynArray<uint16_t>), 64, helper.bkt)); - new (etdHelper.physDbg.vertexes) DynArray<glm::vec3>(helper.bkt); - new (etdHelper.physDbg.normals) DynArray<glm::vec3>(helper.bkt); - new (etdHelper.physDbg.uv) DynArray<glm::vec2>(helper.bkt); - new (etdHelper.physDbg.indexes) DynArray<uint16_t>(helper.bkt); + etdHelper.physDbg.vertexes = pk_new<DynArray<glm::vec3>>(64, helper.bkt); + etdHelper.physDbg.normals = pk_new<DynArray<glm::vec3>>(64, helper.bkt); + etdHelper.physDbg.uv = pk_new<DynArray<glm::vec2>>(64, helper.bkt); + etdHelper.physDbg.indexes = pk_new<DynArray<uint16_t>>(64, helper.bkt); + // new (etdHelper.physDbg.vertexes) DynArray<glm::vec3>(helper.bkt); + // new (etdHelper.physDbg.normals) DynArray<glm::vec3>(helper.bkt); + // new (etdHelper.physDbg.uv) DynArray<glm::vec2>(helper.bkt); + // new (etdHelper.physDbg.indexes) DynArray<uint16_t>(helper.bkt); /* * phys */ btConvexHullShape *shape; { - shape = Pke_New<btConvexHullShape>(MemBkt_Bullet); + shape = pk_new<btConvexHullShape>(MemBkt_Bullet); btScalar *vertDataPointer = reinterpret_cast<btScalar *>(helper.modelBinAsset->ptr); /* TODO JCB - 2024-01-02 * we shouldn't assume that the first index is the vertexes @@ -641,7 +637,7 @@ void EntityType_LoadTexture(EntityType_LoadHelperStruct &helper, const int64_t i vkDescriptorSetAllocateInfo.descriptorSetCount = MAX_FRAMES_IN_FLIGHT; vkDescriptorSetAllocateInfo.pSetLayouts = descriptorSets; - etdHelper.etd->grBinds->vkDescriptorSets = Pke_New<VkDescriptorSet>(MAX_FRAMES_IN_FLIGHT); + etdHelper.etd->grBinds->vkDescriptorSets = pk_new<VkDescriptorSet>(MAX_FRAMES_IN_FLIGHT); for (long i = 0; i < MAX_FRAMES_IN_FLIGHT; ++i) { etdHelper.etd->grBinds->vkDescriptorSets[i] = VkDescriptorSet{}; } @@ -1055,23 +1051,23 @@ void EntityType_Load(EntityType &et) { AssetHandle modelBinHandle = AM_Register(gltfPath.c_str(), PKE_ASSET_TYPE_UNSET); const Asset *modelBinAsset = AM_Get(modelBinHandle); - MemBucket *entLoaderBkt = Pke_BeginTransientBucket(); + struct pk_membucket *entLoaderBkt = pk_bucket_create("entities", PK_DEFAULT_BUCKET_SIZE, false); EntityType_LoadHelperStruct helper { .bkt = entLoaderBkt, .et = et, - .etdHelpers = reinterpret_cast<DynArray<EntityTypeDetails_LoadHelperStruct> *>(Pke_New(sizeof(DynArray<EntityTypeDetails_LoadHelperStruct>), 64, entLoaderBkt)), + .etdHelpers = pk_new<DynArray<EntityTypeDetails_LoadHelperStruct>>(64, entLoaderBkt), .gltfData = gltfData, .modelBinAsset = modelBinAsset, - .vertMemoryRequirements = reinterpret_cast<DynArray<VkMemoryRequirements> *>(Pke_New(sizeof(DynArray<VkMemoryRequirements>), 64, entLoaderBkt)), - .instMemoryRequirements = reinterpret_cast<DynArray<VkMemoryRequirements> *>(Pke_New(sizeof(DynArray<VkMemoryRequirements>), 64, entLoaderBkt)), - .physVertMemoryRequirements = reinterpret_cast<DynArray<VkMemoryRequirements> *>(Pke_New(sizeof(DynArray<VkMemoryRequirements>), 64, entLoaderBkt)), - .textureMemoryRequirements = reinterpret_cast<DynArray<VkMemoryRequirements> *>(Pke_New(sizeof(DynArray<VkMemoryRequirements>), 64, entLoaderBkt)), + .vertMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), + .instMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), + .physVertMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), + .textureMemoryRequirements = pk_new<DynArray<VkMemoryRequirements>>(64, entLoaderBkt), }; - new (helper.etdHelpers) DynArray<EntityTypeDetails_LoadHelperStruct>{entLoaderBkt}; - new (helper.vertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - new (helper.instMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - new (helper.physVertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; - new (helper.textureMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; + // new (helper.etdHelpers) DynArray<EntityTypeDetails_LoadHelperStruct>{entLoaderBkt}; + // new (helper.vertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; + // new (helper.instMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; + // new (helper.physVertMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; + // new (helper.textureMemoryRequirements) DynArray<VkMemoryRequirements>{entLoaderBkt}; EntityType_PreLoad(helper); @@ -1097,7 +1093,7 @@ void EntityType_Load(EntityType &et) { // cleanup AM_Release(modelBinHandle); AM_Release(assetHandle); - Pke_EndTransientBucket(helper.bkt); + pk_bucket_destroy(helper.bkt); } void EntityType_Unload(EntityType &et, CompGrBinds *grBindsArr[1]) { @@ -1208,9 +1204,11 @@ void EntityType_Unload(EntityType &et, CompGrBinds *grBindsArr[1]) { vkFreeMemory(vkDevice, et.deviceMemoryTexture, vkAllocator); et.deviceMemoryTexture = VK_NULL_HANDLE; - if (et.entityTypeCode) - Pke_Delete<char>(et.entityTypeCode, strlen(et.entityTypeCode)); - et.entityTypeCode = CAFE_BABE(char); + if (et.entityTypeCode.reserved != 0) + pk_delete<char>(et.entityTypeCode.val, et.entityTypeCode.reserved); + et.entityTypeCode.val = CAFE_BABE(char); + et.entityTypeCode.length = 0; + et.entityTypeCode.reserved = 0; } void EntityType_Tick(double delta) { @@ -1349,11 +1347,11 @@ void EntityType_RolloverInstances(EntityType &et, CompGrBinds &grBinds) { vkFreeMemory(vkDevice, oldMemory, vkAllocator); } -PkeHandleBucketIndex_T EntityType_GetBucketCount() { +pk_handle_bucket_index_T EntityType_GetBucketCount() { return EntityType_BC.pkeHandle.bucketIndex + 1; } -EntityType *EntityType_GetEntityTypes(PkeHandleBucketIndex_T bucketIndex, PkeHandleItemIndex_T &itemCount) { +EntityType *EntityType_GetEntityTypes(pk_handle_bucket_index_T bucketIndex, pk_handle_item_index_T &itemCount) { assert(bucketIndex <= EntityType_BC.pkeHandle.bucketIndex); if (bucketIndex == EntityType_BC.pkeHandle.bucketIndex) { itemCount = EntityType_BC.pkeHandle.itemIndex; @@ -1365,10 +1363,10 @@ EntityType *EntityType_GetEntityTypes(PkeHandleBucketIndex_T bucketIndex, PkeHan void EntityType_Teardown() { - for (PkeHandleBucketIndex_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { + for (pk_handle_bucket_index_T b = 0; b <= EntityType_BC.pkeHandle.bucketIndex; ++b) { auto &bkt = EntityType_BC.buckets[b]; long itemCount = EntityType_BC.pkeHandle.bucketIndex == b ? EntityType_BC.pkeHandle.itemIndex : EntityType_BC.limits.itemIndex; - for (PkeHandleItemIndex_T i = 0; i < itemCount; ++i) { + for (pk_handle_item_index_T i = 0; i < itemCount; ++i) { auto &et = bkt[i]; if (et.modelAssetKey[0] == '\0') continue; CompGrBinds *grBindsArr[EntityTypeDetails_MAX] = {nullptr}; |
