From 0c1005dae0832e52a79ae3bbb01235c8756ab8f2 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 21 May 2025 13:35:55 -0400 Subject: pke: physics DynArray to pk_arr_t --- src/physics.cpp | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'src/physics.cpp') diff --git a/src/physics.cpp b/src/physics.cpp index 3f61c19..3a20f8b 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -2,7 +2,6 @@ #include "physics.hpp" #include "components.hpp" -#include "dynamic-array.hpp" #include "ecs.hpp" #include "game-settings.hpp" #include "pk.h" @@ -21,7 +20,7 @@ struct AllocedData { void *data; std::size_t size; }; -DynArray *bulletAllocs; +pk_arr_t bulletAllocs{}; btDefaultCollisionConfiguration *btConfiguration = nullptr; btCollisionDispatcher *btDispatcher = nullptr; @@ -35,41 +34,41 @@ pk_arr_t collisionsThisTick{}; void *pke_btAlignedAllocFunc(size_t size, int alignment) { void *ptr = pk_new_bkt(size, alignment, MemBkt_Bullet); - bulletAllocs->Push({ptr, size}); + pk_arr_append_t(&bulletAllocs, {ptr, size}); return ptr; } void pke_btAlignedFreeFunc(void *memBlock) { - auto &arr = *bulletAllocs; - auto count = arr.Count(); - long index = -1; - for (long i = 0; i < count; ++i) { - if (arr[i].data == memBlock) { + int64_t index = -1; + uint32_t i, count; + count = bulletAllocs.next; + for (i = 0; i < count; ++i) { + if (bulletAllocs[i].data == memBlock) { index = i; break; } } assert(index != -1); - pk_delete_bkt(memBlock, arr[index].size, MemBkt_Bullet); - bulletAllocs->Remove(index); + pk_delete_bkt(memBlock, bulletAllocs[index].size, MemBkt_Bullet); + pk_arr_remove_at(&bulletAllocs, index); } void *pke_btAllocFunc(size_t size) { void *ptr = pk_new_bkt(size, PK_MINIMUM_ALIGNMENT, MemBkt_Bullet); - bulletAllocs->Push({ptr, size}); + pk_arr_append_t(&bulletAllocs, {ptr, size}); return ptr; } void pke_btFreeFunc(void *memBlock) { - auto &arr = *bulletAllocs; - auto count = arr.Count(); - long index = -1; - for (long i = 0; i < count; ++i) { - if (arr[i].data == memBlock) { + int64_t index = -1; + uint32_t i, count; + count = bulletAllocs.next; + for (i = 0; i < count; ++i) { + if (bulletAllocs[i].data == memBlock) { index = i; break; } } assert(index != -1); - pk_delete_bkt(memBlock, arr[index].size, MemBkt_Bullet); - bulletAllocs->Remove(index); + pk_delete_bkt(memBlock, bulletAllocs[index].size, MemBkt_Bullet); + pk_arr_remove_at(&bulletAllocs, index); } struct CollisionHandlerStruct : public btOverlapFilterCallback { @@ -97,9 +96,8 @@ struct CollisionHandlerStruct : public btOverlapFilterCallback { void Physics_Init() { MemBkt_Bullet = pk_bucket_create("physics", PK_DEFAULT_BUCKET_SIZE, false); - bulletAllocs = pk_new>(MemBkt_Bullet); - new (bulletAllocs) DynArray(MemBkt_Bullet); - bulletAllocs->Reserve(1024); + bulletAllocs.bkt = MemBkt_Bullet; + pk_arr_reserve(&bulletAllocs, 1024); btAlignedAllocSetCustom(pke_btAllocFunc, pke_btFreeFunc); btAlignedAllocSetCustomAligned(pke_btAlignedAllocFunc, pke_btAlignedFreeFunc); @@ -136,5 +134,8 @@ void Physics_Teardown() { pk_arr_reset(&collisionsThisTick); pk_delete(BtDynamicsWorld, MemBkt_Bullet); BtDynamicsWorld = nullptr; + // TODO should we manually delete each bullet alloc? + // or just drop? + pk_arr_reset(&bulletAllocs); pk_bucket_destroy(MemBkt_Bullet); } -- cgit v1.2.3