summaryrefslogtreecommitdiff
path: root/libs/JSystem/JAudio2/JAISe.cpp
blob: d35278eaa303c5e0b740a23c14560ac5994407cb (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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
//
// Generated By: dol2asm
// Translation Unit: JAISe
//

#include "JSystem/JAudio2/JAISe.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISeMgr.h"
#include "dolphin/types.h"

//
// Types:
//

//
// Forward References:
//

//
// External References:
//

//
// Declarations:
//

/* 8029F03C-8029F0F8 29997C 00BC+00 0/0 1/1 0/0 .text
 * __ct__5JAISeFP8JAISeMgrP27JAISoundStrategyMgr<5JAISe>Ul      */
JAISe::JAISe(JAISeMgr* param_0, JAISoundStrategyMgr<JAISe>* param_1, u32 param_2) : JSULink<JAISe>(this) {
    inner_.mSoundStrategyMgr = param_1;
    inner_.seMgr = param_0;
    inner_.mProperPriority = param_2;
}


/* 8029F0F8-8029F214 299A38 011C+00 1/1 0/0 0/0 .text            mixOut___5JAISeFRC14JASSoundParams
*/
void JAISe::mixOut_(JASSoundParams const& param_0) {
    inner_.track.setTempoRate(inner_.mTempoMgr.getTempo());
    JASSoundParams stackParams;
    params.mixOutAll(param_0, &stackParams, fader.getIntensity());
    if (inner_.field_0x278) {
        inner_.field_0x278->virtual4(this, stackParams);
    }
    if (audible_) {
        int maxChannels = audience_->getMaxChannels();
        for (int i = 0; i < maxChannels; i++) {
            audience_->mixChannelOut(stackParams, audible_, i);
        }
    } else {
        inner_.mSoundParams = stackParams;
    }
}

/* 8029F214-8029F250 299B54 003C+00 1/1 0/0 0/0 .text            stopTrack___5JAISeFv */
void JAISe::stopTrack_() {
    switch (inner_.track.getStatus()) {
    case 0:
        break;
    case 1:
        inner_.track.stopSeq();
        break;
    case 2:
        break;
    }
}

/* 8029F250-8029F304 299B90 00B4+00 1/1 0/0 0/0 .text startTrack___5JAISeFRC14JASSoundParams */
void JAISe::startTrack_(JASSoundParams const& param_0) {
    if (inner_.track.getStatus() == 2) {
        inner_.track.init();
    }
    if (audible_) {
        initTrack_JAISound_(&inner_.track);
    } else {
        params.mixOutAll(param_0, &inner_.mSoundParams, fader.getIntensity());
        inner_.track.setChannelMgrCount(1);
        inner_.track.assignExtBuffer(0, &inner_.mSoundParams);
    }
    inner_.field_0x26c = 1;
    inner_.track.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
    inner_.track.startSeq();
}

/* 8029F304-8029F4CC 299C44 01C8+00 0/0 1/1 0/0 .text
 * JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity */
void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, JASSoundParams const& param_1, JAISoundActivity param_2) {
    mixOut_(param_1);
    if (isStopping()) {
        stopTrack_();
    } else if (param_0) {
        if (status_.isPlaying()) {
            if (inner_.field_0x26c) {
                switch (inner_.track.getStatus()) {
                case 2:
                    if (status_.field_0x1.flags.flag1) {
                        startTrack_(param_1);
                    } else {
                        stop_JAISound_();
                    }
                    break;
                case 1:
                    inner_.track.pause(status_.isPaused() || param_2.field_0x0.flags.flag2);
                    inner_.track.mute(status_.isMute() || param_2.field_0x0.flags.flag1);
                }
            } else {
                startTrack_(param_1);
            }
        }
    } else if (status_.field_0x1.flags.flag1) {
        if (status_.field_0x1.flags.flag3) {
            inner_.track.pause(true);
        } else {
            stopTrack_();
        }
    } else {
        stopTrack_();
        stop_JAISound_();
    }
}

