diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-04-02 20:46:41 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-04-02 20:46:41 -0400 |
| commit | a02c7589c6c9e902c59a632aa650635336fe648c (patch) | |
| tree | 8ec4800ff9f9effbd9141e02131123448679bc93 /src/serialization.hpp | |
| parent | fad302f7db146a78900f9b21dbbcd97761093c1b (diff) | |
pke: checkpoint: major serialization refactor
Diffstat (limited to 'src/serialization.hpp')
| -rw-r--r-- | src/serialization.hpp | 71 |
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 */ |
