mirror of https://github.com/PrimeDecomp/prime.git
123 lines
4.2 KiB
C++
123 lines
4.2 KiB
C++
#include "MetroidPrime/ScriptObjects/CScriptRoomAcoustics.hpp"
|
|
|
|
#include "Kyoto/Audio/CAudioSys.hpp"
|
|
|
|
static TAreaId s_ActiveAcousticsAreaId = kInvalidAreaId;
|
|
|
|
CScriptRoomAcoustics::CScriptRoomAcoustics(
|
|
TUniqueId uid, const rstl::string& name, const CEntityInfo& info, bool active, uint volScale,
|
|
bool revHi, bool revHiDis, float revHiTime, float revHiPreDelay, float revHiDamping,
|
|
float revHiColoration, float revHiCrosstalk, float revHiMix, bool chorus, float baseDelay,
|
|
float variation, float period, bool revStd, bool revStdDis, float revStdTime,
|
|
float revStdPreDelay, float revStdDamping, float revStdColoration, float revStdMix, bool delay,
|
|
int delayL, int delayR, int delayS, int feedbackL, int feedbackR, int feedbackS, int outputL,
|
|
int outputR, int outputS)
|
|
: CEntity(uid, info, active, name)
|
|
, x34_volumeScale(volScale)
|
|
, x38_revHi(revHi)
|
|
, x39_revHiDis(revHiDis)
|
|
, x3c_revHiInfo(revHiTime, revHiPreDelay, revHiDamping, revHiColoration, revHiCrosstalk, revHiMix)
|
|
, x54_chorus(chorus)
|
|
, x58_chorusInfo(baseDelay, variation, period)
|
|
, x64_revStd(revStd)
|
|
, x65_revStdDis(revStdDis)
|
|
, x68_revStdInfo(revStdTime, revStdPreDelay, revStdDamping, revStdColoration, revStdMix)
|
|
, x7c_delay(delay)
|
|
, x80_delayInfo(delayL, delayR, delayS, feedbackL, feedbackR, feedbackS, outputL, outputR,
|
|
outputS) {}
|
|
|
|
void CScriptRoomAcoustics::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
|
|
|
void CScriptRoomAcoustics::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId objId,
|
|
CStateManager& stateMgr) {
|
|
CEntity::AcceptScriptMsg(msg, objId, stateMgr);
|
|
|
|
switch (msg) {
|
|
case kSM_Activate:
|
|
EnableAuxCallbacks();
|
|
break;
|
|
case kSM_Deactivate:
|
|
if (s_ActiveAcousticsAreaId == GetCurrentAreaId()) {
|
|
CSfxManager::DisableAuxProcessing();
|
|
s_ActiveAcousticsAreaId = kInvalidAreaId;
|
|
CAudioSys::SetVolumeScale(CAudioSys::GetDefaultVolumeScale());
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CScriptRoomAcoustics::Think(float dt, CStateManager& stateMgr) {
|
|
if (!GetActive()) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
void CScriptRoomAcoustics::EnableAuxCallbacks() {
|
|
if (!GetActive()) {
|
|
return;
|
|
}
|
|
|
|
int applied = 0;
|
|
|
|
if (x38_revHi && applied <= 0) {
|
|
SND_AUX_REVERBHI reverb;
|
|
reverb.tempDisableFX = x39_revHiDis;
|
|
reverb.time = x3c_revHiInfo.time;
|
|
reverb.preDelay = x3c_revHiInfo.preDelay;
|
|
reverb.damping = x3c_revHiInfo.damping;
|
|
reverb.coloration = x3c_revHiInfo.coloration;
|
|
reverb.crosstalk = x3c_revHiInfo.crosstalk;
|
|
reverb.mix = x3c_revHiInfo.mix;
|
|
applied++;
|
|
CSfxManager::PrepareReverbHiCallback(reverb);
|
|
}
|
|
if (x54_chorus && applied < 1) {
|
|
SND_AUX_CHORUS chorus;
|
|
chorus.baseDelay = x58_chorusInfo.baseDelay;
|
|
chorus.variation = x58_chorusInfo.variation;
|
|
chorus.period = x58_chorusInfo.period;
|
|
applied++;
|
|
CSfxManager::PrepareChorusCallback(chorus);
|
|
}
|
|
if (x64_revStd && applied < 1) {
|
|
SND_AUX_REVERBSTD reverbStd;
|
|
reverbStd.tempDisableFX = x65_revStdDis;
|
|
reverbStd.time = x68_revStdInfo.time;
|
|
reverbStd.preDelay = x68_revStdInfo.preDelay;
|
|
reverbStd.damping = x68_revStdInfo.damping;
|
|
reverbStd.coloration = x68_revStdInfo.coloration;
|
|
reverbStd.mix = x68_revStdInfo.mix;
|
|
applied++;
|
|
CSfxManager::PrepareReverbStdCallback(reverbStd);
|
|
}
|
|
if (x7c_delay && applied < 1) {
|
|
SND_AUX_DELAY delay;
|
|
delay.delay[0] = x80_delayInfo.delayL;
|
|
delay.delay[1] = x80_delayInfo.delayR;
|
|
delay.delay[2] = x80_delayInfo.delayS;
|
|
delay.feedback[0] = x80_delayInfo.feedbackL;
|
|
delay.feedback[1] = x80_delayInfo.feedbackR;
|
|
delay.feedback[2] = x80_delayInfo.feedbackS;
|
|
delay.output[0] = x80_delayInfo.outputL;
|
|
delay.output[1] = x80_delayInfo.outputR;
|
|
delay.output[2] = x80_delayInfo.outputS;
|
|
applied++;
|
|
CSfxManager::PrepareDelayCallback(delay);
|
|
}
|
|
|
|
if (applied > 0) {
|
|
CAudioSys::SetVolumeScale(x34_volumeScale);
|
|
}
|
|
s_ActiveAcousticsAreaId = GetCurrentAreaId();
|
|
}
|
|
|
|
void CScriptRoomAcoustics::DisableAuxCallbacks() {
|
|
CSfxManager::DisableAuxProcessing();
|
|
s_ActiveAcousticsAreaId = kInvalidAreaId;
|
|
CAudioSys::SetVolumeScale(CAudioSys::GetDefaultVolumeScale());
|
|
}
|
|
|
|
CScriptRoomAcoustics::~CScriptRoomAcoustics() {}
|