📄 menusound.cpp
字号:
// MenuSound.cpp: implementation of the CMenuSound class.
//
//////////////////////////////////////////////////////////////////////
#include "MenuBase.h"
#include "MainMenus.h"
#include "MenuSound.h"
#include "MenuCommands.h"
#include "BloodClientShell.h"
#include "ClientRes.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMenuSound::CMenuSound()
{
m_bSoundOn=DFALSE;
m_bMusicOn=DFALSE;
m_nSoundVolume=50;
m_nMusicVolume=50;
m_bSoundQuality=DFALSE;
m_bOldSoundQuality = DFALSE;
m_pSoundVolumeCtrl=DNULL;
m_pMusicVolumeCtrl=DNULL;
m_pSoundQualityCtrl=DNULL;
}
CMenuSound::~CMenuSound()
{
}
// Build the menu
void CMenuSound::Build()
{
// Make sure to call the base class
CMenuBase::Build();
CreateTitle("interface\\mainmenus\\options.pcx", IDS_MENU_TITLE_OPTIONS, m_pMainMenus->GetTitlePos());
SetOptionPos(m_pMainMenus->GetOptionsPos());
SetItemSpacing(5);
SetScrollWrap(DFALSE);
AddOnOffOption(IDS_MENU_AUDIO_SOUND, m_pMainMenus->GetSmallFont(), 100, &m_bSoundOn);
m_pSoundVolumeCtrl=AddSliderOption(IDS_MENU_AUDIO_SOUND_VOLUME, m_pMainMenus->GetSmallFont(), 100, m_pMainMenus->GetSurfaceSliderBar(), m_pMainMenus->GetSurfaceSliderTab(), &m_nSoundVolume);
m_pSoundQualityCtrl=AddOnOffOption(IDS_MENU_AUDIO_16BIT_SOUND, m_pMainMenus->GetSmallFont(), 100, &m_bSoundQuality);
AddOnOffOption(IDS_MENU_AUDIO_MUSIC, m_pMainMenus->GetSmallFont(), 100, &m_bMusicOn);
m_pMusicVolumeCtrl=AddSliderOption(IDS_MENU_AUDIO_MUSIC_VOLUME, m_pMainMenus->GetSmallFont(), 100, m_pMainMenus->GetSurfaceSliderBar(), m_pMainMenus->GetSurfaceSliderTab(), &m_nMusicVolume);
if ( m_pSoundVolumeCtrl )
{
m_pSoundVolumeCtrl->SetSliderRange(0, 50);
m_pSoundVolumeCtrl->SetSliderIncrement(5);
}
if ( m_pMusicVolumeCtrl )
{
m_pMusicVolumeCtrl->SetSliderRange(0, 50);
m_pMusicVolumeCtrl->SetSliderIncrement(5);
}
// Load the sound settings
LoadSoundSettings();
UpdateData(DFALSE);
// Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
EnableDisableControls();
}
// Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
void CMenuSound::EnableDisableControls()
{
if ( !m_bSoundOn )
{
if ( m_pSoundVolumeCtrl )
{
m_pSoundVolumeCtrl->Enable(DFALSE);
m_pSoundQualityCtrl->Enable(DFALSE);
}
}
else
{
if ( m_pSoundVolumeCtrl )
{
m_pSoundVolumeCtrl->Enable(DTRUE);
m_pSoundQualityCtrl->Enable(DTRUE);
}
}
if ( !m_bMusicOn )
{
if ( m_pMusicVolumeCtrl )
{
m_pMusicVolumeCtrl->Enable(DFALSE);
}
}
else
{
if ( m_pMusicVolumeCtrl )
{
m_pMusicVolumeCtrl->Enable(DTRUE);
}
}
}
// Load the sound settings
void CMenuSound::LoadSoundSettings()
{
// Load the sound/music on/off console variables
HCONSOLEVAR hVar=m_pClientDE->GetConsoleVar("soundenable");
if (hVar && m_pClientDE->GetVarValueFloat(hVar) == 1.0f)
{
m_bSoundOn=DTRUE;
}
else
{
m_bSoundOn=DFALSE;
}
hVar=m_pClientDE->GetConsoleVar("musicenable");
if (hVar && m_pClientDE->GetVarValueFloat(hVar) == 1.0f)
{
m_bMusicOn=DTRUE;
}
else
{
m_bMusicOn=DFALSE;
}
hVar=m_pClientDE->GetConsoleVar("soundvolume");
if (hVar)
{
m_nSoundVolume=(int)m_pClientDE->GetVarValueFloat(hVar);
}
hVar=m_pClientDE->GetConsoleVar("musicvolume");
if (hVar)
{
m_nMusicVolume=(int)m_pClientDE->GetVarValueFloat(hVar);
}
hVar=m_pClientDE->GetConsoleVar("sound16bit");
if (hVar)
{
m_bOldSoundQuality = m_bSoundQuality=(m_pClientDE->GetVarValueFloat(hVar) == 0.0f) ? DFALSE : DTRUE;
}
}
// Save the sound settings
void CMenuSound::SaveSoundSettings()
{
UpdateData(DTRUE);
if ( m_bSoundOn )
{
m_pClientDE->RunConsoleString("+soundenable 1");
}
else
{
m_pClientDE->RunConsoleString("+soundenable 0");
}
if ( m_bMusicOn )
{
m_pClientDE->RunConsoleString("+musicenable 1");
}
else
{
m_pClientDE->RunConsoleString("+musicenable 0");
}
char szTemp[256];
memset(szTemp, 0, sizeof(szTemp));
sprintf(szTemp, "+soundvolume %f", (float)m_nSoundVolume);
m_pClientDE->RunConsoleString(szTemp);
memset(szTemp, 0, sizeof(szTemp));
sprintf(szTemp, "+musicvolume %f", (float)m_nMusicVolume);
m_pClientDE->RunConsoleString(szTemp);
memset(szTemp, 0, sizeof(szTemp));
sprintf(szTemp, "+sound16bit %f", (m_bSoundQuality) ? 1.0f : 0.0f);
m_pClientDE->RunConsoleString(szTemp);
m_pClientDE->SetSoundVolume(m_nSoundVolume);
m_pClientDE->SetMusicVolume(m_nMusicVolume);
// Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
EnableDisableControls();
}
// Override the left and right controls so that the volumes can be changed
void CMenuSound::OnLeft()
{
CMenuBase::OnLeft();
SaveSoundSettings();
}
void CMenuSound::OnRight()
{
CMenuBase::OnRight();
SaveSoundSettings();
}
DDWORD CMenuSound::OnCommand(DDWORD dwCommand, DDWORD dwParam1, DDWORD dwParam2)
{
return 0;
}
// The focus has changed
void CMenuSound::OnFocus(DBOOL bFocus)
{
if (!bFocus)
{
// Only need to reinit sounds if quality changes.
if( m_bOldSoundQuality != m_bSoundQuality )
g_pBloodClientShell->InitSound();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -