summaryrefslogtreecommitdiff
path: root/src/camera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/camera.cpp')
-rw-r--r--src/camera.cpp32
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;