summaryrefslogtreecommitdiff
path: root/src/scene.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-03-27 11:58:47 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-03-27 11:58:47 -0400
commite4604d5b84a71ac3cc8fe1a148d0a6250c7a715c (patch)
tree0f768c8b5d0b96cb459f92c7795c6c9353710ed1 /src/scene.cpp
parent11057d2aa423f9b565f3fead4c260999d1bdb53e (diff)
pke: generate uuid and save to project+scene files
Diffstat (limited to 'src/scene.cpp')
-rw-r--r--src/scene.cpp15
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;
}