// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#ifndef NL_MIXING_TRACK_H
#define NL_MIXING_TRACK_H
#include "nel/misc/types_nl.h"
#include "driver/sound_driver.h"
#include "driver/source.h"
namespace NLSOUND {
class CSourceCommon;
/**
* A source selected for playing
* \author Olivier Cado
* \author Nevrax France
* \date 2001
*/
class CTrack
{
public:
/// Constructor
CTrack() : m_LogicalSource(NULL), m_PhysicalSource(NULL) { }
/// Init
inline void init(ISoundDriver *soundDriver) { m_PhysicalSource = soundDriver->createSource(); }
/// Destructor
virtual ~CTrack() { /* nlassert(m_LogicalSource != NULL); [TODO KAETEMI: Try this.] */ if (m_PhysicalSource != NULL) delete m_PhysicalSource; m_PhysicalSource = NULL; }
/// Return if the track succeeded to create a physical source.
inline bool hasPhysicalSource() const { return m_PhysicalSource != NULL; }
/// Return the physical source. Asserts when NULL.
inline ISource *getPhysicalSource() { nlassert(m_PhysicalSource != NULL); return m_PhysicalSource; }
/// Return availability for playback
/// FIXME: SWAPTEST [TODO: KAETEMI: Figure out what FIXME: SWAPTEST means.]
// bool isAvailable() const { return (_SimpleSource==NULL); }
bool isAvailable() const { nlassert(m_PhysicalSource != NULL); return (m_LogicalSource == NULL) && m_PhysicalSource->isStopped(); }
/// Returns true if the track is physically playing (different from getUserSource()->isPlaying())
bool isPlaying() const { nlassert(m_PhysicalSource != NULL); return m_PhysicalSource->isPlaying(); }
/// Set logical source (if NULL, the track becomes available)
void setLogicalSource(CSourceCommon *logicalSource) { m_LogicalSource = logicalSource; }
/// Return the logical source
CSourceCommon *getLogicalSource() { return m_LogicalSource; }
private:
/// The current logical source
CSourceCommon *m_LogicalSource;
/// Physical source played by the driver
ISource *m_PhysicalSource;
};
} // NLSOUND
#endif // NL_MIXING_TRACK_H
/* End of mixing_track.h */