summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-04-07 11:27:00 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-04-07 11:27:00 -0400
commitff63a4b2bf9f096f8cf8c6824e826b3b4d79e747 (patch)
treebc5834ffecfa87ad70aac530a14acf38245c515b /src
parent2f57eefb01c478ffe62845b8051bc82036cbb819 (diff)
pke: saving and loading scenes works
Diffstat (limited to 'src')
-rw-r--r--src/font.cpp18
-rw-r--r--src/game.cpp4
-rw-r--r--src/serialization-camera.cpp22
-rw-r--r--src/serialization-component.cpp28
-rw-r--r--src/serialization.cpp3
-rw-r--r--src/serialization.hpp2
6 files changed, 37 insertions, 40 deletions
diff --git a/src/font.cpp b/src/font.cpp
index 64728ee..aa7fbe6 100644
--- a/src/font.cpp
+++ b/src/font.cpp
@@ -394,55 +394,55 @@ void FontType_Deserialize(std::istream &stream) {
}
if (strstr(readLine, PKE_PROJECT_FONT_MSDF_MIN_SCALE)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_MSDF_MIN_SCALE);
- auto result = pk_stn_float(&msdf.minimum_scale, readLine + prefixLen);
+ auto result = pk_stn(&msdf.minimum_scale, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_MSDF_PX_RANGE)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_MSDF_PX_RANGE);
- auto result = pk_stn_float(&msdf.px_range, readLine + prefixLen);
+ auto result = pk_stn(&msdf.px_range, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_GEOMETRY_SCALE)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_GEOMETRY_SCALE);
- auto result = pk_stn_double(&sp.geometry_scale, readLine + prefixLen);
+ auto result = pk_stn(&sp.geometry_scale, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_EM_SIZE)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_EM_SIZE);
- auto result = pk_stn_double(&sp.em_size, readLine + prefixLen);
+ auto result = pk_stn(&sp.em_size, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_ASCENDER_Y)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_ASCENDER_Y);
- auto result = pk_stn_double(&sp.ascender_y, readLine + prefixLen);
+ auto result = pk_stn(&sp.ascender_y, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_DESCENDER_Y)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_DESCENDER_Y);
- auto result = pk_stn_double(&sp.descender_y, readLine + prefixLen);
+ auto result = pk_stn(&sp.descender_y, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_LINE_HEIGHT)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_LINE_HEIGHT);
- auto result = pk_stn_double(&sp.line_height, readLine + prefixLen);
+ auto result = pk_stn(&sp.line_height, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_UNDERLINE_Y)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_UNDERLINE_Y);
- auto result = pk_stn_double(&sp.underline_y, readLine + prefixLen);
+ auto result = pk_stn(&sp.underline_y, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
if (strstr(readLine, PKE_PROJECT_FONT_SPACING_UNDERLINE_THICKNESS)) {
uint64_t prefixLen = strlen(PKE_PROJECT_FONT_SPACING_UNDERLINE_THICKNESS);
- auto result = pk_stn_double(&sp.underline_thickness, readLine + prefixLen);
+ auto result = pk_stn(&sp.underline_thickness, readLine + prefixLen, nullptr);
assert(result == PK_STN_RES_SUCCESS);
continue;
}
diff --git a/src/game.cpp b/src/game.cpp
index 5e5e1b0..f5afa82 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -2,7 +2,6 @@
#include "game.hpp"
#include "camera.hpp"
-#include "serialization-component.hpp"
#include "components.hpp"
#include "ecs.hpp"
#include "entities.hpp"
@@ -10,17 +9,14 @@
#include "font.hpp"
#include "game-settings.hpp"
#include "game-type-defs.hpp"
-#include "helpers.hpp"
#include "imgui.h"
#include "level-types.hpp"
#include "level.hpp"
-#include "math-helpers.hpp"
#include "physics.hpp"
#include "player-input.hpp"
#include "plugins.hpp"
#include "project.hpp"
#include "scene.hpp"
-#include "serialization.hpp"
#include "static-ui.hpp"
#include "thread-pool.hpp"
#include "window.hpp"
diff --git a/src/serialization-camera.cpp b/src/serialization-camera.cpp
index abf404b..501be6e 100644
--- a/src/serialization-camera.cpp
+++ b/src/serialization-camera.cpp
@@ -61,16 +61,18 @@ bool FindFirstInstanceHandle(void *handle, void *mapping) {
void pke_deserialize_camera(srlztn_deserialize_helper *h) {
PK_STN_RES stn_res;
PkeCamera cam{};
+ cam.type = PKE_CAMERA_TYPE_PERSPECTIVE;
+ cam.view = PKE_CAMERA_VIEW_FREE;
InstPos instPos;
InstanceHandle instanceHandle = InstanceHandle_MAX;
pk_uuid target_uuid = pk_uuid_zed;
- glm::vec3 pos;
- glm::quat quat_rot;
- glm::vec3 scale;
+ glm::vec3 pos = glm::vec3(0);
+ glm::quat quat_rot = glm::quat(0, 0, 0, 1);
+ glm::vec3 scale = glm::vec3(1);
instPos.mass = 1;
instPos.posRot.setIdentity();
instPos.scale = btVector3(1, 1, 1);
- while (h->i.getline(h->read_line, h->read_line_len)) {
+ while (h->i->getline(h->read_line, h->read_line_len)) {
if (strcmp(h->read_line, SRLZTN_OBJ_END) == 0) {
int64_t targetInstanceIndex = -1;
@@ -109,7 +111,7 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) {
}
if (strncmp(h->read_line, SRLZTN_CAMERA_TYPE, strlen(SRLZTN_CAMERA_TYPE)) == 0) {
uint64_t prefixLen = strlen(SRLZTN_CAMERA_TYPE);
- stn_res = pk_stn(&cam.type, h->read_line + prefixLen);
+ stn_res = pk_stn(&cam.type, h->read_line + prefixLen, nullptr);
if (stn_res != PK_STN_RES_SUCCESS) {
fprintf(stderr, "[%s] Err '%u' parsing camera type from: '%s'", __FILE__, stn_res, h->read_line);
}
@@ -117,7 +119,7 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) {
}
if (strncmp(h->read_line, SRLZTN_CAMERA_ORIENTATION, strlen(SRLZTN_CAMERA_ORIENTATION)) == 0) {
uint64_t prefixLen = strlen(SRLZTN_CAMERA_ORIENTATION);
- stn_res = pk_stn(&cam.view, h->read_line + prefixLen);
+ stn_res = pk_stn(&cam.view, h->read_line + prefixLen, nullptr);
if (stn_res != PK_STN_RES_SUCCESS) {
fprintf(stderr, "[%s] Err '%u' parsing camera view from: '%s'", __FILE__, stn_res, h->read_line);
}
@@ -126,11 +128,11 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) {
if (strstr(h->read_line, SRLZTN_CAMERA_INSTANCE_HANDLE)) {
uint64_t prefixLen = strlen(SRLZTN_CAMERA_INSTANCE_HANDLE);
h->read_line[prefixLen + 10] = '\0';
- stn_res = pk_stn(&instanceHandle.bucketIndex, h->read_line + prefixLen);
+ stn_res = pk_stn(&instanceHandle.bucketIndex, h->read_line + prefixLen, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) {
fprintf(stderr, "[%s] Err '%u' parsing camera instance handle from: '%s'", __FILE__, stn_res, h->read_line);
}
- stn_res = pk_stn(&instanceHandle.itemIndex, h->read_line + prefixLen + 11);
+ stn_res = pk_stn(&instanceHandle.itemIndex, h->read_line + prefixLen + 11, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) {
fprintf(stderr, "[%s] Err '%u' parsing camera instance handle from: '%s'", __FILE__, stn_res, h->read_line);
}
@@ -141,9 +143,9 @@ void pke_deserialize_camera(srlztn_deserialize_helper *h) {
(h->read_line + prefixLen) >> cam.uuid;
continue;
}
- if (strncmp(h->read_line, SRLZTN_CAMERA_IS_PRIMARY, strlen(SRLZTN_CAMERA_IS_PRIMARY)) == 0) {
+ if (strstr(h->read_line, SRLZTN_CAMERA_IS_PRIMARY)) {
uint64_t prefixLen = strlen(SRLZTN_CAMERA_IS_PRIMARY);
- stn_res = pk_stn(&cam.isPrimary, h->read_line + prefixLen);
+ stn_res = pk_stn(&cam.isPrimary, h->read_line + prefixLen, nullptr);
if (stn_res != PK_STN_RES_SUCCESS) {
fprintf(stderr, "[%s] Err '%u' parsing camera primary from: '%s'", __FILE__, stn_res, h->read_line);
}
diff --git a/src/serialization-component.cpp b/src/serialization-component.cpp
index 34eb758..9a29e67 100644
--- a/src/serialization-component.cpp
+++ b/src/serialization-component.cpp
@@ -47,7 +47,7 @@ bool pke_deserialize_inst_pos(srlztn_deserialize_helper *h, glm::vec3 &pos, glm:
long index = 0;
do {
assert(index < 3);
- stn_res = pk_stn_float_e(&pos[index], starting_char, &pEnd);
+ stn_res = pk_stn(&pos[index], starting_char, &pEnd);
if (stn_res != PK_STN_RES_SUCCESS) return false;
starting_char = pEnd + 1;
++index;
@@ -62,7 +62,7 @@ bool pke_deserialize_inst_pos(srlztn_deserialize_helper *h, glm::vec3 &pos, glm:
long index = 0;
do {
assert(index < 4);
- stn_res = pk_stn_float_e(&quat_rot[index], starting_char, &pEnd);
+ stn_res = pk_stn(&quat_rot[index], starting_char, &pEnd);
if (stn_res != PK_STN_RES_SUCCESS) return false;
starting_char = pEnd + 1;
++index;
@@ -77,7 +77,7 @@ bool pke_deserialize_inst_pos(srlztn_deserialize_helper *h, glm::vec3 &pos, glm:
long index = 0;
do {
assert(index < 3);
- stn_res = pk_stn_float_e(&scale[index], starting_char, &pEnd);
+ stn_res = pk_stn(&scale[index], starting_char, &pEnd);
if (stn_res != PK_STN_RES_SUCCESS) return false;
starting_char = pEnd + 1;
++index;
@@ -156,11 +156,11 @@ bool pke_deserialize_instance(srlztn_deserialize_helper *h) {
float mass;
InstPos inst_pos;
CompInstance comp{};
- glm::vec3 pos;
- glm::quat quat_rot;
- glm::vec3 scale;
+ glm::vec3 pos = glm::vec3(0);
+ glm::quat quat_rot = glm::quat(0, 0, 0, 1);
+ glm::vec3 scale = glm::vec3(1);
comp.collisionCallback.name[0] = '\0';
- while (h->i.getline(h->read_line, h->read_line_len)) {
+ while (h->i->getline(h->read_line, h->read_line_len)) {
if (strstr(SRLZTN_OBJ_END, h->read_line)) {
if (et_ptr == nullptr) {
fprintf(stdout, "[Game::DeserializeInstance] Unknown EntityTypeCode, skipping instance.\n");
@@ -198,18 +198,18 @@ bool pke_deserialize_instance(srlztn_deserialize_helper *h) {
if (strstr(h->read_line, SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE)) {
prefix_len = strlen(SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE);
sprintf(handle_str, "%.10s%c%s", h->read_line + prefix_len, '\0', h->read_line + prefix_len + 10);
- stn_res = pk_stn(&comp.entHandle.bucketIndex, handle_str, 16);
+ stn_res = pk_stn(&comp.entHandle.bucketIndex, handle_str, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) return false;
- stn_res = pk_stn(&comp.entHandle.itemIndex, handle_str + 11, 16);
+ stn_res = pk_stn(&comp.entHandle.itemIndex, handle_str + 11, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) return false;
continue;
}
if (strstr(h->read_line, SRLZTN_INSTANCE_COMPONENT_HANDLE)) {
prefix_len = strlen(SRLZTN_INSTANCE_COMPONENT_HANDLE);
sprintf(handle_str, "%.10s%c%s", h->read_line + prefix_len, '\0', h->read_line + prefix_len + 10);
- stn_res = pk_stn(&comp.instanceHandle.bucketIndex, handle_str, 16);
+ stn_res = pk_stn(&comp.instanceHandle.bucketIndex, handle_str, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) return false;
- stn_res = pk_stn(&comp.instanceHandle.itemIndex, handle_str + 11, 16);
+ stn_res = pk_stn(&comp.instanceHandle.itemIndex, handle_str + 11, nullptr, 16);
if (stn_res != PK_STN_RES_SUCCESS) return false;
continue;
}
@@ -227,19 +227,19 @@ bool pke_deserialize_instance(srlztn_deserialize_helper *h) {
}
if (strstr(h->read_line, SRLZTN_INSTANCE_COMPONENT_MASS)) {
prefix_len = strlen(SRLZTN_INSTANCE_COMPONENT_MASS);
- stn_res = pk_stn(&mass, h->read_line + prefix_len);
+ stn_res = pk_stn(&mass, h->read_line + prefix_len, nullptr);
if (stn_res != PK_STN_RES_SUCCESS) return false;
continue;
}
if (strstr(h->read_line, SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER)) {
prefix_len = strlen(SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER);
- stn_res = pk_stn(&comp.physicsLayer, h->read_line + prefix_len, 10);
+ stn_res = pk_stn(&comp.physicsLayer, h->read_line + prefix_len, nullptr, 10);
if (stn_res != PK_STN_RES_SUCCESS) return false;
continue;
}
if (strstr(h->read_line, SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK)) {
prefix_len = strlen(SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK);
- stn_res = pk_stn(&comp.physicsMask, h->read_line + prefix_len, 10);
+ stn_res = pk_stn(&comp.physicsMask, h->read_line + prefix_len, nullptr, 10);
if (stn_res != PK_STN_RES_SUCCESS) return false;
continue;
}
diff --git a/src/serialization.cpp b/src/serialization.cpp
index d7dd312..507a238 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -18,7 +18,6 @@ srlztn_deserialize_helper *pke_deserialize_init(pk_membucket *bkt) {
helper->bkt = bkt;
helper->read_line = nullptr;
// TODO custom allocator
- helper->i = {};
helper->mapping = {bkt};
return helper;
}
@@ -81,7 +80,7 @@ void pke_deserialize_file_scene(srlztn_deserialize_helper *h) {
h->read_line = pk_new<char>(h->read_line_len, h->bkt);
memset(h->read_line, '\0', h->read_line_len);
- while (h->i.getline(h->read_line, h->read_line_len)) {
+ while (h->i->getline(h->read_line, h->read_line_len)) {
if (strcmp(SRLZTN_OBJ_INSTANCE, h->read_line) == 0) {
pke_deserialize_instance(h);
continue;
diff --git a/src/serialization.hpp b/src/serialization.hpp
index f4180e4..97bd4e8 100644
--- a/src/serialization.hpp
+++ b/src/serialization.hpp
@@ -50,7 +50,7 @@ struct srlztn_deserialize_helper {
pke_scene *scene;
pk_membucket *bkt;
char *read_line;
- std::istringstream i;
+ std::istream *i;
pk_arr_t<srlztn_instance_mapping> mapping;
};