Skip to content

Commit

Permalink
feat(CutsceneLibrary): add getter for the nested message in blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
lmichaelis committed Nov 1, 2024
1 parent adf9cb5 commit aa46ddb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
2 changes: 2 additions & 0 deletions include/zenkit/CutsceneLibrary.hh
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ namespace zenkit {
/// one CutsceneMessage per message block.
std::variant<std::shared_ptr<CutsceneAtomicBlock>, std::shared_ptr<CutsceneBlock>> block;

[[nodiscard]] std::shared_ptr<ConversationMessageEvent> get_message() const;

ZKAPI void load(ReadArchive& r, GameVersion version) override;
ZKAPI void save(WriteArchive& w, GameVersion version) const override;
};
Expand Down
12 changes: 12 additions & 0 deletions src/CutsceneLibrary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ namespace zenkit {
w.write_object(this->message, version);
}

std::shared_ptr<ConversationMessageEvent> CutsceneBlock::get_message() const {
auto const* cur = this;
while (std::holds_alternative<std::shared_ptr<CutsceneBlock>>(cur->block)) {
cur = std::get<std::shared_ptr<CutsceneBlock>>(cur->block).get();
if (cur == nullptr) {
return nullptr;
}
}

return std::get<std::shared_ptr<CutsceneAtomicBlock>>(cur->block)->message;
}

void CutsceneBlock::load(ReadArchive& r, GameVersion version) {
this->name = r.read_string(); // blockName

Expand Down
21 changes: 12 additions & 9 deletions tests/TestCutsceneLibrary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,20 @@ static void verify_g1(zenkit::CutsceneLibrary const& msgs) {
CHECK_NE(msg200, nullptr);
CHECK_EQ(msg_none, nullptr);

CHECK_EQ(msg20->atomic->message->type, 0);
CHECK_EQ(msg20->atomic->message->text, "Du redest nicht viel, was?");
CHECK_EQ(msg20->atomic->message->name, "DIA_ARTO_PERM_15_00.WAV");
auto message = msg20->get_message();
CHECK_EQ(message->type, 0);
CHECK_EQ(message->text, "Du redest nicht viel, was?");
CHECK_EQ(message->name, "DIA_ARTO_PERM_15_00.WAV");

CHECK_EQ(msg100->atomic->message->type, 0);
CHECK_EQ(msg100->atomic->message->text, "Ich kann dich auf viele Arten entlohnen.");
CHECK_EQ(msg100->atomic->message->name, "DIA_BAALKAGAN_WASDRIN_13_01.WAV");
message = msg100->get_message();
CHECK_EQ(message->type, 0);
CHECK_EQ(message->text, "Ich kann dich auf viele Arten entlohnen.");
CHECK_EQ(message->name, "DIA_BAALKAGAN_WASDRIN_13_01.WAV");

CHECK_EQ(msg200->atomic->message->type, 0);
CHECK_EQ(msg200->atomic->message->text, "Stimmt genau.");
CHECK_EQ(msg200->atomic->message->name, "DIA_BAALTARAN_INTOCASTLE_EXACTLY_15_00.WAV");
message = msg200->get_message();
CHECK_EQ(message->type, 0);
CHECK_EQ(message->text, "Stimmt genau.");
CHECK_EQ(message->name, "DIA_BAALTARAN_INTOCASTLE_EXACTLY_15_00.WAV");
}

TEST_SUITE("CutsceneLibrary") {
Expand Down

0 comments on commit aa46ddb

Please sign in to comment.