Changed: CListenerFMod inherits from NLMISC::CManualSingleton<CListenerFMod>

This commit is contained in:
kervala 2010-07-28 19:42:46 +02:00
parent 6dec8a3cf5
commit 161e40a3f2
4 changed files with 23 additions and 42 deletions

View file

@ -26,36 +26,23 @@ namespace NLSOUND
{ {
// ***************************************************************************
// The instance of the singleton
CListenerFMod *CListenerFMod::_Instance = NULL;
// *************************************************************************** // ***************************************************************************
CListenerFMod::CListenerFMod() //: IListener() CListenerFMod::CListenerFMod() //: IListener()
: _Pos(CVector::Null), _Vel(CVector::Null), _Front(CVector::J), _Up(CVector::K) : _Pos(CVector::Null), _Vel(CVector::Null), _Front(CVector::J), _Up(CVector::K)
{ {
if ( _Instance == NULL ) _RolloffFactor= 1.f;
_Pos= CVector::Null;
_Vel= CVector::Null;
_Front= CVector::J;
_Up= CVector::K;
if (CSoundDriverFMod::getInstance()->getOption(ISoundDriver::OptionManualRolloff))
{ {
_Instance = this; // Manual RollOff => disable API rollOff
_RolloffFactor= 1.f; if( CSoundDriverFMod::getInstance()->fmodOk() )
_Pos= CVector::Null;
_Vel= CVector::Null;
_Front= CVector::J;
_Up= CVector::K;
if (CSoundDriverFMod::getInstance()->getOption(ISoundDriver::OptionManualRolloff))
{ {
// Manual RollOff => disable API rollOff FSOUND_3D_SetRolloffFactor(0);
if( CSoundDriverFMod::getInstance()->fmodOk() )
{
FSOUND_3D_SetRolloffFactor(0);
}
} }
} }
else
{
//nlerror( "Listener singleton instanciated twice" );
}
} }
@ -65,7 +52,6 @@ CListenerFMod::~CListenerFMod()
//nldebug("Destroying FMod listener"); //nldebug("Destroying FMod listener");
release(); release();
_Instance = NULL;
} }

View file

@ -17,9 +17,11 @@
#ifndef NL_LISTENER_FMOD_H #ifndef NL_LISTENER_FMOD_H
#define NL_LISTENER_FMOD_H #define NL_LISTENER_FMOD_H
#include <nel/sound/driver/listener.h> #include "nel/sound/driver/listener.h"
#include "nel/misc/singleton.h"
namespace NLSOUND { namespace NLSOUND
{
/** /**
@ -32,7 +34,7 @@ namespace NLSOUND {
* \author Nevrax France * \author Nevrax France
* \date 2002 * \date 2002
*/ */
class CListenerFMod : public IListener class CListenerFMod : public IListener, public NLMISC::CManualSingleton<CListenerFMod>
{ {
friend class CSoundDriverFMod; friend class CSoundDriverFMod;
@ -44,9 +46,6 @@ public:
/// Deconstructor /// Deconstructor
virtual ~CListenerFMod(); virtual ~CListenerFMod();
/// Return the instance of the singleton
static CListenerFMod* instance() { return _Instance; }
/// \name Listener properties /// \name Listener properties
//@{ //@{
@ -109,9 +108,6 @@ private:
/// Release all DirectSound resources /// Release all DirectSound resources
void release(); void release();
/// The instance of the singleton
static CListenerFMod *_Instance;
// Nel Basis // Nel Basis
NLMISC::CVector _Pos; NLMISC::CVector _Pos;
NLMISC::CVector _Vel; NLMISC::CVector _Vel;

View file

@ -149,9 +149,9 @@ CSoundDriverFMod::~CSoundDriverFMod()
// Assure that the listener has released all resources before closing down FMod // Assure that the listener has released all resources before closing down FMod
if (CListenerFMod::instance() != 0) if (CListenerFMod::getInstance() != 0)
{ {
CListenerFMod::instance()->release(); CListenerFMod::getInstance()->release();
} }
// Close FMod // Close FMod
@ -283,9 +283,9 @@ void CSoundDriverFMod::update()
IListener *CSoundDriverFMod::createListener() IListener *CSoundDriverFMod::createListener()
{ {
if (CListenerFMod::instance() != NULL) if (CListenerFMod::isInitialized())
{ {
return CListenerFMod::instance(); return CListenerFMod::getInstance();
} }
if ( !_FModOk ) if ( !_FModOk )
@ -353,7 +353,7 @@ void CSoundDriverFMod::commit3DChanges()
// We handle the volume of the source according to the distance // We handle the volume of the source according to the distance
// ourselves. Call updateVolume() to, well..., update the volume // ourselves. Call updateVolume() to, well..., update the volume
// according to, euh ..., the new distance! // according to, euh ..., the new distance!
CListenerFMod* listener = CListenerFMod::instance(); CListenerFMod* listener = CListenerFMod::getInstance();
if(listener) if(listener)
{ {
const CVector &origin = listener->getPos(); const CVector &origin = listener->getPos();

View file

@ -42,15 +42,14 @@ CSourceFMod::CSourceFMod( uint sourcename )
_PosRelative= false; _PosRelative= false;
_Loop = false; _Loop = false;
_Gain = 1.0f; _Gain = NLSOUND_DEFAULT_GAIN;
_Alpha = 0.0; _Alpha = 0.0;
_Pos= _Vel= CVector::Null; _Pos= _Vel= CVector::Null;
_Front= CVector::J; _Front= CVector::J;
_MinDist= 1.f; _MinDist= 1.f;
_MaxDist= FLT_MAX; _MaxDist= numeric_limits<float>::max();
_Pitch= 1.0f; _Pitch= 1.0f;
_FModChannel= -1; _FModChannel= -1;
} }
@ -180,7 +179,7 @@ bool CSourceFMod::play()
else else
{ {
// manual rolloff => recompute according to position // manual rolloff => recompute according to position
CListenerFMod *listener = CListenerFMod::instance(); CListenerFMod *listener = CListenerFMod::getInstance();
if (listener) updateVolume(listener->getPos()); if (listener) updateVolume(listener->getPos());
} }
@ -510,7 +509,7 @@ void CSourceFMod::updateFModPos()
// If relative, must transform to absolute // If relative, must transform to absolute
if(_PosRelative) if(_PosRelative)
{ {
CListenerFMod *lsr= CListenerFMod::instance(); CListenerFMod *lsr= CListenerFMod::getInstance();
if(lsr) if(lsr)
{ {
wpos= lsr->getPosMatrix() * wpos; wpos= lsr->getPosMatrix() * wpos;