Restructure repository to include all source folders
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>
This commit is contained in:
311
GameTools/WORLDCREATOR/SoundPropertyDlg.cpp
Normal file
311
GameTools/WORLDCREATOR/SoundPropertyDlg.cpp
Normal file
@@ -0,0 +1,311 @@
|
||||
// SoundPropertyDlg.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "worldcreator.h"
|
||||
#include "SoundPropertyDlg.h"
|
||||
|
||||
#include <AmbienceStruct.h>
|
||||
#include <BaseDataDefine.h>
|
||||
|
||||
#include <list>
|
||||
#include <string.h>
|
||||
#include <algorithm>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSoundPropertyDlg dialog
|
||||
|
||||
#define TRIGGER_IN "<22><><EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||
#define TRIGGER_OUT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
#define TRIGGER_IN_OUT "<22><> <20><>"
|
||||
#define ENABLE3DSOUND "Enable 3D Sound"
|
||||
#define DISABLE3DSOUND "Disable 3D Sound"
|
||||
|
||||
using namespace std;
|
||||
|
||||
CSoundPropertyDlg::CSoundPropertyDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CSoundPropertyDlg::IDD, pParent)
|
||||
, m_pSoundAsset( new SSoundAsset )
|
||||
|
||||
{
|
||||
//{{AFX_DATA_INIT(CSoundPropertyDlg)
|
||||
//}}AFX_DATA_INIT
|
||||
}
|
||||
|
||||
CSoundPropertyDlg::~CSoundPropertyDlg()
|
||||
{
|
||||
delete m_pSoundAsset;
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CSoundPropertyDlg)
|
||||
DDX_Control(pDX, IDC_NAME, m_editName);
|
||||
DDX_Control(pDX, IDC_COMBO_TRIGGERTYPE, m_TriggerType);
|
||||
DDX_Control(pDX, IDC_COMBO_STEREO, m_Stereo);
|
||||
DDX_Control(pDX, IDC_LIST_WAVFILELIST, m_WavFileList);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSoundPropertyDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(CSoundPropertyDlg)
|
||||
ON_BN_CLICKED(IDC_BUTTON_DELETESOUND, OnButtonDeletesound)
|
||||
ON_BN_CLICKED(IDC_BUTTON_INSERTSOUND, OnButtonInsertsound)
|
||||
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_WAVFILELIST, OnEndlabeleditListWavfilelist)
|
||||
ON_BN_CLICKED(IDC_BUTTON_SETSOUND, OnButtonSetsound)
|
||||
ON_NOTIFY(NM_DBLCLK, IDC_LIST_WAVFILELIST, OnDblclkListWavfilelist)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CSoundPropertyDlg message handlers
|
||||
|
||||
extern const char * FloatToChar( float fvalue );
|
||||
|
||||
float CharToFloat( const char * szStr )
|
||||
{
|
||||
float fvalue = 0.0f;
|
||||
if( szStr != NULL )
|
||||
sscanf( szStr, "%f", &fvalue );
|
||||
return fvalue;
|
||||
}
|
||||
|
||||
BOOL CSoundPropertyDlg::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
DWORD dwStyle;
|
||||
dwStyle = m_WavFileList.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0);
|
||||
dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES;
|
||||
m_WavFileList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle );
|
||||
|
||||
m_TriggerType.InsertString( 0, TRIGGER_IN );
|
||||
m_TriggerType.InsertString( 1, TRIGGER_OUT );
|
||||
m_TriggerType.InsertString( 2, TRIGGER_IN_OUT );
|
||||
m_Stereo.InsertString( 0, ENABLE3DSOUND );
|
||||
m_Stereo.InsertString( 1, DISABLE3DSOUND );
|
||||
|
||||
m_WavFileList.InsertColumn( 0, "<EFBFBD>ð<EFBFBD>", LVCFMT_LEFT, 80 );
|
||||
m_WavFileList.InsertColumn( 1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD>", LVCFMT_LEFT, 300 );
|
||||
|
||||
m_editName.SetWindowText( m_pSoundAsset->m_Name.c_str() );
|
||||
m_TriggerType.SetCurSel( m_pSoundAsset->m_eTrigger );
|
||||
m_Stereo.SetCurSel( m_pSoundAsset->m_b3DSound ? 0 : 1 );
|
||||
|
||||
int ItemNum = m_WavFileList.GetItemCount();
|
||||
if( m_pSoundAsset->m_pWaveFileList )
|
||||
{
|
||||
WAVEFILELIST * pWaveFileList = m_pSoundAsset->m_pWaveFileList;
|
||||
|
||||
for( WAVEFILELIST::iterator i = pWaveFileList->begin(); i != pWaveFileList->end(); i++ )
|
||||
{
|
||||
m_WavFileList.InsertItem( ItemNum, FloatToChar( i->first ) );
|
||||
m_WavFileList.SetItemText( ItemNum++, 1, i->second.c_str() );
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// EXCEPTION: OCX Property Pages should return FALSE
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::Init( const SSoundAsset & SoundAsset )
|
||||
{
|
||||
*m_pSoundAsset = SoundAsset;
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::GetInfo( SSoundAsset & SoundAsset )
|
||||
{
|
||||
SoundAsset = *m_pSoundAsset;
|
||||
}
|
||||
|
||||
bool std::greater<WAVEFILE>::operator()( const WAVEFILE & x, const WAVEFILE & y ) const
|
||||
{
|
||||
return x.first < y.first; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ĵǵ<C4B5><C7B5><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> ><3E><> <20>ݴ<EFBFBD><DDB4><EFBFBD> <<3C><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnOK()
|
||||
{
|
||||
CString str;
|
||||
m_editName.GetWindowText( str );
|
||||
m_pSoundAsset->m_Name = (const char*)str;
|
||||
|
||||
int curSel = m_TriggerType.GetCurSel();
|
||||
if( curSel < 0 || curSel > 2 )
|
||||
curSel = 0;
|
||||
|
||||
SSoundAsset::eTrigger Trigger[3] = { SSoundAsset::T_IN, SSoundAsset::T_OUT, SSoundAsset::T_IN_OUT };
|
||||
m_pSoundAsset->m_eTrigger = Trigger[ curSel ];
|
||||
|
||||
m_pSoundAsset->m_b3DSound = m_Stereo.GetCurSel() == 1 ? false : true;
|
||||
|
||||
if( m_pSoundAsset->m_pWaveFileList )
|
||||
{
|
||||
WAVEFILELIST * pWaveFileList = m_pSoundAsset->m_pWaveFileList;
|
||||
pWaveFileList->clear();
|
||||
|
||||
int nItem = m_WavFileList.GetItemCount();
|
||||
|
||||
for( int i = 0; i < nItem; i++ )
|
||||
{
|
||||
CString Time = m_WavFileList.GetItemText( i, 0 );
|
||||
CString WavFile = m_WavFileList.GetItemText( i, 1 );
|
||||
float fTime = CharToFloat( Time );
|
||||
|
||||
pWaveFileList->push_back( WAVEFILE( fTime, WavFile.GetBuffer( 0 ) ) );
|
||||
|
||||
std::greater<WAVEFILE> compareFunc;
|
||||
pWaveFileList->sort( compareFunc );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CDialog::OnOK();
|
||||
}
|
||||
|
||||
typedef WAVEFILELIST::iterator ITERATOR;
|
||||
|
||||
ITERATOR GetIterator( WAVEFILELIST & WavFileList, int index )
|
||||
{
|
||||
int c = 0;
|
||||
for( ITERATOR i = WavFileList.begin(); i != WavFileList.end(); i++ )
|
||||
{
|
||||
if( c >= index )
|
||||
{
|
||||
return i;
|
||||
}
|
||||
c++;
|
||||
}
|
||||
return WavFileList.end();
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnButtonInsertsound()
|
||||
{
|
||||
int Sel = m_WavFileList.GetNextItem( -1, LVNI_SELECTED );
|
||||
if( Sel < 0 )
|
||||
Sel = 0;
|
||||
|
||||
ITERATOR iter = GetIterator( *m_pSoundAsset->m_pWaveFileList, Sel );
|
||||
if( m_WavFileList.InsertItem( Sel, "0.0" ) == -1 )
|
||||
{
|
||||
MessageBox( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Waveȭ<65><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>!! ( at CSoundPropertyDlg::OnButtonInsertsound() )" );
|
||||
return;
|
||||
}
|
||||
|
||||
m_pSoundAsset->m_pWaveFileList->insert( iter, WAVEFILE( 0.0f, "" ) );
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnButtonDeletesound()
|
||||
{
|
||||
int Sel = m_WavFileList.GetNextItem( -1, LVNI_SELECTED );
|
||||
if( Sel < 0 )
|
||||
Sel = 0;
|
||||
|
||||
ITERATOR iter = GetIterator( *m_pSoundAsset->m_pWaveFileList, Sel );
|
||||
if( iter != m_pSoundAsset->m_pWaveFileList->end() )
|
||||
{
|
||||
if( !m_WavFileList.DeleteItem( Sel ) )
|
||||
{
|
||||
MessageBox( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Waveȭ<65><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. (at CSoundPropertyDlg::OnButtonInsertsound() )" );
|
||||
return;
|
||||
}
|
||||
|
||||
m_pSoundAsset->m_pWaveFileList->erase( iter );
|
||||
}
|
||||
}
|
||||
|
||||
bool CSoundPropertyDlg::IsExist( float fTime )
|
||||
{
|
||||
for( WAVEFILELIST::iterator i = m_pSoundAsset->m_pWaveFileList->begin(); i != m_pSoundAsset->m_pWaveFileList->end(); i++ )
|
||||
{
|
||||
if( i->first == fTime )
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnEndlabeleditListWavfilelist(NMHDR* pNMHDR, LRESULT* pResult)
|
||||
{
|
||||
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
||||
|
||||
int Sel = m_WavFileList.GetNextItem( -1, LVNI_SELECTED );
|
||||
if( Sel < 0 )
|
||||
return;
|
||||
|
||||
ITERATOR iter = GetIterator( *m_pSoundAsset->m_pWaveFileList, Sel );
|
||||
if( iter == m_pSoundAsset->m_pWaveFileList->end() )
|
||||
return;
|
||||
|
||||
CString Label = m_WavFileList.GetItemText( Sel, 0 );
|
||||
float fTime = CharToFloat( pDispInfo->item.pszText );
|
||||
|
||||
if( IsExist( fTime ) )
|
||||
{
|
||||
MessageBox( "<EFBFBD>̹<EFBFBD> <20><> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>." );
|
||||
*pResult = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if( fTime < 0.0f || fTime > 24.0f )
|
||||
{
|
||||
MessageBox( "0.0 ~ 24.0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǽ<EFBFBD><C7BC><EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~" );
|
||||
*pResult = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
iter->first = fTime;
|
||||
*pResult = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnButtonSetsound()
|
||||
{
|
||||
int Sel = m_WavFileList.GetNextItem( -1, LVNI_SELECTED );
|
||||
if( Sel < 0 )
|
||||
return;
|
||||
|
||||
ITERATOR iter = GetIterator( *m_pSoundAsset->m_pWaveFileList, Sel );
|
||||
if( iter == m_pSoundAsset->m_pWaveFileList->end() )
|
||||
return;
|
||||
|
||||
CFileDialog FileDlg( TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST
|
||||
, "Ogg Files (*.ogg)|*.ogg|Wave Files (*.wav)|*.wav|All Files (*.*)|*.*||"
|
||||
, this );
|
||||
|
||||
if( FileDlg.DoModal() == IDOK )
|
||||
{
|
||||
char szPathName[256], szSoundFilePath[256];
|
||||
strcpy( szPathName, FileDlg.GetPathName() );
|
||||
strlwr( szPathName );
|
||||
strcpy( szSoundFilePath, SOUNDFILEPATH );
|
||||
strlwr( szSoundFilePath );
|
||||
|
||||
char * pFinded = strstr( szPathName, szSoundFilePath );
|
||||
|
||||
if( pFinded == NULL )
|
||||
{
|
||||
char szMsg[256];
|
||||
sprintf( szMsg, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> %s<><73> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>丮<EFBFBD><E4B8AE> <20>־<EFBFBD><D6BE>߸<EFBFBD> <20>մϴ<D5B4>.", szSoundFilePath );
|
||||
MessageBox( szMsg );
|
||||
}
|
||||
else
|
||||
{
|
||||
pFinded += strlen( szSoundFilePath );
|
||||
m_WavFileList.SetItemText( Sel, 1, pFinded );
|
||||
iter->second = pFinded;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSoundPropertyDlg::OnDblclkListWavfilelist(NMHDR* pNMHDR, LRESULT* pResult)
|
||||
{
|
||||
OnButtonSetsound();
|
||||
*pResult = 0;
|
||||
}
|
||||
Reference in New Issue
Block a user