| 1 | #include "Npc/AchievementInfoReader.h" |
| 2 | |
| 3 | #include "Library/Base/StringUtil.h" |
| 4 | #include "Library/Resource/ResourceUtil.h" |
| 5 | #include "Library/Yaml/ByamlIter.h" |
| 6 | |
| 7 | AchievementInfoReader::AchievementInfoReader() = default; |
| 8 | |
| 9 | void AchievementInfoReader::init() { |
| 10 | al::Resource* achievementInfoResource = |
| 11 | al::findOrCreateResource("SystemData/AchievementInfo" , nullptr); |
| 12 | al::StringTmp<256> bymlName = {"%s.byml" , "AchievementInfo" }; |
| 13 | |
| 14 | if (!achievementInfoResource->isExistFile(filePath: bymlName.cstr())) |
| 15 | return; |
| 16 | |
| 17 | al::ByamlIter achievementInfo = achievementInfoResource->getByml(filePath: "AchievementInfo" ); |
| 18 | al::ByamlIter achievementInfoArray; |
| 19 | if (!achievementInfo.tryGetIterByKey(iter: &achievementInfoArray, key: "AchievementInfoArray" )) |
| 20 | return; |
| 21 | |
| 22 | s32 size = achievementInfoArray.getSize(); |
| 23 | mAchievements.allocBuffer(ptrNumMax: size, heap: nullptr); |
| 24 | |
| 25 | for (s32 i = 0; i < size; i++) { |
| 26 | al::ByamlIter iter; |
| 27 | if (achievementInfoArray.tryGetIterByIndex(iter: &iter, index: i)) { |
| 28 | const char* name = nullptr; |
| 29 | iter.tryGetStringByKey(string: &name, key: "Name" ); |
| 30 | const char* note = nullptr; |
| 31 | iter.tryGetStringByKey(string: ¬e, key: "Note" ); |
| 32 | s32 num = 1; |
| 33 | iter.tryGetIntByKey(val: &num, key: "Num" ); |
| 34 | s32 level = -1; |
| 35 | iter.tryGetIntByKey(val: &level, key: "Level" ); |
| 36 | |
| 37 | mAchievements.pushBack(ptr: new AchievementInfo(name, num, level, note)); |
| 38 | } |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | s32 AchievementInfoReader::tryFindIndexByName(const char* name) const { |
| 43 | for (s32 i = 0; i < mAchievements.size(); i++) |
| 44 | if (al::isEqualString(str1: name, str2: mAchievements[i]->name)) |
| 45 | return i; |
| 46 | return -1; |
| 47 | } |
| 48 | |