summaryrefslogtreecommitdiff
path: root/src/camera.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-09-16 16:58:02 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-09-16 17:00:08 -0400
commit73c5e170260638cc566cba2689ea570caee39251 (patch)
tree256b36398d33650054a885e572437909f88485cb /src/camera.cpp
parente52ef2e49ae660833370befc34ba79d412cb4604 (diff)
pke: major object lifetime overhaul.
Added pke-test-load-unload to ensure objects are managed as expected.
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;