diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-01 12:54:46 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-01 12:54:46 -0400 |
| commit | a3972a65b9b443a6085a6ac40b153442e190f382 (patch) | |
| tree | 8291258115a066f99c972005557208cb9dbd8899 /tools/validator | |
| parent | d142ae3408d3e26e12d7dfaa6a7ccbcf56042957 (diff) | |
| download | lingo2-archipelago-a3972a65b9b443a6085a6ac40b153442e190f382.tar.gz lingo2-archipelago-a3972a65b9b443a6085a6ac40b153442e190f382.tar.bz2 lingo2-archipelago-a3972a65b9b443a6085a6ac40b153442e190f382.zip | |
Added progressive doors
Diffstat (limited to 'tools/validator')
| -rw-r--r-- | tools/validator/human_processor.cpp | 28 | ||||
| -rw-r--r-- | tools/validator/structs.h | 8 | ||||
| -rw-r--r-- | tools/validator/validator.cpp | 16 |
3 files changed, 52 insertions, 0 deletions
| diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 0f63936..49e7578 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp | |||
| @@ -41,6 +41,7 @@ class HumanProcessor { | |||
| 41 | 41 | ||
| 42 | ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt); | 42 | ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt); |
| 43 | ProcessMaps(datadir_path); | 43 | ProcessMaps(datadir_path); |
| 44 | ProcessProgressivesFile(datadir_path / "progressives.txtpb"); | ||
| 44 | ProcessIdsFile(datadir_path / "ids.txtpb"); | 45 | ProcessIdsFile(datadir_path / "ids.txtpb"); |
| 45 | } | 46 | } |
| 46 | 47 | ||
| @@ -481,6 +482,33 @@ class HumanProcessor { | |||
| 481 | } | 482 | } |
| 482 | } | 483 | } |
| 483 | 484 | ||
| 485 | void ProcessProgressivesFile(std::filesystem::path path) { | ||
| 486 | if (!std::filesystem::exists(path)) { | ||
| 487 | return; | ||
| 488 | } | ||
| 489 | |||
| 490 | auto h_progs = ReadMessageFromFile<HumanProgressives>(path.string()); | ||
| 491 | |||
| 492 | for (const HumanProgressive& h_prog : h_progs.progressives()) { | ||
| 493 | ProcessProgressive(h_prog); | ||
| 494 | } | ||
| 495 | } | ||
| 496 | |||
| 497 | void ProcessProgressive(const HumanProgressive& h_prog) { | ||
| 498 | ProgressiveInfo& prog_info = info_.progressives[h_prog.name()]; | ||
| 499 | prog_info.definitions.push_back(h_prog); | ||
| 500 | |||
| 501 | for (const DoorIdentifier& di : h_prog.doors()) { | ||
| 502 | if (!di.has_map()) { | ||
| 503 | prog_info.malformed_doors.push_back(di); | ||
| 504 | continue; | ||
| 505 | } | ||
| 506 | |||
| 507 | DoorInfo& door_info = info_.doors[di]; | ||
| 508 | door_info.progressives_referenced_by.push_back(h_prog.name()); | ||
| 509 | } | ||
| 510 | } | ||
| 511 | |||
| 484 | void ProcessIdsFile(std::filesystem::path path) { | 512 | void ProcessIdsFile(std::filesystem::path path) { |
| 485 | // Ignore this for now. | 513 | // Ignore this for now. |
| 486 | } | 514 | } |
| diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 0ca96fe..717fccf 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h | |||
| @@ -45,6 +45,7 @@ struct DoorInfo { | |||
| 45 | std::vector<PanelIdentifier> panels_referenced_by; | 45 | std::vector<PanelIdentifier> panels_referenced_by; |
| 46 | std::vector<PaintingIdentifier> paintings_referenced_by; | 46 | std::vector<PaintingIdentifier> paintings_referenced_by; |
| 47 | std::vector<PortIdentifier> ports_referenced_by; | 47 | std::vector<PortIdentifier> ports_referenced_by; |
| 48 | std::vector<std::string> progressives_referenced_by; | ||
| 48 | 49 | ||
| 49 | MalformedIdentifiers malformed_identifiers; | 50 | MalformedIdentifiers malformed_identifiers; |
| 50 | }; | 51 | }; |
| @@ -102,6 +103,12 @@ struct PanelNameInfo { | |||
| 102 | std::vector<PanelIdentifier> panels_used_by; | 103 | std::vector<PanelIdentifier> panels_used_by; |
| 103 | }; | 104 | }; |
| 104 | 105 | ||
| 106 | struct ProgressiveInfo { | ||
| 107 | std::vector<HumanProgressive> definitions; | ||
| 108 | |||
| 109 | std::vector<DoorIdentifier> malformed_doors; | ||
| 110 | }; | ||
| 111 | |||
| 105 | struct CollectedInfo { | 112 | struct CollectedInfo { |
| 106 | std::map<std::string, MapInfo> maps; | 113 | std::map<std::string, MapInfo> maps; |
| 107 | std::map<RoomIdentifier, RoomInfo, RoomIdentifierLess> rooms; | 114 | std::map<RoomIdentifier, RoomInfo, RoomIdentifierLess> rooms; |
| @@ -114,6 +121,7 @@ struct CollectedInfo { | |||
| 114 | std::map<LetterIdentifier, LetterInfo> letters; | 121 | std::map<LetterIdentifier, LetterInfo> letters; |
| 115 | std::map<std::string, EndingInfo> endings; | 122 | std::map<std::string, EndingInfo> endings; |
| 116 | std::map<std::string, PanelNameInfo> panel_names; | 123 | std::map<std::string, PanelNameInfo> panel_names; |
| 124 | std::map<std::string, ProgressiveInfo> progressives; | ||
| 117 | }; | 125 | }; |
| 118 | 126 | ||
| 119 | } // namespace com::fourisland::lingo2_archipelago | 127 | } // namespace com::fourisland::lingo2_archipelago |
| diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index 9c66e09..fd004d7 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp | |||
| @@ -45,6 +45,9 @@ class Validator { | |||
| 45 | for (const auto& [panel_name, panel_info] : info_.panel_names) { | 45 | for (const auto& [panel_name, panel_info] : info_.panel_names) { |
| 46 | ValidatePanelName(panel_name, panel_info); | 46 | ValidatePanelName(panel_name, panel_info); |
| 47 | } | 47 | } |
| 48 | for (const auto& [prog_name, prog_info] : info_.progressives) { | ||
| 49 | ValidateProgressive(prog_name, prog_info); | ||
| 50 | } | ||
| 48 | } | 51 | } |
| 49 | 52 | ||
| 50 | private: | 53 | private: |
| @@ -164,6 +167,11 @@ class Validator { | |||
| 164 | std::cout << " CONNECTION " << connection.ShortDebugString() | 167 | std::cout << " CONNECTION " << connection.ShortDebugString() |
| 165 | << std::endl; | 168 | << std::endl; |
| 166 | } | 169 | } |
| 170 | |||
| 171 | for (const std::string& prog_name : | ||
| 172 | door_info.progressives_referenced_by) { | ||
| 173 | std::cout << " PROGRESSIVE " << prog_name << std::endl; | ||
| 174 | } | ||
| 167 | } else if (door_info.definitions.size() > 1) { | 175 | } else if (door_info.definitions.size() > 1) { |
| 168 | std::cout << "Door " << door_identifier.ShortDebugString() | 176 | std::cout << "Door " << door_identifier.ShortDebugString() |
| 169 | << " was defined multiple times." << std::endl; | 177 | << " was defined multiple times." << std::endl; |
| @@ -369,6 +377,14 @@ class Validator { | |||
| 369 | } | 377 | } |
| 370 | } | 378 | } |
| 371 | 379 | ||
| 380 | void ValidateProgressive(const std::string& prog_name, | ||
| 381 | const ProgressiveInfo& prog_info) const { | ||
| 382 | if (prog_info.definitions.size() > 1) { | ||
| 383 | std::cout << "Progressive \"" << prog_name | ||
| 384 | << "\" has multiple definitions." << std::endl; | ||
| 385 | } | ||
| 386 | } | ||
| 387 | |||
| 372 | const CollectedInfo& info_; | 388 | const CollectedInfo& info_; |
| 373 | }; | 389 | }; |
| 374 | 390 | ||