/* 8029F4CC-8029F5C8 299E0C 00FC+00 0/0 1/1 0/0 .text            JAISeCategoryMgr_calc___5JAISeFv */
void JAISe::JAISeCategoryMgr_calc_() {
    prepare_();
    if (calc_JAISound_()) {
        inner_.mTempoMgr.calc();
        if (inner_.field_0x278) {
            inner_.field_0x278->calc(this);
        }
    }
    if (isStopping() || mPriority == -1) {
        inner_.mPriority = -1;
    } else {
        inner_.mPriority = inner_.mProperPriority + mPriority;
    }
}

/* 8029F5C8-8029F650 299F08 0088+00 2/1 0/0 0/0 .text            JAISound_tryDie___5JAISeFv */
bool JAISe::JAISound_tryDie_() {
    switch (inner_.track.getStatus()) {
    case 0:
    case 2:
        if (inner_.field_0x278) {
            inner_.mSoundStrategyMgr->virtual4(inner_.field_0x278);
            inner_.field_0x278 = NULL;
        }
        die_JAISound_();
        return true;
    case 1:
        break;
    }
    return false;
}

/* 8029F650-8029F6D8 299F90 0088+00 0/0 1/1 0/0 .text
 * JAISeMgr_startID___5JAISeF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISe::JAISeMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2) {
    start_JAISound_(param_0, param_1, param_2);
    inner_.field_0x26c = 0;
    if (inner_.mSoundStrategyMgr) {
        inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(param_0);
    } else {
        inner_.field_0x278 = NULL;
    }
}

/* 8029F6D8-8029F6E0 29A018 0008+00 2/1 0/0 0/0 .text            getNumChild__5JAISeCFv */
s32 JAISe::getNumChild() const {
    return 0;
}

/* 8029F6E0-8029F6E8 29A020 0008+00 2/1 0/0 0/0 .text            getChild__5JAISeFi */
JAISoundChild* JAISe::getChild(int param_0) {
    return NULL;
}

/* 8029F6E8-8029F6EC 29A028 0004+00 2/1 0/0 0/0 .text            releaseChild__5JAISeFi */
void JAISe::releaseChild(int param_0) {
    /* empty function */
}

/* 8029F6EC-8029F78C 29A02C 00A0+00 1/1 0/0 0/0 .text            prepare_getSeqData___5JAISeFv */
bool JAISe::prepare_getSeqData_() {
    switch (inner_.seMgr->getSeqDataMgr()->getSeqData(soundID, &inner_.mSeqData)) {
    case 0:
        status_.state.unk = 2;
        return false;
    case 1:
        increasePrepareCount_JAISound_();
        return false;
    case 2:
        return true;
    }
    return false;
}

/* 8029F78C-8029F84C 29A0CC 00C0+00 1/1 0/0 0/0 .text            prepare___5JAISeFv */
void JAISe::prepare_() {
    switch (status_.state.unk) {
    case 6:
        break;
    case 2:
        stop_JAISound_();
        break;
    case 0:
        if (prepare_getSeqData_()) {
            status_.state.unk = 5;
        }
        break;
    case 1:
        if (prepare_getSeqData_()) {
            status_.state.unk = 3;
        }
        break;
    case 4:
        status_.state.unk = 5;
        break;
    case 3:
    case 5:
        break;
    }
}

/* 8029F84C-8029F854 29A18C 0008+00 2/1 0/0 0/0 .text            getTrack__5JAISeFv */
JASTrack* JAISe::getTrack() {
    return &inner_.track;
}

/* 8029F854-8029F864 29A194 0010+00 2/1 0/0 0/0 .text            getChildTrack__5JAISeFi */
JASTrack* JAISe::getChildTrack(int param_0) {
    return inner_.track.getChild(param_0);
}

/* 8029F864-8029F868 29A1A4 0004+00 2/1 0/0 0/0 .text            asSe__5JAISeFv */
JAISe* JAISe::asSe() {
    return this;
}

/* 8029F868-8029F870 29A1A8 0008+00 2/1 0/0 0/0 .text            getTempoMgr__5JAISeFv */
JAITempoMgr* JAISe::getTempoMgr() {
    return &inner_.mTempoMgr;
}