summaryrefslogtreecommitdiff
path: root/src/Game/Actor/Action/actionCurseRRematchCount.cpp
blob: a1d70ca143f28aed246c8e853206bff2391ee6e2 (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
#include "Game/Actor/Action/actionCurseRRematchCount.h"
#include "Game/AOC/aocChampionBalladManager.h"
#include "KingSystem/GameData/gdtManager.h"

namespace uking::action {

CurseRRematchCount::CurseRRematchCount(const InitArg& arg) : ksys::act::ai::Action(arg) {}

CurseRRematchCount::~CurseRRematchCount() = default;

bool CurseRRematchCount::init_(sead::Heap* heap) {
    return ksys::act::ai::Action::init_(heap);
}

void CurseRRematchCount::loadParams_() {
    getDynamicParam(&mRematchCount_d, "RematchCount");
    getDynamicParam(&mCurseRType_d, "CurseRType");
    getDynamicParam(&mGameDataStringCounterName_d, "GameDataStringCounterName");
}

bool CurseRRematchCount::oneShot_() {
    auto* manager = aoc::ChampionBalladManager::instance();
    if (!manager)
        return false;

    auto blight = aoc::BlightType(*mCurseRType_d);
    if (blight > aoc::BlightType::Water)
        return false;

    if (*mRematchCount_d == 0)
        manager->incrementBlightRematchCount(blight);
    else if (*mRematchCount_d == 1)
        manager->setBlightRematchCount(0, blight);
    else
        return false;

    if (mGameDataStringCounterName_d.isEmpty())
        return true;

    auto* game_data_manager = ksys::gdt::Manager::instance();
    if (game_data_manager) {
        s8 rematchCount = manager->getBlightRematchCount(blight);
        game_data_manager->setS32(rematchCount, mGameDataStringCounterName_d);
        return true;
    }
    return false;
}

}  // namespace uking::action