From d77c73397b684faa55f0e95484ac89ca68bde1ad Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 20 Aug 2025 15:03:18 -0400 Subject: Added "endings" object type --- tools/validator/human_processor.cpp | 20 +++++++++++++++++++- tools/validator/structs.h | 5 +++++ tools/validator/validator.cpp | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) (limited to 'tools/validator') diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index af40980..5a7e78a 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp @@ -62,7 +62,7 @@ class HumanProcessor { } void ProcessMetadataFile(std::filesystem::path path, - const std::string& current_map_name) { + const std::string& current_map_name) { if (!std::filesystem::exists(path)) { return; } @@ -115,6 +115,10 @@ class HumanProcessor { for (const HumanKeyholder& h_keyholder : h_room.keyholders()) { ProcessKeyholder(h_keyholder, current_map_name, h_room.name()); } + + for (const HumanEnding& h_ending : h_room.endings()) { + ProcessEnding(h_ending, current_map_name, h_room.name()); + } } void ProcessPanel(const HumanPanel& h_panel, @@ -235,6 +239,20 @@ class HumanProcessor { map_info.game_nodes[h_keyholder.path()].uses++; } + void ProcessEnding(const HumanEnding& h_ending, + const std::string& current_map_name, + const std::string& current_room_name) { + EndingInfo& ending_info = info_.endings[h_ending.name()]; + + RoomIdentifier room_identifier; + room_identifier.set_map(current_map_name); + room_identifier.set_name(current_room_name); + ending_info.defined_in.push_back(room_identifier); + + MapInfo& map_info = info_.maps[current_map_name]; + map_info.game_nodes[h_ending.path()].uses++; + } + void ProcessDoorsFile(std::filesystem::path path, const std::string& current_map_name) { if (!std::filesystem::exists(path)) { diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 406dc0c..f7d9dc1 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h @@ -90,6 +90,10 @@ struct LetterInfo { std::vector defined_in; }; +struct EndingInfo { + std::vector defined_in; +}; + struct CollectedInfo { std::map maps; std::map rooms; @@ -100,6 +104,7 @@ struct CollectedInfo { std::map keyholders; std::map letters; + std::map endings; }; } // namespace com::fourisland::lingo2_archipelago diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index 6d01b7c..bc6b854 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp @@ -238,6 +238,18 @@ void ValidateLetter(const LetterIdentifier& letter_identifier, } } +void ValidateEnding(const std::string& ending_name, + const EndingInfo& ending_info) { + if (ending_info.defined_in.size() > 1) { + std::cout << "Ending " << ending_name + << " was defined in multiple places:" << std::endl; + + for (const RoomIdentifier& room_identifier : ending_info.defined_in) { + std::cout << " " << room_identifier.ShortDebugString() << std::endl; + } + } +} + } // namespace void ValidateCollectedInfo(const CollectedInfo& info) { @@ -265,6 +277,9 @@ void ValidateCollectedInfo(const CollectedInfo& info) { for (const auto& [letter_identifier, letter_info] : info.letters) { ValidateLetter(letter_identifier, letter_info); } + for (const auto& [ending_name, ending_info] : info.endings) { + ValidateEnding(ending_name, ending_info); + } } } // namespace com::fourisland::lingo2_archipelago -- cgit 1.4.1