summaryrefslogtreecommitdiff
path: root/src/serialization.hpp
blob: a4ea7e43f909480af814152580f4540bd3dd1b40 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef PKE_SERIALIZATION_HPP
#define PKE_SERIALIZATION_HPP

#include "kve.hpp"
#include "level-types.hpp"
#include "pk.h"
#include "components.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_OBJ_INPUT_ACTION                    = "InputAction";
iccsc SRLZTN_OBJ_INPUT_SET                       = "InputSet";

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_COLOR_BORDER                 = "ColorBorder:";
iccsc SRLZTN_UI_BOX_COLOR_BACKGROUND             = "ColorBackground:";
iccsc SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID   = "FontRenderUUID:";
iccsc SRLZTN_UI_BOX_DATA_BUTTON_TEXT_FONT_RENDER_UUID   = "FontRenderUUID:";
iccsc SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_DEFAULT = "AssetKeyDefault:";
iccsc SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_HOVERED = "AssetKeyHovered:";
iccsc SRLZTN_UI_BOX_DATA_BUTTON_IMAGE_ASSET_KEY_PRESSED = "AssetKeyPressed:";

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_COLOR_FOREGROUND   = "ColorForeground:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_BACKGROUND   = "ColorBackground:";
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_FLAGS              = "Flags:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_SURFACE_AREA_FLAGS = "SurfaceAreaFlags:";

iccsc SRLZTN_INPUT_ACTION_NAME                   = "Name:";
iccsc SRLZTN_INPUT_ACTION_MASK_HASH              = "MaskHash:";
iccsc SRLZTN_INPUT_ACTION_MASK_BUTTON            = "MaskButton:";
iccsc SRLZTN_INPUT_ACTION_MASK_MODS              = "MaskMods:";

iccsc SRLZTN_INPUT_SET_TITLE                     = "Title:";
iccsc SRLZTN_INPUT_SET_FLAGS                     = "Flags:";

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_level *level;
	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(pke_level *level, 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 */