syntax = "proto2"; package com.fourisland.lingo2_archipelago; message Proxy { optional string answer = 1; optional string path = 2; } enum DoorType { DOOR_TYPE_UNKNOWN = 0; // This door is a location unless panelsanity is on, and it is an item as long as door shuffle is on. STANDARD = 1; // This door is never an item or a location. EVENT = 2; // This door is never a location, and is an item as long as door shuffle is on. ITEM_ONLY = 3; // This door is never a location, and is an item as long as control center color shuffle is on. CONTROL_CENTER_COLOR = 4; // This door is never an item, and is a location as long as panelsanity is not on. LOCATION_ONLY = 5; // This door is an item if gravestone shuffle is enabled, and is a location as long as panelsanity is not on. GRAVESTONE = 6; } enum AxisDirection { AXIS_DIRECTION_UNKNOWN = 0; X_PLUS = 1; X_MINUS = 2; Y_PLUS = 3; Y_MINUS = 4; Z_PLUS = 5; Z_MINUS = 6; } message ProxyIdentifier { optional uint64 panel = 1; optional string answer = 2; } message KeyholderAnswer { optional uint64 keyholder = 1; optional string key = 2; } message Connection { optional uint64 from_room = 1; optional uint64 to_room = 2; optional uint64 required_door = 3; oneof trigger { uint64 port = 4; uint64 painting = 5; ProxyIdentifier panel = 6; } } message Door { optional uint64 id = 1; optional uint64 ap_id = 11; optional uint64 map_id = 9; optional uint64 room_id = 10; optional string name = 2; repeated string receivers = 3; repeated uint64 move_paintings = 4; repeated ProxyIdentifier panels = 5; optional uint64 complete_at = 12; optional string control_center_color = 6; repeated string switches = 7; repeated KeyholderAnswer keyholders = 13; repeated uint64 rooms = 14; repeated uint64 doors = 15; optional DoorType type = 8; } message PanelData { optional uint64 id = 1; optional uint64 ap_id = 10; optional uint64 room_id = 2; optional string name = 3; optional string path = 4; optional string clue = 5; optional string answer = 6; repeated string symbols = 7; repeated Proxy proxies = 8; optional uint64 required_door = 9; optional uint64 required_room = 11; } message Painting { optional uint64 id = 1; optional uint64 room_id = 2; optional string name = 9; optional string path = 10; optional string display_name = 4; optional string orientation = 3; optional bool move = 6; optional bool enter_only = 7; optional AxisDirection gravity = 8; optional bool exit_only = 11; optional uint64 required_door = 5; } message Port { optional uint64 id = 1; optional uint64 room_id = 2; optional string name = 3; optional string path = 4; optional string orientation = 5; optional AxisDirection gravity = 7; optional uint64 required_door = 6; } message Keyholder { optional uint64 id = 1; optional uint64 room_id = 2; optional string name = 3; optional string path = 4; } message Letter { optional uint64 id = 3; optional uint64 ap_id = 5; optional uint64 room_id = 4; optional string key = 1; optional bool level2 = 2; optional string path = 6; } message Mastery { optional uint64 id = 1; optional uint64 ap_id = 2; optional uint64 room_id = 3; optional string name = 4; optional string path = 5; } message Room { optional uint64 id = 1; optional uint64 map_id = 8; optional string name = 2; optional string display_name = 3; repeated uint64 panels = 4; repeated uint64 paintings = 5; repeated uint64 letters = 6; repeated uint64 ports = 7; repeated uint64 doors = 9; repeated uint64 masteries = 10; repeated uint64 keyholders = 11; } message Map { optional uint64 id = 1; optional string name = 2; } message AllObjects { repeated Map maps = 7; repeated Room rooms = 1; repeated Door doors = 2; repeated PanelData panels = 3; repeated Painting paintings = 4; repeated Port ports = 5; repeated Keyholder keyholders = 11; repeated Letter letters = 9; repeated Mastery masteries = 10; repeated Connection connections = 6; map special_ids = 8; } background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#ifndef TOOLS_UTIL_IDS_YAML_FORMAT_H_
#define TOOLS_UTIL_IDS_YAML_FORMAT_H_

#include <string>

#include "proto/human.pb.h"

namespace com::fourisland::lingo2_archipelago {

IdMappings ReadIdsFromYaml(const std::string& filename);

void WriteIdsAsYaml(const IdMappings& ids, const std::string& filename);

}  // namespace com::fourisland::lingo2_archipelago

#endif /* TOOLS_UTIL_IDS_YAML_FORMAT_H_ */