Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
JAISound.h
Go to the documentation of this file.
1#ifndef JAISOUND_H
2#define JAISOUND_H
3
7#include "global.h"
8
9class JAISound;
10
16public:
19
20 bool isSoundAttached() const { return sound_ != NULL; }
21
23 JUT_ASSERT(41, sound_ != NULL);
24 return sound_;
25 }
26
28 JUT_ASSERT(58, sound_ != NULL);
29 return sound_;
30 }
31
32 operator bool() const { return isSoundAttached(); }
33
34 void releaseSound();
35
37};
38
44public:
45 operator u32() const { return id_.composite_; }
46
47 JAISoundID(u32 id) { id_.composite_ = id; };
48
49 JAISoundID(const JAISoundID& other) { id_.composite_ = other.id_.composite_; };
50
52
53 bool isAnonymous() const { return id_.composite_ == -1; }
54 void setAnonymous() { id_.composite_ = -1; }
55
56 union {
58 struct {
59 union {
61 struct {
68 } id_;
69};
70
71class JASTrack;
72
80
81 void init() {
82 field_0x0.value = 0;
83 field_0x1.value = 0;
84 *((u16*)&state) = 0;
85 userdata_ = 0;
86 }
87
88 bool isAlive() const { return state.unk != 6; }
89 bool isDead() const { return state.unk == 6;}
90
91 bool isPlaying() const { return state.unk == 5; }
92 bool isPrepared() const { return state.unk >= 3; }
93 bool isMute() const { return field_0x0.flags.mute; }
94 bool isPaused() const { return field_0x0.flags.paused; }
95 void pauseWhenOut() {
96 field_0x1.flags.flag3 = 1;
97 }
98
99 /* 0x0 */ union {
101 struct {
102 u8 mute : 1;
112 /* 0x1 */ union {
113 u8 value;
114 struct {
117 u8 flag3 : 1;
118 u8 flag4 : 1;
119 u8 flag5 : 1;
120 u8 flag6 : 1;
121 u8 flag7 : 1;
122 u8 flag8 : 1;
125 /* 0x2 */ struct {
127 struct {
128 u8 flag1 : 1;
131 u8 flag5 : 1;
132 u8 flag6 : 1;
133 u8 flag7 : 1;
134 u8 flag8 : 1;
137 /* 0x4 */ u32 userdata_;
138}; // Size: 0x8
139
145 void forceIn() {
146 value_ = 1.0f;
148 }
149
150 void forceOut() {
151 value_ = 0.0f;
153 }
154
155 void fadeOut(u32 maxSteps) {
156 if (maxSteps != 0) {
157 mTransition.set(0.0f, value_, maxSteps);
158 } else {
159 forceOut();
160 }
161 }
162
163 void fadeIn(u32 maxSteps) {
164 if (maxSteps != 0) {
165 mTransition.set(1.0f, value_, maxSteps);
166 } else {
167 forceIn();
168 }
169 }
170
171 void fadeInFromOut(u32 maxSteps) {
172 value_ = 0.0f;
173 fadeIn(maxSteps);
174 }
175
176 bool isOut() const {
177 return (mTransition.remainingSteps_ == 0 && value_ < 0.01f);
178 }
179
181 f32 getIntensity() const { return value_; }
182
183 /* 0x00 */ f32 value_;
185}; // Size: 0x10
186
191template <typename A0>
193 virtual void virtual2();
194 virtual void calc(A0*);
195 virtual void virtual4(A0*, const JASSoundParams&);
196};
197
202template <typename A0>
208
214public:
215 void init() { field_0x0.value = 0; }
216
217 /* 0x0 */ union {
219 struct {
230};
231
237public:
238 /* 0x00 */ f32 tempo_;
240
242 void init() { setTempo(1.0f); }
243 void setTempo(f32 tempo) {
244 tempo_ = tempo;
246 }
247 f32 getTempo() const { return tempo_; }
249};
250
251class JAISoundHandle;
252class JAIAudible;
253class JAIAudience;
254class JAISe;
255class JAISeq;
256class JAISoundChild;
257class JAIStream;
258class JAITempoMgr;
259
264class JAISound {
265public:
266 void releaseHandle();
267 void attachHandle(JAISoundHandle* handle);
268 JAISound();
269 void start_JAISound_(JAISoundID id, const JGeometry::TVec3<f32>* posPtr, JAIAudience* audience);
270 bool acceptsNewAudible() const;
272 JAIAudience*);
273 void stop();
274 void stop(u32 fadeTime);
275 void die_JAISound_();
277 bool calc_JAISound_();
278 void initTrack_JAISound_(JASTrack* track);
279
280 virtual s32 getNumChild() const = 0;
281 virtual JAISoundChild* getChild(int) = 0;
282 virtual void releaseChild(int) = 0;
283 virtual JAISe* asSe();
284 virtual JAISeq* asSeq();
285 virtual JAIStream* asStream();
286 virtual JASTrack* getTrack() = 0;
287 virtual JASTrack* getChildTrack(int) = 0;
288 virtual JAITempoMgr* getTempoMgr() = 0;
289 virtual bool JAISound_tryDie_() = 0;
290
291 JAISoundID getID() const { return soundID_; }
293 bool isAnimated() const { return getAnimationState() != 0; }
294 void setAnimationState(u32 state) {
296 }
297 u32 getUserData() const { return status_.userdata_; }
298 void setUserData(u32 userData) { status_.userdata_ = userData; }
300 bool isHandleAttached() const { return handle_ != NULL; }
301 bool hasLifeTime() const { return status_.field_0x1.flags.flag2; }
302
307
308 bool isPrepared() const { return status_.isPrepared(); }
314 }
315
316 bool isStopping() const {
318 }
319
320 void pause(bool param_0) {
321 status_.field_0x0.flags.paused = param_0;
322 }
323
324 void updateLifeTime(u32 lifeTime) {
325 if (lifeTime > lifeTime_) {
326 lifeTime_ = lifeTime;
327 }
328 }
329
330 void setLifeTime(u32 lifeTime, bool param_1) {
331 JUT_ASSERT(333, status_.state.flags.calcedOnce == 0);
332 lifeTime_ = lifeTime;
333 setComesBack(param_1);
335 }
336
337 void setComesBack(bool param_0) {
338 JUT_ASSERT(354, status_.state.flags.calcedOnce == 0);
340 if (param_0) {
342 }
343 }
344
345 bool setPos(const JGeometry::TVec3<f32>& pos) {
346 if (audible_ != NULL) {
347 audible_->setPos(pos);
348 }
349 return audible_ != NULL;
350 }
351
353 void fadeIn(u32 maxSteps) { fader_.fadeInFromOut(maxSteps); }
354 void fadeOut(u32 maxSteps) { fader_.fadeOut(maxSteps); }
355
357
358 s32 getCount() const { return count_; }
359
361
363 /* 0x08 */ JAIAudible* audible_;
365 /* 0x10 */ u32 lifeTime_;
366 /* 0x14 */ s32 prepareCount_;
370 /* 0x34 */ u32 priority_;
371 /* 0x38 */ s32 count_;
373}; // Size: 0x98
374
375STATIC_ASSERT(sizeof(JAISound) == 0x98);
376
377#endif /* JAISOUND_H */
STATIC_ASSERT(sizeof(JAISound)==0x98)
Definition JAIAudible.h:12
void setPos(const JGeometry::TVec3< float > &other)
Definition JAIAudible.h:19
Definition JAISe.h:13
Definition JAISeq.h:15
Definition JAISound.h:213
u8 flag3
Definition JAISound.h:222
u8 flag8
Definition JAISound.h:227
u8 value
Definition JAISound.h:218
u8 flag5
Definition JAISound.h:224
u8 flag1
Definition JAISound.h:220
u8 flag2
Definition JAISound.h:221
union JAISoundActivity::@193 field_0x0
struct JAISoundActivity::@193::@194 flags
u8 flag6
Definition JAISound.h:225
void init()
Definition JAISound.h:215
u8 flag7
Definition JAISound.h:226
u8 flag4
Definition JAISound.h:223
Definition JAISound.h:15
JAISoundHandle()
Definition JAISound.h:17
void releaseSound()
Definition JAISound.cpp:9
bool isSoundAttached() const
Definition JAISound.h:20
JAISound * operator->() const
Definition JAISound.h:27
JAISound * sound_
Definition JAISound.h:36
~JAISoundHandle()
Definition JAISound.h:18
JAISound * getSound()
Definition JAISound.h:22
Definition JAISound.h:43
bool isAnonymous() const
Definition JAISound.h:53
union JAISoundID::@183::@184::@185 type
u32 composite_
Definition JAISound.h:57
u16 value
Definition JAISound.h:60
u16 waveID
Definition JAISound.h:66
JAISoundID()
Definition JAISound.h:51
u8 sectionID
Definition JAISound.h:62
JAISoundID(const JAISoundID &other)
Definition JAISound.h:49
union JAISoundID::@183 id_
void setAnonymous()
Definition JAISound.h:54
u8 groupID
Definition JAISound.h:63
JAISoundID(u32 id)
Definition JAISound.h:47
struct JAISoundID::@183::@184 info
struct JAISoundID::@183::@184::@185::@186 parts
Definition JAISound.h:264
void initTrack_JAISound_(JASTrack *track)
Definition JAISound.cpp:194
void increasePrepareCount_JAISound_()
Definition JAISound.cpp:144
virtual JASTrack * getTrack()=0
virtual s32 getNumChild() const =0
bool isHandleAttached() const
Definition JAISound.h:300
void setLifeTime(u32 lifeTime, bool param_1)
Definition JAISound.h:330
virtual JASTrack * getChildTrack(int)=0
JAISoundFader fader_
Definition JAISound.h:369
u32 getAnimationState() const
Definition JAISound.h:292
JAIAudience * audience_
Definition JAISound.h:364
void unlockIfLocked()
Definition JAISound.h:309
bool hasLifeTime() const
Definition JAISound.h:301
bool isAnimated() const
Definition JAISound.h:293
u32 lifeTime_
Definition JAISound.h:365
bool setPos(const JGeometry::TVec3< f32 > &pos)
Definition JAISound.h:345
void pause(bool param_0)
Definition JAISound.h:320
void start_JAISound_(JAISoundID id, const JGeometry::TVec3< f32 > *posPtr, JAIAudience *audience)
Definition JAISound.cpp:66
void stop_JAISound_()
Definition JAISound.h:311
void removeLifeTime_()
Definition JAISound.h:303
JAISoundID soundID_
Definition JAISound.h:367
u32 priority_
Definition JAISound.h:370
virtual JAIStream * asStream()
Definition JAISound.cpp:129
void stop()
Definition JAISound.cpp:116
void setComesBack(bool param_0)
Definition JAISound.h:337
JAISoundFader * getFader() const
Definition JAISound.h:352
JAISoundID getID() const
Definition JAISound.h:291
virtual JAISeq * asSeq()
Definition JAISound.cpp:125
bool calc_JAISound_()
Definition JAISound.cpp:151
bool acceptsNewAudible() const
Definition JAISound.cpp:85
JAISound()
Definition JAISound.cpp:64
virtual void releaseChild(int)=0
s32 count_
Definition JAISound.h:371
virtual JAISe * asSe()
Definition JAISound.cpp:121
JAISoundParamsProperty & getProperty()
Definition JAISound.h:356
virtual JAITempoMgr * getTempoMgr()=0
void updateLifeTime(u32 lifeTime)
Definition JAISound.h:324
void fadeIn(u32 maxSteps)
Definition JAISound.h:353
void releaseHandle()
Definition JAISound.cpp:16
JAIAudible * audible_
Definition JAISound.h:363
s32 getCount() const
Definition JAISound.h:358
void lockWhenPrepared()
Definition JAISound.h:310
void newAudible(const JGeometry::TVec3< f32 > &, JGeometry::TVec3< f32 > const *, u32, JAIAudience *)
Definition JAISound.cpp:93
s32 prepareCount_
Definition JAISound.h:366
void fadeOut(u32 maxSteps)
Definition JAISound.h:354
bool isStopping() const
Definition JAISound.h:316
JAIAudible * getAudible()
Definition JAISound.h:299
virtual JAISoundChild * getChild(int)=0
JAISoundParams params_
Definition JAISound.h:372
void setUserData(u32 userData)
Definition JAISound.h:298
void die_JAISound_()
Definition JAISound.cpp:133
void setAnimationState(u32 state)
Definition JAISound.h:294
JAISoundHandle * handle_
Definition JAISound.h:362
bool isPrepared() const
Definition JAISound.h:308
virtual bool JAISound_tryDie_()=0
void attachHandle(JAISoundHandle *handle)
Definition JAISound.cpp:23
JAISoundStatus_ status_
Definition JAISound.h:368
u32 getUserData() const
Definition JAISound.h:297
JAISoundParamsMove & getAuxiliary()
Definition JAISound.h:360
Definition JAIStream.h:14
Definition JAISound.h:236
JAISoundParamsTransition::TTransition transition_
Definition JAISound.h:239
JAITempoMgr()
Definition JAISound.h:241
void init()
Definition JAISound.h:242
void setTempo(f32 tempo)
Definition JAISound.h:243
f32 tempo_
Definition JAISound.h:238
f32 getTempo() const
Definition JAISound.h:247
void calc()
Definition JAISound.h:248
static u16 const id[4]
Definition d_a_obj_smtile.cpp:269
unsigned long u32
Definition types.h:12
float f32
Definition types.h:25
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8
Definition JAIAudience.h:14
Definition JAISoundChild.h:13
Definition JAISound.h:144
void forceIn()
Definition JAISound.h:145
bool isOut() const
Definition JAISound.h:176
void calc()
Definition JAISound.h:180
void fadeOut(u32 maxSteps)
Definition JAISound.h:155
void fadeInFromOut(u32 maxSteps)
Definition JAISound.h:171
JAISoundParamsTransition::TTransition mTransition
Definition JAISound.h:184
void forceOut()
Definition JAISound.h:150
f32 value_
Definition JAISound.h:183
void fadeIn(u32 maxSteps)
Definition JAISound.h:163
f32 getIntensity() const
Definition JAISound.h:181
Definition JAISoundParams.h:85
Definition JAISoundParams.h:10
Definition JAISoundParams.h:27
f32 apply(f32 value)
Definition JAISoundParams.h:40
void zero()
Definition JAISoundParams.h:28
u32 remainingSteps_
Definition JAISoundParams.h:55
void set(f32 newValue, f32 currentValue, u32 maxSteps)
Definition JAISoundParams.h:34
Definition JAISoundParams.h:109
JAISoundParamsProperty property_
Definition JAISoundParams.h:118
JAISoundParamsMove move_
Definition JAISoundParams.h:119
Definition JAISound.h:77
u8 flag1
Definition JAISound.h:115
u8 flag2
Definition JAISound.h:116
u8 flag4
Definition JAISound.h:105
u8 flag3
Definition JAISound.h:104
u8 unk
Definition JAISound.h:126
s32 unlockIfLocked()
Definition JAISound.cpp:44
bool isMute() const
Definition JAISound.h:93
u8 flag8
Definition JAISound.h:109
union JAISoundStatus_::@187 field_0x0
u8 flag6
Definition JAISound.h:107
union JAISoundStatus_::@188 field_0x1
bool isPlaying() const
Definition JAISound.h:91
u8 value
Definition JAISound.h:100
bool isAlive() const
Definition JAISound.h:88
s32 lockWhenPrepared()
Definition JAISound.cpp:36
u8 calcedOnce
Definition JAISound.h:129
bool isPaused() const
Definition JAISound.h:94
struct JAISoundStatus_::@187::@190 flags
u8 paused
Definition JAISound.h:103
u8 mute
Definition JAISound.h:102
void init()
Definition JAISound.h:81
bool isDead() const
Definition JAISound.h:89
u8 flag5
Definition JAISound.h:106
u8 animationState
Definition JAISound.h:130
u8 flag7
Definition JAISound.h:108
bool isPrepared() const
Definition JAISound.h:92
void pauseWhenOut()
Definition JAISound.h:95
u32 userdata_
Definition JAISound.h:137
struct JAISoundStatus_::@189 state
Definition JAISound.h:192
virtual void virtual4(A0 *, const JASSoundParams &)
virtual void calc(A0 *)
Definition JAISound.h:203
virtual void virtual2()
virtual void virtual4(JAISoundStrategyMgr__unknown< A0 > *)
virtual JAISoundStrategyMgr__unknown< A0 > * calc(JAISoundID)
Definition JASSoundParams.h:10
Definition JASTrack.h:24
Definition JGeometry.h:75