Files
ss/include/d/snd/d_snd_source_mgr.h
2025-11-23 16:00:59 +01:00

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