179 lines
5.2 KiB
C++
179 lines
5.2 KiB
C++
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||
|
// 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 <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
|
||
|
#include "std_afx.h"
|
||
|
#include "object_viewer.h"
|
||
|
#include "pick_sound.h"
|
||
|
#include "sound_system.h"
|
||
|
|
||
|
#include "nel/sound/u_audio_mixer.h"
|
||
|
#include "nel/sound/u_listener.h"
|
||
|
#include "nel/sound/u_source.h"
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CPickSound dialog
|
||
|
|
||
|
|
||
|
//========================================================================================
|
||
|
CPickSound::CPickSound(const CPickSound::TNameVect &names, CWnd* pParent /*=NULL*/)
|
||
|
: CDialog(CPickSound::IDD, pParent), _Names(names), _CurrSource(NULL)
|
||
|
{
|
||
|
|
||
|
//{{AFX_DATA_INIT(CPickSound)
|
||
|
//}}AFX_DATA_INIT
|
||
|
}
|
||
|
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CDialog::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CPickSound)
|
||
|
DDX_Control(pDX, IDC_LIST1, m_NameList);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CPickSound, CDialog)
|
||
|
//{{AFX_MSG_MAP(CPickSound)
|
||
|
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchange)
|
||
|
ON_BN_CLICKED(IDC_BUTTON1, OnPlaySound)
|
||
|
ON_WM_TIMER()
|
||
|
ON_WM_DESTROY()
|
||
|
ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList)
|
||
|
ON_BN_CLICKED(IDC_PLAY_SOUND, OnPlaySound)
|
||
|
ON_WM_CLOSE()
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CPickSound message handlers
|
||
|
|
||
|
//========================================================================================
|
||
|
BOOL CPickSound::OnInitDialog()
|
||
|
{
|
||
|
CDialog::OnInitDialog();
|
||
|
UpdateData();
|
||
|
|
||
|
for (TNameVect::iterator it = _Names.begin(); it != _Names.end(); ++it)
|
||
|
{
|
||
|
m_NameList.AddString(NLMISC::CStringMapper::unmap(*it).c_str());
|
||
|
}
|
||
|
|
||
|
_Timer = SetTimer (1, 100, NULL);
|
||
|
|
||
|
// store value
|
||
|
if (CSoundSystem::getAudioMixer())
|
||
|
{
|
||
|
_BackupGain = CSoundSystem::getAudioMixer()->getListener ()->getGain();
|
||
|
CSoundSystem::getAudioMixer()->getListener ()->getVelocity(_BackupVel);
|
||
|
|
||
|
CSoundSystem::getAudioMixer()->getListener ()->setGain(1.0f);
|
||
|
CSoundSystem::getAudioMixer()->getListener ()->setVelocity(NLMISC::CVector(0,0,0));
|
||
|
}
|
||
|
else
|
||
|
_BackupGain = 1.0f;
|
||
|
|
||
|
// set new value
|
||
|
|
||
|
if(!_Timer)
|
||
|
{
|
||
|
nlwarning ("Can't create the timer to update the sound system");
|
||
|
}
|
||
|
|
||
|
UpdateData(FALSE);
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnSelchange()
|
||
|
{
|
||
|
UpdateData();
|
||
|
char str[1024];
|
||
|
nlassert(m_NameList.GetTextLen(m_NameList.GetCurSel()) < 1024);
|
||
|
|
||
|
m_NameList.GetText(m_NameList.GetCurSel(), str);
|
||
|
_CurrName = NLMISC::CStringMapper::map(str);
|
||
|
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnPlaySound()
|
||
|
{
|
||
|
int curSel = m_NameList.GetCurSel();
|
||
|
if (curSel == LB_ERR) return;
|
||
|
stopCurrSource();
|
||
|
CString sName;
|
||
|
m_NameList.GetText(curSel, sName);
|
||
|
CSoundSystem::create(std::string( (LPCTSTR) sName));
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnTimer(UINT nIDEvent)
|
||
|
{
|
||
|
CSoundSystem::poll();
|
||
|
|
||
|
CDialog::OnTimer(nIDEvent);
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnDestroy()
|
||
|
{
|
||
|
stopCurrSource();
|
||
|
CDialog::OnDestroy();
|
||
|
|
||
|
if(_Timer != 0)
|
||
|
KillTimer (_Timer);
|
||
|
|
||
|
// restore old value
|
||
|
if (CSoundSystem::getAudioMixer())
|
||
|
{
|
||
|
CSoundSystem::getAudioMixer()->getListener ()->setGain(_BackupGain);
|
||
|
CSoundSystem::getAudioMixer()->getListener ()->setVelocity(_BackupVel);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnDblclkList()
|
||
|
{
|
||
|
int curSel = m_NameList.GetCurSel();
|
||
|
if (curSel == LB_ERR) return;
|
||
|
stopCurrSource();
|
||
|
CString sName;
|
||
|
m_NameList.GetText(curSel, sName);
|
||
|
_CurrSource = CSoundSystem::create(std::string( (LPCTSTR) sName));
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::OnClose()
|
||
|
{
|
||
|
// TODO: Add your message handler code here and/or call default
|
||
|
stopCurrSource();
|
||
|
CDialog::OnClose();
|
||
|
}
|
||
|
|
||
|
//========================================================================================
|
||
|
void CPickSound::stopCurrSource()
|
||
|
{
|
||
|
delete _CurrSource;
|
||
|
_CurrSource = NULL;
|
||
|
}
|