diff options
Diffstat (limited to 'src/scene.cpp')
| -rw-r--r-- | src/scene.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/scene.cpp b/src/scene.cpp index ad6b502..2c47356 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -89,12 +89,17 @@ pk_bkt_arr *pke_scene_get_scenes() { } void pke_scene_remove(SceneHandle handle) { + uint32_t i; pke_scene *scn = &scene_mstr.bc[handle]; assert(scn != nullptr && "[pke_scene_remove] Failed to find scene by requested SceneHandle"); ECS_MarkForRemoval(scn); - for (long i = 0; i < scn->cameras.next; ++i) { + for (i = 0; i < scn->cameras.next; ++i) { PkeCamera_Destroy(scn->cameras[i]); } + for (i = 0; i < scn->input_handles.next; ++i) { + PkeInput_DeactivateSet(scn->input_handles[i]); + PkeInput_UnregisterSet(scn->input_handles[i]); + } if (scn->file_path.reserved > 0) { pk_delete<char>(scn->file_path.val, scn->file_path.reserved); } @@ -102,6 +107,7 @@ void pke_scene_remove(SceneHandle handle) { scn->name[0] = '\0'; scn->scene_handle = SceneHandle_MAX; pk_arr_reset(&scn->cameras); + pk_arr_reset(&scn->input_handles); pk_bkt_arr_free_handle(&scene_mstr.bc, handle); } @@ -112,3 +118,11 @@ void pke_scene_register_camera(SceneHandle scene_handle, CameraHandle cameraHand assert(scene != nullptr && "Failed to find scene by requested SceneHandle"); pk_arr_append(&scene->cameras, &cameraHandle); } + +void pke_scene_register_input_action_set(SceneHandle scene_handle, InputActionSetHandle handle) { + assert(scene_handle != SceneHandle_MAX); + assert(handle != InputActionSetHandle_MAX); + pke_scene *scene = pke_scene_get_by_handle(scene_handle); + assert(scene != nullptr && "Failed to find scene by requested SceneHandle"); + pk_arr_append_t(&scene->input_handles, handle); +} |
