ns/releases/3.2.0/source/mod/AvHAmbientSound.cpp
puzl 5dcc163bd5 made a copy
git-svn-id: https://unknownworlds.svn.cloudforge.com/ns1@379 67975925-1194-0748-b3d5-c16f83f1a3a1
2006-04-02 10:49:08 +00:00

112 lines
3.5 KiB
C++

//======== (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>
#pragma warning(push)
#pragma warning(disable: 311)
#include <fmoddyn.h>
#pragma warning(pop)
#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);
}
}
}