Files
Client/GameTools/WORLDCREATOR/PageSoundContainer.cpp
LGram16 dd97ddec92 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>
2025-11-29 20:17:20 +09:00

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 );
}