summaryrefslogtreecommitdiff
path: root/src/physics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/physics.cpp')
-rw-r--r--src/physics.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/physics.cpp b/src/physics.cpp
index 34cfbed..fe0385c 100644
--- a/src/physics.cpp
+++ b/src/physics.cpp
@@ -22,10 +22,11 @@ struct AllocedData {
};
pk_arr_t<AllocedData> bulletAllocs{};
+btHashedOverlappingPairCache *overlappingPairCache = nullptr;
btDefaultCollisionConfiguration *btConfiguration = nullptr;
btCollisionDispatcher *btDispatcher = nullptr;
-btBroadphaseInterface *btBroadphase = nullptr;
-btConstraintSolver *btSolver = nullptr;
+btDbvtBroadphase *btBroadphase = nullptr;
+btSequentialImpulseConstraintSolver *btSolver = nullptr;
struct EntityCollision {
CompInstance *a, *b;
@@ -111,7 +112,7 @@ void Physics_Init() {
btBroadphase = pk_new<btDbvtBroadphase>(MemBkt_Bullet);
#if 1
- btHashedOverlappingPairCache *overlappingPairCache = pk_new<btHashedOverlappingPairCache>(MemBkt_Bullet);
+ overlappingPairCache = pk_new<btHashedOverlappingPairCache>(MemBkt_Bullet);
overlappingPairCache->setOverlapFilterCallback(&collisionHandlerStruct);
new (btBroadphase) btDbvtBroadphase(overlappingPairCache);
#else
@@ -136,7 +137,22 @@ int32_t Physics_Tick(double delta) {
void Physics_Teardown() {
pk_arr_reset(&collisionsThisTick);
- pk_delete<btDiscreteDynamicsWorld>(BtDynamicsWorld, MemBkt_Bullet);
+ if (BtDynamicsWorld != nullptr)
+ pk_delete<btDiscreteDynamicsWorld>(BtDynamicsWorld, MemBkt_Bullet);
+ if (overlappingPairCache != nullptr)
+ pk_delete<btHashedOverlappingPairCache>(overlappingPairCache, MemBkt_Bullet);
+ if (btConfiguration != nullptr)
+ pk_delete<btDefaultCollisionConfiguration>(btConfiguration, MemBkt_Bullet);
+ if (btSolver != nullptr)
+ pk_delete<btSequentialImpulseConstraintSolver>(btSolver, MemBkt_Bullet);
+ if (btDispatcher != nullptr)
+ pk_delete<btCollisionDispatcher>(btDispatcher, MemBkt_Bullet);
+ if (btBroadphase != nullptr)
+ pk_delete<btDbvtBroadphase>(btBroadphase, MemBkt_Bullet);
+ btConfiguration = nullptr;
+ btSolver = nullptr;
+ btBroadphase = nullptr;
+ btDispatcher = nullptr;
BtDynamicsWorld = nullptr;
// TODO should we manually delete each bullet alloc?
// or just drop?