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>
178 lines
4.0 KiB
C++
178 lines
4.0 KiB
C++
// Sound3D.cpp: implementation of the CSound3D class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "DefineSound.h"
|
|
#include "Sound.h"
|
|
#include "Sound3D.h"
|
|
#include "SoundMgr.h"
|
|
|
|
|
|
CSound3D::CSound3D() : m_pSound( NULL ),
|
|
m_ppDS3DBuffer( NULL )
|
|
{
|
|
}
|
|
|
|
|
|
CSound3D::~CSound3D()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
|
|
bool CSound3D::Create( const char* strFileName, DWORD dwNumBuffers )
|
|
{
|
|
m_pSound = new CSound;
|
|
m_pSound->m_bSound3D = true;
|
|
|
|
if( !m_pSound->Create( strFileName, dwNumBuffers ) )
|
|
{
|
|
Destroy();
|
|
return false;
|
|
}
|
|
|
|
m_ppDS3DBuffer = new LPDIRECTSOUND3DBUFFER8[dwNumBuffers];
|
|
|
|
for( DWORD i = 0; i < dwNumBuffers; i++ )
|
|
{
|
|
m_ppDS3DBuffer[i] = Get3DSoundBufferInterface( i );
|
|
}
|
|
|
|
//=============================
|
|
// Create EAX
|
|
//=============================
|
|
// if( CSoundManager::_GetInstance()->GetInitProp()->m_bUseEAX )
|
|
// m_EAXBuffer.Create( m_pDS3DBuffer );
|
|
|
|
return true ;
|
|
}
|
|
|
|
|
|
void CSound3D::Destroy()
|
|
{
|
|
for( DWORD i = 0; i < m_pSound->m_dwNumBuffers; i++ )
|
|
{
|
|
SAFE_RELEASE( m_ppDS3DBuffer[i] );
|
|
SAFE_DELETE( m_ppDS3DBuffer[i] );
|
|
}
|
|
|
|
SAFE_DELETE_ARRAY( m_ppDS3DBuffer ) ;
|
|
SAFE_DELETE( m_pSound );
|
|
}
|
|
|
|
|
|
LPDIRECTSOUND3DBUFFER8 CSound3D::Get3DSoundBufferInterface( DWORD dwIndex )
|
|
{
|
|
LPDIRECTSOUND3DBUFFER8 pDS3DBuffer;
|
|
HRESULT hr = m_pSound->m_ppDSBuffer[dwIndex]->QueryInterface( IID_IDirectSound3DBuffer8, (void**)&pDS3DBuffer );
|
|
if( FAILED( hr ) )
|
|
{
|
|
MessageBox( NULL, "m_pSound->m_ppDSBuffer[dwIndex]->QueryInterface( IID_IDirectSound3DBuffer8, (void**)&pDS3DBuffer )",
|
|
"CSound3D::Get3DSoundBufferInterface", MB_OK );
|
|
return NULL;
|
|
}
|
|
|
|
return pDS3DBuffer;
|
|
}
|
|
|
|
|
|
void CSound3D::SetConeAngles( DWORD dwInside, DWORD dwOutside )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetConeAngles( dwInside, dwOutside, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetConeOrientation( D3DVECTOR& vOrientation )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetConeOrientation( vOrientation.x,
|
|
vOrientation.y, vOrientation.z, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetConeOutsideVolume( float fVolume )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetConeOutsideVolume( LinearToLogVol(fVolume), DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetMaxDistance( float fMaxDist )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetMaxDistance( fMaxDist, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetMinDistance( float fMinDist )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetMinDistance( fMinDist, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetMode( DWORD dwMode )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetMode( dwMode, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetPosition( D3DVECTOR& vPos )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetPosition( vPos.x, vPos.y, vPos.z, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::SetVelocity( const D3DVECTOR& vVel )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->SetVelocity( vVel.x, vVel.y, vVel.z, DS3D_IMMEDIATE );
|
|
}
|
|
|
|
|
|
void CSound3D::GetConeAngles( DWORD& dwInside, DWORD& dwOutside )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetConeAngles( &dwInside, &dwOutside );
|
|
}
|
|
|
|
|
|
void CSound3D::GetConeOrientation( D3DVECTOR& vOrientation )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetConeOrientation( &vOrientation );
|
|
}
|
|
|
|
|
|
void CSound3D::GetConeOutsideVolume( float& fVolume )
|
|
{
|
|
LPLONG V = NULL ;
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetConeOutsideVolume( V );
|
|
fVolume = LogToLinearVol( *V );
|
|
}
|
|
|
|
|
|
void CSound3D::GetMaxDistance( float& fMaxDist )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetMaxDistance( &fMaxDist );
|
|
}
|
|
|
|
|
|
void CSound3D::GetMinDistance( float& fMinDist )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetMinDistance( &fMinDist );
|
|
}
|
|
|
|
|
|
void CSound3D::GetMode( DWORD& dwMode )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetMode( &dwMode );
|
|
}
|
|
|
|
|
|
void CSound3D::GetPosition( D3DVECTOR& vPos )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetPosition( &vPos );
|
|
}
|
|
|
|
|
|
void CSound3D::GetVelocity( D3DVECTOR& vVel )
|
|
{
|
|
m_ppDS3DBuffer[m_pSound->m_dwLatestPlayIndex]->GetVelocity( &vVel );
|
|
}
|
|
|
|
|