diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-03-27 11:58:47 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-03-27 11:58:47 -0400 |
| commit | e4604d5b84a71ac3cc8fe1a148d0a6250c7a715c (patch) | |
| tree | 0f768c8b5d0b96cb459f92c7795c6c9353710ed1 /src/scene.cpp | |
| parent | 11057d2aa423f9b565f3fead4c260999d1bdb53e (diff) | |
pke: generate uuid and save to project+scene files
Diffstat (limited to 'src/scene.cpp')
| -rw-r--r-- | src/scene.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/scene.cpp b/src/scene.cpp index 0e5a22c..f4df916 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -2,7 +2,10 @@ #include "scene.hpp" #include "bucketed-array.hpp" #include "ecs.hpp" -#include <cstring> + +#include <string.h> + +#include <filesystem> struct pke_scene_master { BucketContainer<pke_scene, SceneHandle> bc; @@ -17,7 +20,11 @@ void pke_scene_master_teardown() { } pke_scene *pke_scene_create(const char *scene_name) { - struct pke_scene *scene = pke_scene_get_by_name(scene_name); + NULL_CHAR_ARR(safe_scene_name, SCENE_NAME_MAX_LEN); + size_t offset; + std::filesystem::path p(scene_name); + 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; @@ -31,9 +38,9 @@ pke_scene *pke_scene_create(const char *scene_name) { ECS_CreateEntity(scene); scene->scene_handle = scene_handle; - size_t offset = (strlen(scene_name) > SCENE_NAME_MAX_LEN ? strlen(scene_name) - SCENE_NAME_MAX_LEN : 0); + 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) { - scene->name[i] = scene_name[i + offset]; + scene->name[i] = safe_scene_name[i + offset]; } return scene; } |
