1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-17 17:46:39 +00:00

Lua journal read access post-review std::distance

This commit is contained in:
trav5 2025-07-07 20:15:18 +02:00 committed by Evil Eye
parent 7f3bc4884e
commit 596ee3e8fa

View file

@ -205,20 +205,18 @@ namespace MWLua
}; };
topicEntriesBindingsClass[sol::meta_function::index] topicEntriesBindingsClass[sol::meta_function::index]
= [journal](const MWLua::TopicEntries& topicEntries, size_t index) -> const MWDialogue::Entry* { = [journal](const MWLua::TopicEntries& topicEntries, size_t index) -> const MWDialogue::Entry* {
if (index == 0) const MWDialogue::Topic& topic = getTopicDataOrThrow(topicEntries.mTopicId, journal);
const size_t numberOfTopicEntries = std::distance(topic.begin(), topic.end());
if (index == 0 || index > numberOfTopicEntries)
{ {
return nullptr; return nullptr;
} }
index = LuaUtil::fromLuaIndex(index); index = LuaUtil::fromLuaIndex(index);
const MWDialogue::Topic& topic = getTopicDataOrThrow(topicEntries.mTopicId, journal);
MWDialogue::Topic::TEntryIter iter{ topic.begin() }; MWDialogue::Topic::TEntryIter iter{ topic.begin() };
while (index > 0 && iter != topic.end()) std::advance(iter, index);
{ return &(*iter);
++iter;
--index;
}
return (iter != topic.end()) ? &(*iter) : nullptr;
}; };
topicEntriesBindingsClass[sol::meta_function::ipairs] = lua["ipairsForArray"].template get<sol::function>(); topicEntriesBindingsClass[sol::meta_function::ipairs] = lua["ipairsForArray"].template get<sol::function>();
topicEntriesBindingsClass[sol::meta_function::pairs] = lua["ipairsForArray"].template get<sol::function>(); topicEntriesBindingsClass[sol::meta_function::pairs] = lua["ipairsForArray"].template get<sol::function>();
@ -249,19 +247,16 @@ namespace MWLua
= [journal](const MWLua::JournalEntries&) { return std::distance(journal->begin(), journal->end()); }; = [journal](const MWLua::JournalEntries&) { return std::distance(journal->begin(), journal->end()); };
journalEntriesBindingsClass[sol::meta_function::index] journalEntriesBindingsClass[sol::meta_function::index]
= [journal](const MWLua::JournalEntries&, size_t index) -> const MWDialogue::StampedJournalEntry* { = [journal](const MWLua::JournalEntries&, size_t index) -> const MWDialogue::StampedJournalEntry* {
if (index == 0) const size_t numberOfEntries = std::distance(journal->begin(), journal->end());
if (index == 0 || index > numberOfEntries)
{ {
return nullptr; return nullptr;
} }
index = LuaUtil::fromLuaIndex(index); index = LuaUtil::fromLuaIndex(index);
MWBase::Journal::TEntryIter iter{ journal->begin() }; MWBase::Journal::TEntryIter iter{ journal->begin() };
while (index > 0 && iter != journal->end()) std::advance(iter, index);
{ return &(*iter);
++iter;
--index;
}
return (iter != journal->end()) ? &(*iter) : nullptr;
}; };
journalEntriesBindingsClass[sol::meta_function::ipairs] = lua["ipairsForArray"].template get<sol::function>(); journalEntriesBindingsClass[sol::meta_function::ipairs] = lua["ipairsForArray"].template get<sol::function>();
journalEntriesBindingsClass[sol::meta_function::pairs] = lua["ipairsForArray"].template get<sol::function>(); journalEntriesBindingsClass[sol::meta_function::pairs] = lua["ipairsForArray"].template get<sol::function>();
@ -363,12 +358,6 @@ namespace MWLua
quest["id"] = sol::readonly_property([](const Quest& q) -> std::string { return q.mQuestId.serializeText(); }); quest["id"] = sol::readonly_property([](const Quest& q) -> std::string { return q.mQuestId.serializeText(); });
quest["started"] = sol::readonly_property( quest["started"] = sol::readonly_property(
[journal](const Quest& q) { return journal->getQuestOrNull(q.mQuestId) != nullptr; }); [journal](const Quest& q) { return journal->getQuestOrNull(q.mQuestId) != nullptr; });
quest["name"] = sol::readonly_property([journal](const Quest& q) -> std::string_view {
const MWDialogue::Quest* quest = journal->getQuestOrNull(q.mQuestId);
if (quest == nullptr)
return "";
return quest->getName();
});
quest["finished"] = sol::property( quest["finished"] = sol::property(
[journal](const Quest& q) -> bool { [journal](const Quest& q) -> bool {
const MWDialogue::Quest* quest = journal->getQuestOrNull(q.mQuestId); const MWDialogue::Quest* quest = journal->getQuestOrNull(q.mQuestId);