mirror of
https://github.com/zeldaret/ss
synced 2026-05-25 23:35:13 -04:00
89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
#ifndef D_SND_SOURCE_GROUP_H
|
|
#define D_SND_SOURCE_GROUP_H
|
|
|
|
#include "common.h"
|
|
#include "d/snd/d_snd_misc.h"
|
|
#include "d/snd/d_snd_types.h"
|
|
#include "d/snd/d_snd_util.h"
|
|
#include "nw4r/ut/ut_list.h"
|
|
#include "sized_string.h"
|
|
|
|
/**
|
|
* All similar dSoundSource_c's are put in a group. The game can then find the closest
|
|
* source for a given type by name/id, for example for changing things about the music
|
|
* depending on proximity to a certain object or enemy.
|
|
*
|
|
* Through its dSndSourceParam, it can also "send" parameters to all dSnd3DActors
|
|
* corresponding to these sound sources.
|
|
*
|
|
* Size: 0x70
|
|
*/
|
|
class dSndSourceGroup_c {
|
|
public:
|
|
dSndSourceGroup_c();
|
|
dSndSourceGroup_c(s32 sourceType, const char *name, const char *origName, s32 subtype);
|
|
~dSndSourceGroup_c();
|
|
|
|
void set(s32 sourceType, const char *name, const char *origName, s32 subtype);
|
|
void setTemp(s32 sourceType, const char *name, s32 subtype);
|
|
|
|
void registerSource(dSoundSource_c *);
|
|
void unregisterSource(dSoundSource_c *);
|
|
|
|
dSndSourceParam *getAmbientParam() {
|
|
return &mParam;
|
|
}
|
|
|
|
dSoundSource_c *getSourceClosestToListener();
|
|
dSoundSource_c *getSourceClosestToPlayer();
|
|
|
|
s32 getNumSources() const;
|
|
void setParam(s32 type, const char *name);
|
|
void calc();
|
|
void clear();
|
|
void clearTemp();
|
|
|
|
const char *getName() const {
|
|
return mName;
|
|
}
|
|
|
|
const char *getOrigName() const {
|
|
return mpOrigName;
|
|
}
|
|
|
|
s32 getSourceType() const {
|
|
return mSourceType;
|
|
}
|
|
|
|
bool isActive() const {
|
|
return mIsActive;
|
|
}
|
|
|
|
void setIsActive(bool active) {
|
|
mIsActive = active;
|
|
}
|
|
|
|
private:
|
|
bool setParamFromName(const char *name);
|
|
void resetSoundSourceParam();
|
|
void clearList();
|
|
|
|
/* 0x00 */ nw4r::ut::Node mNode1;
|
|
/* 0x08 */ nw4r::ut::Node mNode2;
|
|
/* 0x10 */ s32 mSourceType;
|
|
/* 0x14 */ s32 mSourceCategory;
|
|
/* 0x18 */ s32 mSubtype;
|
|
/* 0x1C */ bool mIsActive;
|
|
/* 0x1D */ bool field_0x1D;
|
|
/* 0x1E */ SizedString<32> mName;
|
|
/* 0x40 */ const char *mpOrigName;
|
|
/* 0x44 */ LIST_MEMBER(dSoundSource_c, SubSource);
|
|
/* 0x50 */ dSndSourceParam mParam;
|
|
/* 0x64 */ dSoundSource_c *mpCachedClosestSourceToListener;
|
|
/* 0x68 */ dSoundSource_c *mpCachedClosestSourceToPlayer;
|
|
/* 0x6C */ bool mCalculatedClosestToListener;
|
|
/* 0x6D */ bool mCalculatedClosestToPlayer;
|
|
};
|
|
|
|
#endif
|