mirror of
https://github.com/zeldaret/ss
synced 2026-05-27 16:13:08 -04:00
122 lines
3.8 KiB
C++
122 lines
3.8 KiB
C++
#ifndef D_SND_SOURCE_MGR_H
|
|
#define D_SND_SOURCE_MGR_H
|
|
|
|
#include "d/snd/d_snd_source.h"
|
|
#include "d/snd/d_snd_source_group.h"
|
|
#include "d/snd/d_snd_util.h"
|
|
#include "nw4r/ut/ut_list.h"
|
|
|
|
SND_DISPOSER_FORWARD_DECL(dSndSourceMgr_c);
|
|
|
|
class dSndSourceMgr_c {
|
|
SND_DISPOSER_MEMBERS(dSndSourceMgr_c);
|
|
|
|
static const u32 NUM_GROUPS = 128;
|
|
|
|
public:
|
|
dSndSourceMgr_c();
|
|
void setup();
|
|
|
|
static dSoundSourceIf_c *createSource(s32 sourceType, dAcBase_c *actor, const char *name, u8 subtype);
|
|
|
|
void registerSource(dSoundSource_c *source);
|
|
void unregisterSource(dSoundSource_c *source);
|
|
void onShutdownSource(dSoundSource_c *source);
|
|
|
|
// Only for sources 10, 11, 12, 13, 14
|
|
void registerUnkEnemyType(dSndSourceEnemy_c *);
|
|
|
|
void playFlowSound(u32 id);
|
|
static s32 getSourceCategoryForSourceType(s32 sourceType, const char *name);
|
|
static bool isSwOrEOc(const char *name);
|
|
s32 getPlayerSourceRoomId() const;
|
|
|
|
static dSoundSource_c *getPlayerSource() {
|
|
return GetInstance()->mpPlayerSource;
|
|
}
|
|
|
|
static dSoundSource_c *getBoomerangSource() {
|
|
return GetInstance()->mpBoomerangSource;
|
|
}
|
|
|
|
void setMsgSource(dSoundSource_c *source) {
|
|
mpMsgSource = source;
|
|
}
|
|
|
|
u8 getField_0x0012() const {
|
|
return field_0x0012;
|
|
}
|
|
|
|
u8 getField_0x0013() const {
|
|
return field_0x0013;
|
|
}
|
|
|
|
void stopAllSound();
|
|
void stopAllNonPlayerSound();
|
|
void pauseAllSound();
|
|
|
|
void incrementEnemyCount() {
|
|
field_0x3868++;
|
|
}
|
|
|
|
void decrementEnemyCount() {
|
|
field_0x3868--;
|
|
}
|
|
|
|
void setMutedFromFader(bool muteFlag);
|
|
void onEventStart();
|
|
void onEventEnd();
|
|
void fn_803852B0();
|
|
void fn_803852F0();
|
|
|
|
private:
|
|
void calcEnemyObjVolume();
|
|
|
|
static bool isCertainEnemyType(dSoundSource_c *source);
|
|
static bool isAnimSoundSource(s32 sourceType, const char *name);
|
|
static bool isMultiSoundSource(s32 sourceType, const char *name);
|
|
|
|
void removeSourceFromList(dSoundSource_c *source, nw4r::ut::List *list);
|
|
void clearSourceLists();
|
|
void clearSourceList(nw4r::ut::List *list);
|
|
|
|
dSndSourceGroup_c *getActiveGroupForName(const char *name);
|
|
dSndSourceGroup_c *getInactiveGroup();
|
|
dSndSourceGroup_c *getGroup(s32 sourceType, dAcBase_c *actor, const char *name, const char *origName, u8 subtype);
|
|
bool fn_803846D0(s32 sourceType, const char *name, u8 subtype);
|
|
|
|
bool addGroupToLoading(dSndSourceGroup_c *group);
|
|
void activateGroup(dSndSourceGroup_c *group);
|
|
bool isActiveGroup(dSndSourceGroup_c *group) const;
|
|
|
|
/* 0x0010 */ u8 field_0x0010;
|
|
/* 0x0011 */ u8 field_0x0011;
|
|
/* 0x0012 */ u8 field_0x0012;
|
|
/* 0x0013 */ u8 field_0x0013;
|
|
|
|
/* 0x0014 */ dSndSourceGroup_c *mpDefaultGroup;
|
|
/* 0x0018 */ LIST_MEMBER(dSndSourceGroup_c, Group1);
|
|
/* 0x0024 */ LIST_MEMBER(dSndSourceGroup_c, Group2);
|
|
/* 0x0030 */ LIST_MEMBER(dSndSourceGroup_c, Group3);
|
|
/* 0x003C */ dSndSourceGroup_c mGroups[NUM_GROUPS];
|
|
|
|
// Not sure what these are for
|
|
/* 0x383C */ LIST_MEMBER(dSoundSource_c, AllSources); // node offset 0xE8, -> dSoundSource_c::mMgrLink
|
|
/* 0x3848 */ nw4r::ut::List field_0x3848; // node offset 0x15C, -> dSndSourceEnemy_c::mMgrEnemyLink
|
|
/* 0x3854 */ LIST_MEMBER(dSndSourceHarpRelated_c, HarpRelated); // node offset 0x160, -> dSndSourceHarpRelated_c
|
|
|
|
/* 0x3860 */ UNKWORD field_0x3860;
|
|
/* 0x3864 */ UNKWORD field_0x3864;
|
|
/* 0x3868 */ UNKWORD field_0x3868;
|
|
/* 0x386C */ f32 field_0x386C;
|
|
|
|
/* 0x3870 */ dSoundSource_c *mpPlayerSource;
|
|
/* 0x3874 */ dSoundSource_c *mpKenseiSource;
|
|
/* 0x3878 */ dSoundSource_c *mpBoomerangSource;
|
|
/* 0x387C */ dSoundSource_c *mpTBoatSource;
|
|
/* 0x3880 */ dSoundSource_c *field_0x3880; // fi singing related?
|
|
/* 0x3884 */ dSoundSource_c *mpMsgSource;
|
|
};
|
|
|
|
#endif
|