Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
311 lines
7.8 KiB
C++
311 lines
7.8 KiB
C++
// PageSoundContainer.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "worldcreator.h"
|
|
#include "PageSoundContainer.h"
|
|
#include "MainFrm.h"
|
|
#include "WorldCreatorView.h"
|
|
#include "SoundPropertyDlg.h"
|
|
#include <AmbienceStruct.h>
|
|
#include <SectorSoundMap.h>
|
|
#include <assert.h>
|
|
|
|
#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 );
|
|
}
|