diff options
Diffstat (limited to 'src/scene.cpp')
| -rw-r--r-- | src/scene.cpp | 63 |
1 files changed, 16 insertions, 47 deletions
diff --git a/src/scene.cpp b/src/scene.cpp index bdb7a3a..ecc0fc8 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -2,10 +2,7 @@ #include "scene.hpp" #include "ecs.hpp" #include "pk.h" -#include "serialization.hpp" -#include "game-settings.hpp" -#include <fstream> #include <string.h> #include <filesystem> @@ -28,12 +25,21 @@ void pke_scene_master_teardown() { pke_scene *pke_scene_create(const char *scene_name) { NULL_CHAR_ARR(safe_scene_name, SCENE_NAME_MAX_LEN); size_t offset; + pk_iter_t<pke_scene> it{}; + bool valid; std::filesystem::path p(scene_name); + struct pke_scene *scene = nullptr; sprintf(safe_scene_name, "%.15s", p.stem().c_str()); - struct pke_scene *scene = pke_scene_get_by_name(safe_scene_name); - if (scene != nullptr) { - fprintf(stderr, "[pke_scene_create] failed to create scene: pke_scene::name already in use."); - return nullptr; + /* 2025-09-05 JCB + * There used to be logic here enforcing names unique scene names. + */ + valid = pk_bkt_arr_iter_begin(&scene_mstr.bc, &it); + while (valid == true) { + // TODO add uuid logic here. + if (false) { + fprintf(stderr, "[pke_scene_create] failed to create scene: pke_scene::name already in use."); + } + valid = pk_bkt_arr_iter_increment(&scene_mstr.bc, &it); } SceneHandle scene_handle{ pk_bkt_arr_new_handle(&scene_mstr.bc) }; if (scene_handle == SceneHandle_MAX) { @@ -44,6 +50,9 @@ pke_scene *pke_scene_create(const char *scene_name) { new (scene) pke_scene{}; ECS_CreateEntity(scene); + scene->file_path.val = 0; + scene->file_path.length = 0; + scene->file_path.reserved = 0; scene->scene_handle = scene_handle; offset = (strlen(safe_scene_name) > SCENE_NAME_MAX_LEN ? strlen(safe_scene_name) - SCENE_NAME_MAX_LEN : 0); for (int i = 0; i < SCENE_NAME_MAX_LEN; ++i) { @@ -56,20 +65,6 @@ struct pke_scene *pke_scene_get_by_handle(SceneHandle scene_handle) { return &scene_mstr.bc[scene_handle]; } - // TODO remove me? Need to decide if we always read from files or if we should have a serialized representation of a scene -struct pke_scene *pke_scene_get_by_path(const char *file_path) { - std::ifstream f(file_path); - if (!f.is_open()) { - fprintf(stderr, "[pke_scene_get_by_name] Scene not found in memory nor filesystem: '%s'\n", file_path); - return nullptr; - } - srlztn_deserialize_helper *h = pke_deserialize_init(pkeSettings.mem_bkt.game_transient); - h->scene = pke_scene_create(file_path); - pke_deserialize_scene_from_stream(f, h); - pke_deserialize_teardown(h); - return h->scene; -} - struct pke_scene *pke_scene_get_by_name(const char *scene_name) { assert(scene_name != nullptr); NULL_CHAR_ARR(safe_name, SCENE_NAME_MAX_LEN + 1); @@ -92,40 +87,14 @@ 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 (i = 0; i < scn->cameras.next; ++i) { - PkeCamera_Destroy(scn->cameras[i]); - } - for (i = 0; i < scn->input_handles.next; ++i) { - pke_input_deactivate_set(scn->input_handles[i]); - pke_input_unregister_set(scn->input_handles[i]); - } if (scn->file_path.reserved > 0) { pk_delete_arr<char>(scn->file_path.val, scn->file_path.reserved); } scn->file_path = {}; 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); } - -void pke_scene_register_camera(SceneHandle scene_handle, CameraHandle cameraHandle) { - assert(scene_handle != SceneHandle_MAX); - assert(cameraHandle != CameraHandle_MAX); - pke_scene *scene = pke_scene_get_by_handle(scene_handle); - 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, pke_input_action_set_handle handle) { - assert(scene_handle != SceneHandle_MAX); - assert(handle != pke_input_action_set_handle_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); -} |
