summaryrefslogtreecommitdiff
path: root/src/Game/AI/Query/queryCompareGameDataTime.cpp
blob: 4da0e1648bd0c4ab3170bce57f201bb63491b5b1 (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
#include "Game/AI/Query/queryCompareGameDataTime.h"
#include <evfl/Query.h>
#include "KingSystem/GameData/gdtManager.h"

namespace uking::query {

CompareGameDataTime::CompareGameDataTime(const InitArg& arg) : ksys::act::ai::Query(arg) {}

CompareGameDataTime::~CompareGameDataTime() = default;

int CompareGameDataTime::doQuery() {
    int min_a{};
    int sec_a{};
    int milli_a{};
    int min_b{};
    int sec_b{};
    int milli_b{};

    auto* gdt = ksys::gdt::Manager::instance();
    if (!gdt)
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&min_a, mGameDataIntMinA))
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&sec_a, mGameDataIntSecA))
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&milli_a, mGameDataIntMilliA))
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&min_b, mGameDataIntMinB))
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&sec_b, mGameDataIntSecB))
        return 0;
    if (!gdt->getParamBypassPerm().get().getS32(&milli_b, mGameDataIntMilliB))
        return 0;

    const int time_a = (60 * 1000 * min_a) + (1000 * sec_a) + milli_a;
    const int time_b = (60 * 1000 * min_b) + (1000 * sec_b) + milli_b;

    if (time_a < time_b)
        return 0;
    if (time_a == time_b)
        return 1;
    if (time_a != time_b)
        return 2;
    SEAD_ASSERT(false);
    return -1;
}

void CompareGameDataTime::loadParams(const evfl::QueryArg& arg) {
    loadString(arg.param_accessor, "GameDataIntMinA");
    loadString(arg.param_accessor, "GameDataIntSecA");
    loadString(arg.param_accessor, "GameDataIntMilliA");
    loadString(arg.param_accessor, "GameDataIntMinB");
    loadString(arg.param_accessor, "GameDataIntSecB");
    loadString(arg.param_accessor, "GameDataIntMilliB");
}

void CompareGameDataTime::loadParams() {
    getDynamicParam(&mGameDataIntMinA, "GameDataIntMinA");
    getDynamicParam(&mGameDataIntSecA, "GameDataIntSecA");
    getDynamicParam(&mGameDataIntMilliA, "GameDataIntMilliA");
    getDynamicParam(&mGameDataIntMinB, "GameDataIntMinB");
    getDynamicParam(&mGameDataIntSecB, "GameDataIntSecB");
    getDynamicParam(&mGameDataIntMilliB, "GameDataIntMilliB");
}

}  // namespace uking::query