diff options
Diffstat (limited to 'src/camera.cpp')
| -rw-r--r-- | src/camera.cpp | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/camera.cpp b/src/camera.cpp index ca2c11f..07e4253 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -158,20 +158,6 @@ void PkeCamera_SetPrimary(CameraHandle cameraHandle) { } } -void PkeCamera_Destroy(CameraHandle cameraHandle) { - assert(cameraHandle != CameraHandle_MAX); - auto *camPtr = &cam_mstr.bktc_cameras[cameraHandle]; - auto &cam = *camPtr; - - if (cam.phys.constraint != nullptr && cam.phys.constraint != CAFE_BABE(btTypedConstraint)) { - // reminder: this is not currently handled by ECS - BtDynamicsWorld->removeConstraint(cam.phys.constraint); - pk_delete<btTypedConstraint>(cam.phys.constraint, MemBkt_Bullet); - } - - ECS_MarkForRemoval(camPtr); -} - pk_bkt_arr &PkeCamera_GetPkBktArr() { return cam_mstr.bktc_cameras; } @@ -217,16 +203,30 @@ void PkeCamera_Tick(double delta) { bool b; b = pk_bkt_arr_iter_begin(&cam_mstr.bktc_cameras, &iter_cam); while (b == true) { + inst = ECS_GetInstance(iter_cam->phys.instHandle); if (iter_cam->isMarkedForRemoval == true) { - pk_bkt_arr_free_handle(&cam_mstr.bktc_cameras, iter_cam->camHandle); if (ActiveCamera == iter_cam.data) { ActiveCamera = &NullCamera; } + if (iter_cam->phys.constraint != nullptr && iter_cam->phys.constraint != CAFE_BABE(btTypedConstraint)) { + // reminder: this is not currently handled by ECS + BtDynamicsWorld->removeConstraint(iter_cam->phys.constraint); + pk_delete<btTypedConstraint>(iter_cam->phys.constraint, MemBkt_Bullet); + } + if (inst != nullptr) { + if (inst->bt.rigidBody != nullptr) { + BtDynamicsWorld->removeRigidBody(inst->bt.rigidBody); + pk_delete<btRigidBody>(inst->bt.rigidBody, MemBkt_Bullet); + } + if (inst->bt.motionState != nullptr) { + pk_delete<btDefaultMotionState>(inst->bt.motionState, MemBkt_Bullet); + } + } + pk_bkt_arr_free_handle(&cam_mstr.bktc_cameras, iter_cam->camHandle); new (iter_cam.data) PkeCamera{}; b = pk_bkt_arr_iter_increment(&cam_mstr.bktc_cameras, &iter_cam); continue; } - inst = ECS_GetInstance(iter_cam->phys.instHandle); assert(inst != nullptr); if (inst->isNeedingUpdated == true) { iter_cam->stale = iter_cam->stale | PKE_CAMERA_STALE_POSROT; |
