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
7AchievementInfoReader::AchievementInfoReader() = default;
8
9void 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: &note, 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
42s32 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