summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
blob: 4b0624cd145c1e25a50a11217e37b1463c962ef2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#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_TYPE                   = "Type: ";
inline const char* const SRLZTN_CAMERA_UUID                   = "UUID: ";
inline const char* const SRLZTN_CAMERA_ORIENTATION            = "Orientation: ";
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::istream *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 */