ns/releases/3.03/source/mod/AvHAmbientSound.cpp

109 lines
3.4 KiB
C++
Raw Normal View History

//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. =========
//
// The copyright to the contents herein is the property of Charles G. Cleveland.
// The contents may be used and/or copied only with the written permission of
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose:
//
// $Workfile: AvHAmbientSound.cpp $
// $Date: 2002/07/10 14:38:50 $
//
//-------------------------------------------------------------------------------
// $Log: AvHAmbientSound.cpp,v $
// Revision 1.5 2002/07/10 14:38:50 Flayra
// - Fixed bug where sound volume wasn't being set for omnipresent sounds, added document headers
//
//===============================================================================
#include "mod/AvHAmbientSound.h"
#include "cl_dll/hud.h"
#include "common/vec_op.h"
#include <stdlib.h>
#include "cl_dll/cl_util.h"
AvHAmbientSound::AvHAmbientSound(const string& inRelativeSoundName, int inVolume, int inFadeDistance, bool inLooping, const Vector& inPosition, int inEntIndex, float inTimeElapsed)
{
this->mInitialized = false;
this->mStream = NULL;
this->mChannel = 0;
this->mVolume = inVolume;
this->mLooping = inLooping;
this->mFadeDistance = inFadeDistance;
VectorCopy(inPosition, this->mPosition);
this->mEntityIndex = inEntIndex;
this->mTimeElapsed = inTimeElapsed;
// Start playing the song
string theSoundName = string(getModDirectory()) + "/" + string(inRelativeSoundName);
this->mSoundName = theSoundName;
}
AvHAmbientSound::AvHAmbientSound(const AvHAmbientSound& inSource)
{
// Don't re-init, just copy values
this->mInitialized = inSource.mInitialized;
this->mStream = inSource.mStream;
this->mChannel = inSource.mChannel;
this->mVolume = inSource.mVolume;
this->mLooping = inSource.mLooping;
this->mSoundName = inSource.mSoundName;
this->mFadeDistance = inSource.mFadeDistance;
VectorCopy(inSource.mPosition, this->mPosition);
this->mEntityIndex = inSource.mEntityIndex;
}
void AvHAmbientSound::ClearData()
{
if(this->mInitialized)
{
gHUD.ClearStream(this->mStream);
}
}
int AvHAmbientSound::GetEntityIndex() const
{
return this->mEntityIndex;
}
void AvHAmbientSound::SetPosition(const Vector& inPosition)
{
VectorCopy(inPosition, this->mPosition);
}
void AvHAmbientSound::StartPlayingIfNot()
{
if(!this->mInitialized)
{
int theBytesInSong;
this->mInitialized = gHUD.PlaySong(this->mSoundName, this->mVolume, this->mLooping, this->mStream, this->mChannel, theBytesInSong, this->mTimeElapsed);
}
}
void AvHAmbientSound::UpdateVolume(const Vector& inListenerPosition)
{
if(this->mInitialized)
{
Vector theDistanceVector = inListenerPosition - this->mPosition;
float theDistance = sqrt(theDistanceVector[0]*theDistanceVector[0] + theDistanceVector[1]*theDistanceVector[1] + theDistanceVector[2]*theDistanceVector[2]);
//FSOUND_SetPan(this->mChannel, FSOUND_STEREOPAN);
int theVolume = this->mVolume;
if(this->mFadeDistance > 0)
{
theVolume = this->mVolume - this->mVolume*(theDistance/(float)this->mFadeDistance);
}
theVolume = min(max(0, theVolume), 255);
FMOD_INSTANCE* theFMOD = gHUD.GetFMOD();
if (theFMOD)
{
theFMOD->FSOUND_SetVolume(this->mChannel, theVolume);
}
}
}