about summary refs log tree commit diff stats
path: root/tools/datapacker/container.h
blob: bc02ba4e81df3a3edd904c321d4a5bff15e12b7b (plain) (blame)
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
#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_ */
class="p">("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") elif node is Worldport: results.append("ports {\n name: \"") results.append(node.name.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") elif node is Keyholder: results.append("keyholders {\n name: \"") results.append(node.name.to_upper()) results.append("\"\n path: \"") results.append(node_id) results.append("\"\n}\n") for child in node.get_children(): _visit_node(child, results) func _parse_symbol(symbol): var raw = symbol.strip_edges() var result = [] if raw.contains(":Syn") or raw.contains(":Ant"): result.append("SUN") if raw.contains(":Add") or raw.contains(":Rem") or raw.contains(":Adp"): result.append("SPARKLES") if raw.contains(":Hom") or raw.contains(":Rhy"): result.append("ZERO") if raw.contains(":Cat") or raw.contains(":Exa"): result.append("EXAMPLE") if raw.contains(":Par") or raw.contains(":Who"): result.append("BOXES") if raw.contains(":Plu") or raw.contains(":Sin"): result.append("PLANET") if raw.contains(":Int") or raw.contains(":Dim"): result.append("PYRAMID") if raw.contains(":Ene") or raw.contains(":Enr") or raw.contains(":Ent"): result.append("CROSS") if raw.contains(":Swe") or raw.contains(":Swu"): result.append("SWEET") if raw.contains(":Mas") or raw.contains(":Fem"): result.append("GENDER") if raw.contains(":Old") or raw.contains(":You") or raw.contains(":Ten"): result.append("AGE") if raw.contains(":Sou") or raw.contains(":Sor"): result.append("SOUND") if raw.contains(":Ana"): result.append("ANAGRAM") if raw.contains(":Job") or raw.contains(":Emp"): result.append("JOB") if raw.contains(":Sur") or raw.contains(":Srr"): result.append("STARS") if raw.contains(":Cha"): result.append("NULL") if raw.contains(":Eva"): result.append("EVAL") if raw.contains(":Sad") or raw.contains(":Odd") or raw.contains("@"): result.append("LINGO") if raw.contains("?"): result.append("QUESTION") return result func _parse_node_paths(node, parent, array): var result = [] for p in array: result.append(String(node.get_path_to(parent.get_node(p)).get_concatenated_names())) return result