about summary refs log tree commit diff stats
path: root/tools/util/naming.h
Commit message (Collapse)AuthorAgeFilesLines
* Started writing a data validatorStar Rauchenberger2025-08-161-0/+4
| | | | | | | Currently, it can check whether identifiers point to non-existent objects, or whether multiple objects share the same identifier. It can also determine whether an identifier is underspecified (e.g. a door doesn't specify a room, or a global connection doesn't specify a map).
* Converted to proto2Star Rauchenberger2025-08-121-1/+1
| | | | | | | | | | | | | | | | | This will let us use an older version of protobuf in Python, and allows us to use the Godot protobuf implementation at all. Scalar fields with custom defaults in data.proto were changed to not have a default, because Godot doesn't handle it properly. The equivalent fields in human.proto still have the defaults, and datapacker copies the default value in if necessary. The Panel message in data.proto was also renamed to PanelData because otherwise it conflicts with the native Godot class named Panel. The double field in Letter was renamed to level2, because Godot couldn't handle it well. Finally, common.proto was removed and its contents were moved into data.proto, which allows us to generate code for Python without needing to edit it. NOTE: I had to slightly modify the Godot protobuf code generator. I'll need to upload that somewhere.
* Added support for masteriesStar Rauchenberger2025-08-091-0/+8
Also assigned IDs for the_butterfly, as well as already configured letters.
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_DATAPACKER_CONTAINER_H_
#define TOOLS_DATAPACKER_CONTAINER_H_

#include <cstdint>
#include <map>
#include <optional>
#include <string>

#include "proto/data.pb.h"

namespace com::fourisland::lingo2_archipelago {

class Container {
 public:
  uint64_t FindOrAddMap(std::string map_name);

  uint64_t FindOrAddRoom(std::optional<std::string> map_name,
                         std::string room_name,
                         std::optional<std::string> map_fallback);

  uint64_t FindOrAddPainting(std::optional<std::string> map_name,
                             std::optional<std::string> room_name,
                             std::string painting_name,
                             std::optional<std::string> map_fallback,
                             std::optional<std::string> room_fallback);

  uint64_t FindOrAddPort(std::optional<std::string> map_name,
                         std::optional<std::string> room_name,
                         std::string port_name,
                         std::optional<std::string> map_fallback,
                         std::optional<std::string> room_fallback);

  uint64_t FindOrAddPanel(std::optional<std::string> map_name,
                          std::optional<std::string> room_name,
                          std::string panel_name,
                          std::optional<std::string> map_fallback,
                          std::optional<std::string> room_fallback);

  uint64_t FindOrAddLetter(std::string key, bool level2);

  uint64_t FindLetterByName(std::string letter_name);

  uint64_t FindOrAddEnding(std::string ending_name);

  uint64_t FindOrAddMastery(std::optional<std::string> map_name,
                            std::optional<std::string> room_name,
                            std::string mastery_name,
                            std::optional<std::string> map_fallback,
                            std::optional<std::string> room_fallback);

  uint64_t FindOrAddKeyholder(std::optional<std::string> map_name,
                              std::optional<std::string> room_name,
                              std::string keyholder_name,
                              std::optional<std::string> map_fallback,
                              std::optional<std::string> room_fallback);

  uint64_t FindOrAddDoor(std::optional<std::string> map_name,
                         std::string door_name,
                         std::optional<std::string> map_fallback);

  void AddConnection(const Connection& connection);

  uint64_t FindOrAddProgressive(std::string prog_name);

  uint64_t FindOrAddDoorGroup(std::string group_name);

  AllObjects& all_objects() { return all_objects_; }

 private:
  AllObjects all_objects_;

  std::map<std::string, uint64_t> map_id_by_name_;
  std::map<std::string, std::map<std::string, uint64_t>>
      room_id_by_map_room_names_;
  std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>>
      painting_id_by_map_room_painting_names_;
  std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>>
      port_id_by_map_room_port_names_;
  std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>>
      panel_id_by_map_room_panel_names_;
  std::map<std::string, uint64_t> letter_id_by_name_;
  std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>>
      mastery_id_by_map_room_mastery_names_;
  std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>>
      keyholder_id_by_map_room_keyholder_names_;
  std::map<std::string, std::map<std::string, uint64_t>>
      door_id_by_map_door_names_;
  std::map<std::string, uint64_t> ending_id_by_name_;
  std::map<std::string, uint64_t> progressive_id_by_name_;
  std::map<std::string, uint64_t> door_group_id_by_name_;
};

}  // namespace com::fourisland::lingo2_archipelago

#endif /* TOOLS_DATAPACKER_CONTAINER_H_ */