// PageSoundContainer.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "PageSoundContainer.h" #include "MainFrm.h" #include "WorldCreatorView.h" #include "SoundPropertyDlg.h" #include #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageSoundContainer property page IMPLEMENT_DYNCREATE(CPageSoundContainer, CPropertyPage) CPageSoundContainer::CPageSoundContainer() : CPropertyPage(CPageSoundContainer::IDD) , m_SelectCur( -1 ) { //{{AFX_DATA_INIT(CPageSoundContainer) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CPageSoundContainer::~CPageSoundContainer() { } void CPageSoundContainer::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageSoundContainer) DDX_Control(pDX, IDC_LIST_SOUND, m_SoundList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageSoundContainer, CPropertyPage) //{{AFX_MSG_MAP(CPageSoundContainer) ON_NOTIFY(NM_RCLICK, IDC_LIST_SOUND, OnRclickListSound) ON_COMMAND(MENU_SOUNDDELETE, OnSounddelete) ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_SOUND, OnBegindragListSound) ON_COMMAND(MENU_SOUNDADD, OnSoundadd) ON_COMMAND(ID_MENU_SOUNDPROPERTY, OnMenuSoundproperty) ON_COMMAND(ID_SOUND_DUPLICATE, OnSoundDuplicate) ON_NOTIFY(NM_DBLCLK, IDC_LIST_SOUND, OnDblclkListSound) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageSoundContainer message handlers BOOL CPageSoundContainer::OnInitDialog() { CPropertyPage::OnInitDialog(); DWORD dwStyle; dwStyle = m_SoundList.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0); dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; m_SoundList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle ); m_SoundList.InsertColumn( 0, "À̸§", LVCFMT_LEFT, 100 ); m_SoundList.InsertColumn( 1, "Æ®¸®°Å", LVCFMT_LEFT, 60 ); m_SoundList.InsertColumn( 2, "3D Sound", LVCFMT_LEFT, 60 ); m_SoundList.InsertColumn( 3, "ÆÄÀϰ³¼ö", LVCFMT_LEFT, 60 ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageSoundContainer::OnRclickListSound(NMHDR* pNMHDR, LRESULT* pResult) { CPoint point; GetCursorPos(&point); CMenu menu; menu.LoadMenu(IDR_MENU_SOUNDOBJECT); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); *pResult = 0; } void CPageSoundContainer::OnSoundadd() { SSoundAsset tempAsset; tempAsset.m_Name = "¸¸´Ù ¹Ùº¸"; SoundAdd( tempAsset ); } void CPageSoundContainer::SoundAdd( SSoundAsset & SoundAsset ) { int nInsertItem = m_SoundList.GetItemCount(); if( nInsertItem == -1 ) { return; } InsertSoundAsset( nInsertItem, SoundAsset ); CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SoundMap.AppendSoundAsset( SoundAsset ); } void CPageSoundContainer::OnSounddelete() { SelectSoundObject(); if(m_SelectCur<0) return; if( !m_SoundList.DeleteItem( m_SelectCur ) ) MessageBox( "¾ÆÀÌÅÛ »èÁ¦¿¡ ½ÇÆÐÇß½À´Ï´Ù." ); CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SoundMap.DeleteSoundAsset( m_SelectCur ); } void CPageSoundContainer::OnSoundDuplicate() { SelectSoundObject(); if( m_SelectCur < 0 ) return; SSoundAsset SoundAsset; CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SoundMap.GetSoundAsset( m_SelectCur, SoundAsset ); SoundAdd( SoundAsset ); } void CPageSoundContainer::OnDblclkListSound(NMHDR* pNMHDR, LRESULT* pResult) { OnMenuSoundproperty(); *pResult = 0; } void CPageSoundContainer::OnMenuSoundproperty() { SelectSoundObject(); if( m_SelectCur < 0 ) return; CSoundPropertyDlg Dlg; CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SSoundAsset SoundSelected; SoundMap.GetSoundAsset( m_SelectCur, SoundSelected ); Dlg.Init( SoundSelected ); if( Dlg.DoModal() == IDOK ) { Dlg.GetInfo( SoundSelected ); SoundMap.SetSoundAsset( m_SelectCur, SoundSelected ); SetSoundAsset( m_SelectCur, SoundSelected ); } } void CPageSoundContainer::SelectSoundObject() { m_SelectCur=m_SoundList.GetNextItem(-1,LVNI_SELECTED); if(m_SelectCur<0) return; } const char * FloatToChar( float fvalue ) { static char szBuffer[32]; sprintf( szBuffer, "%f", fvalue ); return szBuffer; } const char * IntToChar( int ivalue ) { static char szBuffer[32]; sprintf( szBuffer, "%d", ivalue ); return szBuffer; } void CPageSoundContainer::InsertSoundAsset( int index, SSoundAsset & Sound ) { m_SoundList.InsertItem( index, " " ); SetSoundAsset( index, Sound ); } void CPageSoundContainer::SetSoundAsset( int index, SSoundAsset & Sound ) { const char * szArrTriggerString[] = { "µé¾î°¥¶§¸¸", "³ª°¥¶§¸¸", "µÑ ´Ù" }; m_SoundList.SetItemText( index, 0, Sound.m_Name.c_str() ); //À̸§ m_SoundList.SetItemText( index, 1, szArrTriggerString[ Sound.m_eTrigger ] ); //Æ®¸®°Å m_SoundList.SetItemText( index, 2, Sound.m_b3DSound ? "Enable" : "Disable" ); //½ºÅ×·¹¿À, ¸ð³ë m_SoundList.SetItemText( index, 3, IntToChar( Sound.m_pWaveFileList->size() ) ); } void CPageSoundContainer::Load( const char * szFilename ) { UpdateAmbiences( true ); CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SoundMap.Create( szFilename ); UpdateList(); UpdateAmbiences(); } void CPageSoundContainer::Save( const char * szFilename ) { CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); SoundMap.Save( szFilename ); } void CPageSoundContainer::ClearAll() { UpdateAmbiences( true ); UpdateList(); } void CPageSoundContainer::UpdateList() { m_SoundList.DeleteAllItems(); CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); int nAssets = SoundMap.GetSoundAssetCount(); for( int i = 0; i < nAssets; i++ ) { SSoundAsset Asset; SoundMap.GetSoundAsset( i, Asset ); InsertSoundAsset( i, Asset ); } } void CPageSoundContainer::UpdateAmbiences( bool bClear ) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); CSectorSoundMap & SoundMap = CSectorSoundMap::GetInstance(); for( int SectorX = 0; SectorX < 30; SectorX++ ) { for( int SectorY = 0; SectorY < 30; SectorY++ ) { int nAmbiences = SoundMap.GetAmbienceCount( SectorX, SectorY ); int MeshCount = 0; for( int i = 0; i < nAmbiences; i++ ) { SAmbience * pAmb = SoundMap.GetAmbience( SectorX, SectorY, i ); vector3 vecPos( pAmb->m_fPosX, pAmb->m_fPosY, pAmb->m_fPosZ ); if( bClear ) { av->m_SceneManager->m_MapStorage.DelMeshMap( vecPos.x, vecPos.y, vecPos.z, pAmb->lObjectSceneID ); } else { matrix matPos; matPos.Translation( vecPos ); av->m_SceneManager->m_MapStorage.AddMeshMap( vecPos.x, vecPos.y, vecPos.z, "Sound.R3S", matPos, false, false ); pAmb->lObjectSceneID = av->m_SceneManager->m_MapStorage.m_TotalObjectSceneCount-1; } MeshCount++; } assert( MeshCount == nAmbiences ); } } if( bClear ) SoundMap.Destroy(); } void CPageSoundContainer::OnBegindragListSound(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here SelectSoundObject(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->ChangeMouseInterface(80); *pResult = 0; } void CPageSoundContainer::AddSound( vector3 & vPos, long ObjSceneID ) { CSectorSoundMap & soundMap = CSectorSoundMap::GetInstance(); SAmbience tmp; SelectSoundObject(); tmp.m_SoundAssetID = m_SelectCur; tmp.m_fPosX = vPos.x; tmp.m_fPosY = vPos.y; tmp.m_fPosZ = vPos.z; tmp.m_fMinDistance = 500.0f; //¿ì¼± Àӽ÷Π°íÁ¤°ªÀ» ÁöÁ¤ÇØÁÜ tmp.m_fMaxDistance = 700.0f; tmp.lObjectSceneID = ObjSceneID; soundMap.AddAmbience( tmp ); }