summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
blob: e26667ff498043ab3fd34b2d7d7e121eacfbf639 (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef PKE_SERIALIZATION_HPP
#define PKE_SERIALIZATION_HPP

#include "kve.hpp"
#include "pk.h"
#include "components.hpp"
#include "scene-types.hpp"

#define iccsc inline const char* const

iccsc SRLZTN_FILE_BEGIN                          = ":PKFB:";
iccsc SRLZTN_FILE_END                            = ":PKFE:";
iccsc SRLZTN_FILE_VERSION                        = ":0:";

iccsc SRLZTN_NUM_SEPARATOR                       = ";";
iccsc SRLZTN_HANDLE_SEPARATOR                    = "!";
iccsc SRLZTN_KVE_END                             = "";
iccsc SRLZTN_MULTILINE_END                       = ":MULTILINE_END:";
iccsc SRLZTN_CHILD_ID                            = "ChildId:";

iccsc SRLZTN_OBJ_END                             = "";
iccsc SRLZTN_OBJ_INSTANCE_POSITION               = "InstPos";
iccsc SRLZTN_OBJ_INSTANCE                        = "Instance";
iccsc SRLZTN_OBJ_CAMERA                          = "Camera";
iccsc SRLZTN_OBJ_UI_BOX                          = "UIBox";
iccsc SRLZTN_OBJ_FONT_RENDER                     = "FontRender";
iccsc SRLZTN_OBJ_FONT_RENDER_SETTINGS            = "FontRenderSettings";
iccsc SRLZTN_OBJ_UI_BOX_TYPE_DATA                = "UIBoxTypeData";

iccsc SRLZTN_POSROT_POS                          = "Position:";
iccsc SRLZTN_POSROT_ROT                          = "Rotation:";
iccsc SRLZTN_POSROT_SCALE                        = "Scale:";

iccsc SRLZTN_INSTANCE_COMPONENT_HANDLE           = "InstanceHandle:";
iccsc SRLZTN_INSTANCE_COMPONENT_ENTITY_HANDLE    = "EntityHandle:";
iccsc SRLZTN_INSTANCE_COMPONENT_ENTITY_TYPE_CODE = "EntityTypeCode:";
iccsc SRLZTN_INSTANCE_COMPONENT_UUID             = "UUID:";
iccsc SRLZTN_INSTANCE_COMPONENT_MASS             = "Mass:";
iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_LAYER  = "CollisionLayer:";
iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_MASK   = "CollisionMask:";
iccsc SRLZTN_INSTANCE_COMPONENT_COLLISION_CB_SIGNATURE = "CollisionCBSignature:";

iccsc SRLZTN_CAMERA_TYPE                         = "Type:";
iccsc SRLZTN_CAMERA_UUID                         = "UUID:";
iccsc SRLZTN_CAMERA_ORIENTATION                  = "Orientation:";
iccsc SRLZTN_CAMERA_TARGET_INSTANCE_UUID         = "TargetUUID:";
iccsc SRLZTN_CAMERA_IS_PRIMARY                   = "IsPrimary:";

iccsc SRLZTN_UI_BOX_UUID                         = "UUID:";
iccsc SRLZTN_UI_BOX_PARENT_UUID                  = "ParentUUID:";
iccsc SRLZTN_UI_BOX_FLAGS                        = "Flags:";
iccsc SRLZTN_UI_BOX_POS_TOP_LEFT                 = "PosTopLeft:";
iccsc SRLZTN_UI_BOX_MIN_SIZE                     = "MinSize:";
iccsc SRLZTN_UI_BOX_MAX_SIZE                     = "MaxSize:";
iccsc SRLZTN_UI_BOX_FLEX_WEIGHT                  = "FlexWeight:";
iccsc SRLZTN_UI_BOX_FLEX_DIRECTION               = "FlexDirection:";
iccsc SRLZTN_UI_BOX_LAYER                        = "Layer:";
iccsc SRLZTN_UI_BOX_TYPE                         = "Type:";
iccsc SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID   = "FontRenderUUID:";

iccsc SRLZTN_UI_FONT_RENDER_UUID                        = "UUID:";
iccsc SRLZTN_UI_FONT_RENDER_FONT_TYPE_TITLE             = "FontTypeTitle:";
iccsc SRLZTN_UI_FONT_RENDER_TEXT_BEGIN                  = "TextBegin::";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE         = "CharScale:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_LINE_HEIGHT_SCALE  = "LineHeightScale:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SPACING_SCALE = "CharSpacingScale:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_SIZE  = "SurfaceAreaSize:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_POS   = "SurfaceAreaPos:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_FLAGS = "SurfaceAreaFlags:";

struct srlztn_ecs_mapping {
	pk_uuid serialized_uuid = pk_uuid_zed;
	Entity_Base *created_entity = nullptr;
	CompInstance *created_instance = nullptr;
};

struct srlztn_serialize_helper {
	pk_membucket *bkt;
	pk_arr_t<pke_kve_container> kvp_containers;
	pk_handle handle_head;
};

struct srlztn_deserialize_helper {
	pk_membucket *bkt;
	pke_scene *scene;
	pk_arr_t<srlztn_ecs_mapping> mapping;
	pk_arr_t<pke_kve_container> kvp_containers;
};

bool srlztn_mapping_find_first_handle_by_uuid(void *handle, void *mapping);
bool srlztn_kvec_find_first_by_handle(void *handle, void *container);

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_project(srlztn_serialize_helper *helper);
void pke_deserialize_project(srlztn_deserialize_helper *helper);
void pke_serialize_project_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
void pke_deserialize_project_from_stream(std::istream &i, srlztn_deserialize_helper *helper);

void pke_serialize_scene(srlztn_serialize_helper *helper);
void pke_deserialize_scene(srlztn_deserialize_helper *helper);
void pke_serialize_scene_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
void pke_deserialize_scene_from_stream(std::istream &i, srlztn_deserialize_helper *helper);

void pke_serialize_level(srlztn_serialize_helper *helper);
void pke_deserialize_level(srlztn_deserialize_helper *helper);
void pke_serialize_level_to_stream(std::ostream &o, srlztn_serialize_helper *helper);
void pke_deserialize_level_from_stream(std::istream &i, srlztn_deserialize_helper *helper);

#endif /* PKE_SERIALIZATION_HPP */