#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_PADDING = "FlexPadding:"; 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 kvp_containers; pk_handle handle_head; }; struct srlztn_deserialize_helper { pk_membucket *bkt; pke_level *level; pk_arr_t mapping; pk_arr_t 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 */