blob: 201efafcfbf3b143c7e132466a8627d5ef48e1ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#include "KingSystem/Ecosystem/ecoLevelSensor.h"
#include "KingSystem/GameData/gdtManager.h"
#include "KingSystem/Resource/resLoadRequest.h"
#include "KingSystem/Utils/Byaml/Byaml.h"
namespace ksys::eco {
LevelSensor::LevelSensor() = default;
LevelSensor::~LevelSensor() {
mResHandle.requestUnload2();
if (mRootIter)
delete mRootIter;
}
void LevelSensor::init(sead::Heap* heap) {
res::LoadRequest req;
req.mRequester = "LevelSensor";
mResHandle.load("Ecosystem/LevelSensor.byml", &req);
auto* res = sead::DynamicCast<sead::DirectResource>(mResHandle.getResource());
mRootIter = new (heap) al::ByamlIter(res->getRawData());
}
void LevelSensor::calculatePoints() {
if (mDefaultPoints >= 0) {
mPoints = mDefaultPoints;
} else {
al::ByamlIter flag;
if (!mRootIter->tryGetIterByKey(&flag, "flag")) {
return;
}
float point_sum = 0;
for (int index = 0; index < flag.getSize(); index++) {
al::ByamlIter iter_enemy;
if (!flag.tryGetIterByIndex(&iter_enemy, index)) {
return;
}
const char* name;
if (!iter_enemy.tryGetStringByKey(&name, "name")) {
return;
}
s32 kill_count = 0;
if (!gdt::Manager::instance()->getParam().get().getS32(&kill_count, name)) {
bool unique_kill = false;
if (gdt::Manager::instance()->getParam().get().getBool(&unique_kill, name)) {
if (unique_kill) {
kill_count = 1;
}
}
}
if (kill_count > 0) {
f32 point;
if (!iter_enemy.tryGetFloatByKey(&point, "point")) {
return;
}
point_sum += point * kill_count;
}
}
mPoints = point_sum;
}
al::ByamlIter setting_iter;
if (mRootIter->tryGetIterByKey(&setting_iter, "setting")) {
f32 Level2WeaponPower;
f32 Level2EnemyPower;
if (setting_iter.tryGetFloatByKey(&Level2WeaponPower, "Level2WeaponPower") &&
setting_iter.tryGetFloatByKey(&Level2EnemyPower, "Level2EnemyPower")) {
mWeaponPoints = mPoints * Level2WeaponPower;
mEnemyPoints = mPoints * Level2EnemyPower;
}
}
}
} // namespace ksys::eco
|