summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
blob: b6d2bfabe3e1336ce3b4a9e4c3b84c0b60f53463 (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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_FILE_NUM_SEPARATOR      = ";";

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_OBJ_UI_BOX              = "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: ";

inline const char* const SRLZTN_UI_BOX_UUID                   = "UUID: ";
inline const char* const SRLZTN_UI_BOX_PARENT_UUID            = "ParentUUID: ";
inline const char* const SRLZTN_UI_BOX_FLAGS                  = "Flags: ";
inline const char* const SRLZTN_UI_BOX_POS_TOP_LEFT_X         = "PosTopLeftX: ";
inline const char* const SRLZTN_UI_BOX_POS_TOP_LEFT_Y         = "PosTopLeftY: ";
inline const char* const SRLZTN_UI_BOX_MIN_WIDTH              = "MinWidthX: ";
inline const char* const SRLZTN_UI_BOX_MIN_HEIGHT             = "MinWidthY: ";
inline const char* const SRLZTN_UI_BOX_MAX_WIDTH              = "MaxWidthX: ";
inline const char* const SRLZTN_UI_BOX_MAX_HEIGHT             = "MaxWidthY: ";
inline const char* const SRLZTN_UI_BOX_FLEX_WEIGHT            = "FlexWeight: ";
inline const char* const SRLZTN_UI_BOX_TYPE                   = "Type: ";
inline const char* const SRLZTN_UI_BOX_FLEX_DIRECTION         = "FlexDirection: ";
inline const char* const SRLZTN_UI_BOX_LAYER                  = "Layer: ";
inline const char* const SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID = "FontRenderUUID: ";

inline const char* const SRLZTN_UI_FONT_RENDER_UUID                        = "UUID: ";
inline const char* const SRLZTN_UI_FONT_RENDER_TEXT_BEGIN                  = "TextBegin::";
inline const char* const SRLZTN_UI_FONT_RENDER_TEXT_END                    = "::TextEnd";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE         = "CharScale";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_LINE_HEIGHT_SCALE  = "LineHeightScale";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SPACING_SCALE = "CharSpacingScale";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_SIZE  = "SurfaceAreaSize";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_POS   = "SurfaceAreaPos";
inline const char* const SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_FLAGS = "SurfaceAreaFlags";

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;
};

bool srlztn_mapping_find_first_handle_by_uuid(void *handle, void *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 */