summaryrefslogtreecommitdiff
path: root/libs/Z2AudioLib/Z2SoundHandles.cpp
blob: c475fabdc54088f74e16e6bfeb7c1e430ef3cc36 (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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//
// Generated By: dol2asm
// Translation Unit: Z2SoundHandles
//

#include "Z2AudioLib/Z2SoundHandles.h"
#include "dol2asm.h"
#include "dolphin/types.h"

//
// Types:
//

template <typename A0>
struct JASMemPool {};
/* JASMemPool<Z2SoundHandlePool> */
struct JASMemPool__template4 {
    /* 802AB200 */ void func_802AB200(void* _this);
};

struct JASGenericMemPool {
    /* 80290848 */ JASGenericMemPool();
    /* 80290860 */ ~JASGenericMemPool();
    /* 80290948 */ void alloc(u32);
    /* 80290994 */ void free(void*, u32);
};

//
// Forward References:
//

extern "C" void __ct__14Z2SoundHandlesFv();
extern "C" void __dt__14Z2SoundHandlesFv();
extern "C" void initHandlesPool__14Z2SoundHandlesFUc();
extern "C" void deleteHandlesPool__14Z2SoundHandlesFv();
extern "C" void func_802AB200(void* _this);
extern "C" void getHandleSoundID__14Z2SoundHandlesF10JAISoundID();
extern "C" void getHandleUserData__14Z2SoundHandlesFUl();
extern "C" void getFreeHandle__14Z2SoundHandlesFv();
extern "C" void getLowPrioSound__14Z2SoundHandlesF10JAISoundID();
extern "C" void stopAllSounds__14Z2SoundHandlesFUl();
extern "C" void isActive__14Z2SoundHandlesCFv();
extern "C" void func_802AB538();

//
// External References:
//

extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void releaseSound__14JAISoundHandleFv();
extern "C" void stop__8JAISoundFUl();
extern "C" void __dl__FPv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_26();
extern "C" void _savegpr_28();
extern "C" void _restgpr_26();
extern "C" void _restgpr_28();
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451348[8];

//
// Declarations:
//

// inline JAISoundID::JAISoundID(u32 pId) : mId(pId) {}

inline JAISoundID JAISound::getID() const {
    return JAISoundID((u32)soundID);
}

Z2SoundHandles::Z2SoundHandles() {
    mNumHandles = 0;
}

Z2SoundHandles::~Z2SoundHandles() {
    deleteHandlesPool();
}

void Z2SoundHandles::initHandlesPool(u8 pNumHandles) {
    mNumHandles = pNumHandles;
}

/* ############################################################################################## */
/* 804341B8-804341C4 060ED8 000C+00 3/3 0/0 0/0 .bss             @632 */
static u8 lit_632[12];

/* 804341C4-804341D8 060EE4 0010+04 3/3 1/1 0/0 .bss
 * memPool_$localstatic3$getMemPool___39JASPoolAllocObject<17Z2SoundHandlePool>Fv */
extern u8 data_804341C4[16 + 4 /* padding */];
u8 data_804341C4[16 + 4 /* padding */];

/* 802AB120-802AB200 2A5A60 00E0+00 1/1 1/1 0/0 .text deleteHandlesPool__14Z2SoundHandlesFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SoundHandles::deleteHandlesPool() {
    nofralloc
#include "asm/Z2AudioLib/Z2SoundHandles/deleteHandlesPool__14Z2SoundHandlesFv.s"
}
#pragma pop

/* 802AB200-802AB254 2A5B40 0054+00 3/3 1/1 0/0 .text __dt__31JASMemPool<17Z2SoundHandlePool>Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void func_802AB200(void* _this) {
    nofralloc
#include "asm/Z2AudioLib/Z2SoundHandles/func_802AB200.s"
}
#pragma pop

JAISoundHandle* Z2SoundHandles::getHandleSoundID(JAISoundID pSoundId) {
    JSULink<Z2SoundHandlePool>* link;
    for (link = getFirst(); link != NULL; link = link->getNext()) {
        JAISoundHandle* handle = link->getObject();
        if (handle->isSoundAttached()) {
            if ((*handle)->getID() == pSoundId) {
                return handle;
            }
        }
    }

    return NULL;
}

JAISoundHandle* Z2SoundHandles::getHandleUserData(u32 pUserData) {
    JSULink<Z2SoundHandlePool>* link;
    for (link = getFirst(); link != NULL; link = link->getNext()) {
        JAISoundHandle* handle = link->getObject();
        if (handle->isSoundAttached()) {
            if ((*handle)->getUserData() == pUserData) {
                return handle;
            }
        }
    }

    return NULL;
}

/* 802AB2D8-802AB3D0 2A5C18 00F8+00 0/0 3/3 0/0 .text            getFreeHandle__14Z2SoundHandlesFv
 */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SoundHandles::getFreeHandle() {
    nofralloc
#include "asm/Z2AudioLib/Z2SoundHandles/getFreeHandle__14Z2SoundHandlesFv.s"
}
#pragma pop

/* 802AB3D0-802AB4A0 2A5D10 00D0+00 0/0 2/2 0/0 .text
 * getLowPrioSound__14Z2SoundHandlesF10JAISoundID               */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SoundHandles::getLowPrioSound(JAISoundID param_0) {
    nofralloc
#include "asm/Z2AudioLib/Z2SoundHandles/getLowPrioSound__14Z2SoundHandlesF10JAISoundID.s"
}
#pragma pop

void Z2SoundHandles::stopAllSounds(u32 fadeout) {
    JSULink<Z2SoundHandlePool>* link;
    for (link = getFirst(); link != NULL; link = link->getNext()) {
        JAISoundHandle* handle = link->getObject();
        //! @meme: explicit operator bool call required to match and be similar
        //!        to CHN_debug; could more concisely write handle->isSoundAttached
        //!        (for some reason cast-to-bool doesn't work?)
        if (handle && handle->operator bool()) {
            (*handle)->stop(fadeout);
        }
    }
}

bool Z2SoundHandles::isActive() const {
    JSULink<Z2SoundHandlePool>* link;
    for (link = getFirst(); link != NULL; link = link->getNext()) {
        if (link->getObject()->isSoundAttached()) {
            return true;
        }
    }

    return false;
}

/* 802AB538-802AB64C 2A5E78 0114+00 0/0 1/1 0/0 .text
 * setPos__14Z2SoundHandlesFRCQ29JGeometry8TVec3<f>             */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SoundHandles::setPos(JGeometry::TVec3<f32> const& param_0) {
    nofralloc
#include "asm/Z2AudioLib/Z2SoundHandles/func_802AB538.s"
}
#pragma pop