summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-04-02 20:46:41 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-04-02 20:46:41 -0400
commita02c7589c6c9e902c59a632aa650635336fe648c (patch)
tree8ec4800ff9f9effbd9141e02131123448679bc93 /src/serialization.hpp
parentfad302f7db146a78900f9b21dbbcd97761093c1b (diff)
pke: checkpoint: major serialization refactor
Diffstat (limited to 'src/serialization.hpp')
-rw-r--r--src/serialization.hpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/serialization.hpp b/src/serialization.hpp
new file mode 100644
index 0000000..f4180e4
--- /dev/null
+++ b/src/serialization.hpp
@@ -0,0 +1,71 @@
+#ifndef PKE_SERIALIZATION_HPP
+#define PKE_SERIALIZATION_HPP
+
+#include "pk.h"
+#include "components.hpp"
+#include "scene-types.hpp"
+
+inline const char* const SRLZTN_FILE_BEGIN = ":PKFB:";
+inline const char* const SRLZTN_FILE_END = ":PKFE:";
+inline const char* const SRLZTN_FILE_VERSION = ":0:";
+
+inline const char* const SRLZTN_OBJ_END = "";
+inline const char* const SRLZTN_OBJ_INSTANCE = "Instance:";
+inline const char* const SRLZTN_OBJ_CAMERA = "Camera:";
+
+inline const char* const SRLZTN_POSROT_POS = "Position: ";
+inline const char* const SRLZTN_POSROT_ROT = "Rotation: ";
+inline const char* const SRLZTN_POSROT_SCALE = "Scale: ";
+
+inline const char* const SRLZTN_INSTANCE_COMPONENT_HANDLE = "InstanceHandle: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE = "EntityHandle: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_ENTITY_TYPE_CODE = "EntityTypeCode: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_UUID = "UUID: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_MASS = "Mass: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER = "CollisionLayer: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK = "CollisionMask: ";
+inline const char* const SRLZTN_INSTANCE_COMPONENT_COLLISION_CB_SIGNATURE = "CollisionCBSignature: ";
+
+inline const char* const SRLZTN_CAMERA_TARGET = "Target: ";
+inline const char* const SRLZTN_CAMERA_TYPE = "Type: ";
+inline const char* const SRLZTN_CAMERA_UUID = "UUID: ";
+inline const char* const SRLZTN_CAMERA_ORIENTATION = "Orientation: ";
+inline const char* const SRLZTN_CAMERA_INSTANCE_HANDLE = "InstanceHandle: ";
+inline const char* const SRLZTN_CAMERA_TARGET_INSTANCE_UUID = "TargetUUID: ";
+inline const char* const SRLZTN_CAMERA_IS_PRIMARY = "IsPrimary: ";
+
+struct srlztn_instance_mapping {
+ pk_uuid serialized_uuid = pk_uuid_zed;
+ Entity_Base *created_entity = nullptr;
+ CompInstance *created_instance = nullptr;
+};
+
+struct srlztn_serialize_helper {
+ pk_membucket *bkt;
+ std::ostringstream o;
+};
+
+struct srlztn_deserialize_helper {
+ size_t read_line_len = 256;
+ pke_scene *scene;
+ pk_membucket *bkt;
+ char *read_line;
+ std::istringstream i;
+ pk_arr_t<srlztn_instance_mapping> mapping;
+};
+
+srlztn_serialize_helper *pke_serialize_init(pk_membucket *bkt);
+srlztn_deserialize_helper *pke_deserialize_init(pk_membucket *bkt);
+void pke_serialize_teardown(srlztn_serialize_helper *helper);
+void pke_deserialize_teardown(srlztn_deserialize_helper *helper);
+
+void pke_serialize_file_project(srlztn_serialize_helper *helper);
+void pke_deserialize_file_project(srlztn_deserialize_helper *helper);
+
+void pke_serialize_file_scene(srlztn_serialize_helper *helper);
+void pke_deserialize_file_scene(srlztn_deserialize_helper *helper);
+
+void pke_serialize_file_level(srlztn_serialize_helper *helper);
+void pke_deserialize_file_level(srlztn_deserialize_helper *helper);
+
+#endif /* PKE_SERIALIZATION_HPP */