summaryrefslogtreecommitdiff
path: root/src/f_op/f_op_overlap_mng.cpp
blob: 844b18a16ac87c6aa221f20b5d47e215ca115502 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
 * f_op_overlap_mng.cpp
 * Overlap Process Manager
 */

#include "SSystem/SComponent/c_request.h"
#include "m_Do/m_Do_controller_pad.h"
#include "f_op/f_op_overlap_mng.h"
#include "f_op/f_op_overlap_req.h"
#include "f_op/f_op_scene_mng.h"
#include "f_op/f_op_scene_pause.h"

// making it not an array put it in .bss
static overlap_request_class* l_fopOvlpM_overlap[1] = {NULL};

int fopOvlpM_SceneIsStop() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        fpc_ProcID scene_id = l_fopOvlpM_overlap[0]->overlap_task->scene_id;
        scene_class* cls = (scene_class*)fpcM_SearchByID(scene_id);
        return fopScnM_PauseEnable(cls);
    }

    return 0;
}

int fopOvlpM_SceneIsStart() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        fpc_ProcID scene_id = l_fopOvlpM_overlap[0]->overlap_task->scene_id;
        scene_class* cls = (scene_class*)fpcM_SearchByID(scene_id);
        return fopScnM_PauseDisable(cls);
    }

    return 0;
}

int fopOvlpM_IsOutReq(overlap_task_class* i_overlap_task) {
    return i_overlap_task->request.flag2 == 2;
}

void fopOvlpM_Done(overlap_task_class* i_overlap_task) {
    cReq_Done(&i_overlap_task->request);
}

void fopOvlpM_ToldAboutID(fpc_ProcID i_sceneId) {
    if (l_fopOvlpM_overlap[0] != NULL) {
        l_fopOvlpM_overlap[0]->overlap_task->scene_id = i_sceneId;
    }
}

int fopOvlpM_IsPeek() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        return l_fopOvlpM_overlap[0]->field_0x8;
    }
    return FALSE;
}

int fopOvlpM_IsDone() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        return cReq_Is_Done(&l_fopOvlpM_overlap[0]->base);
    }
    return FALSE;
}

int fopOvlpM_IsDoingReq() {
    if (l_fopOvlpM_overlap[0] != NULL && l_fopOvlpM_overlap[0]->field_0x4 == 1) {
        return 1;
    }
    return FALSE;
}

int fopOvlpM_ClearOfReq() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        return fopOvlpReq_OverlapClr(l_fopOvlpM_overlap[0]);
    }
    return FALSE;
}

static overlap_request_class l_fopOvlpM_Request;

overlap_request_class* fopOvlpM_Request(s16 i_procname, u16 i_peektime) {
    if (l_fopOvlpM_overlap[0] == NULL) {
        l_fopOvlpM_overlap[0] = fopOvlpReq_Request(&l_fopOvlpM_Request, i_procname, i_peektime);
        return l_fopOvlpM_overlap[0];
    }

    return NULL;
}

void fopOvlpM_Management() {
    if (l_fopOvlpM_overlap[0] != NULL) {
        switch (fopOvlpReq_Handler(l_fopOvlpM_overlap[0])) {
        case cPhs_UNK3_e:
        case cPhs_COMPLEATE_e:
        case cPhs_ERROR_e:
            l_fopOvlpM_overlap[0] = NULL;
            break;
        }
    }
}

int fopOvlpM_Cancel() {
    if (l_fopOvlpM_overlap[0] == NULL) {
        return 1;
    }

    if (fopOvlpReq_Cancel(l_fopOvlpM_overlap[0]) == true) {
        l_fopOvlpM_overlap[0] = NULL;
#if DEBUG
        BOOL state = mDoCPd_c::isConnect(PAD_3);
        if (state) {
            JUT_WARN(336, "%s", "fopOvlpM_Cancel SUCCESSED");
        }
#endif
        return 1;
    }

    return 0;
}

void fopOvlpM_Init() {}