summaryrefslogtreecommitdiff
path: root/src/JSystem/JAudio/JAIDummyObject.cpp
blob: 5512f4f3f52fb63a3d259385e201bea0e8d520e4 (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
//
// Generated by dtk
// Translation Unit: JAIDummyObject.cpp
//

#include "JSystem/JSystem.h" // IWYU pragma: keep

#include "JSystem/JAudio/JAIDummyObject.h"
#include "JSystem/JAudio/JAIBasic.h"
#include "JSystem/JAudio/JAIGlobalParameter.h"
#include "JSystem/JAudio/JAISound.h"
#include "JSystem/JKernel/JKRSolidHeap.h"

JAInter::DummyVec* JAInter::DummyObjectMgr::deadObjectFreePointer;
JAInter::DummyVec* JAInter::DummyObjectMgr::deadObjectUsedPointer;
JAInter::DummyVec* JAInter::DummyObjectMgr::deadObjectObject;

/* 802919A0-80291B40       .text init__Q27JAInter14DummyObjectMgrFv */
void JAInter::DummyObjectMgr::init() {
    deadObjectObject = new (JAIBasic::getCurrentJAIHeap(), 0x20) DummyVec[JAIGlobalParameter::getParamDummyObjectMax()];
    JUT_ASSERT_MSG(37, deadObjectObject, "JAIDummyObjectMgr::init Cannot Alloc Heap!!\n");
    deadObjectFreePointer = deadObjectObject;
    deadObjectUsedPointer = NULL;
    deadObjectObject[0].field_0x0 = NULL;
    deadObjectObject[0].field_0x4 = deadObjectObject + 1;
    int i;
    for (i = 1; i < JAIGlobalParameter::getParamDummyObjectMax() - 1; i++) {
        deadObjectObject[i].field_0x0 = deadObjectObject + (i - 1);
        deadObjectObject[i].field_0x4 = deadObjectObject + (i + 1);
    }
    deadObjectObject[i].field_0x0 = deadObjectObject + (i - 1);
    deadObjectObject[i].field_0x4 = NULL;
}

/* 80291B40-80291BAC       .text getPointer__Q27JAInter14DummyObjectMgrFUlb */
JAInter::DummyVec* JAInter::DummyObjectMgr::getPointer(u32 param_1, bool param_2) {
    DummyVec** r5 = &deadObjectFreePointer;
    DummyVec** r6 = &deadObjectUsedPointer;
    DummyVec* r7;
    if (deadObjectFreePointer) {
        r7 = *r5;
        *r5 = r7->field_0x4;
        if (*r6) {
            r7->field_0x4 = *r6;
            (*r6)->field_0x0 = r7;
        } else {
            r7->field_0x4 = NULL;
        }
        r7->field_0x0 = NULL;
        *r6 = r7;
        r7->field_0x18 = param_1;
        r7->field_0x1c = param_2;
        r7->field_0x8 = NULL;
    } else {
        r7 = NULL;
    }
    return r7;
}

/* 80291BAC-80291C20       .text releasePointer__Q27JAInter14DummyObjectMgrFPQ27JAInter8DummyVec */
void JAInter::DummyObjectMgr::releasePointer(DummyVec* param_1) {
    DummyVec** r5 = &deadObjectFreePointer;
    DummyVec** r4 = &deadObjectUsedPointer;
    if (deadObjectUsedPointer != param_1) {
        param_1->field_0x0->field_0x4 = param_1->field_0x4;
        if (param_1->field_0x4) {
            param_1->field_0x4->field_0x0 = param_1->field_0x0;
        }
    } else {
        *r4 = param_1->field_0x4;
        if (param_1->field_0x4) {
            param_1->field_0x4->field_0x0 = NULL;
        }
    }
    param_1->field_0x4 = *r5;
    if (param_1->field_0x4) {
        param_1->field_0x4->field_0x0 = param_1;
    }
    *r5 = param_1;
}

/* 80291C20-80291CCC       .text check__Q27JAInter14DummyObjectMgrFv */
void JAInter::DummyObjectMgr::check() {
    DummyVec* r31 = deadObjectUsedPointer;
    while (r31) {
        DummyVec* r30 = r31->field_0x4;
        r31->field_0x18--;
        if (r31->field_0x18 == 0 || (!r31->field_0x1c && r31->field_0x8 == NULL)) {
            if (r31->field_0x1c == true) {
                JAIBasic::getInterface()->stopAllSound(&r31->field_0xc);
            } else if (r31->field_0x8) {
                r31->field_0x8->stop(0);
            }
            releasePointer(r31);
        }
        r31 = r30;
    }
}