You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
6.7 KiB
266 lines
6.7 KiB
//========= Copyright © 1996-2002, Valve LLC, All rights reserved. ============ |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
|
|
#include "../cl_dll/hud.h" |
|
#include "../cl_dll/cl_util.h" |
|
#include "../cl_dll/vgui_teamfortressviewport.h" |
|
|
|
#include "vgui_actionsignal.h" |
|
#include "voice_vgui_tweakdlg.h" |
|
#include "voice_vgui_tweakdlg.h" |
|
#include "vgui_panel.h" |
|
#include "vgui_scrollbar.h" |
|
#include "vgui_slider.h" |
|
#include "ivoicetweak.h" |
|
#include "vgui_button.h" |
|
#include "vgui_checkbutton2.h" |
|
#include "vgui_helpers.h" |
|
|
|
#define ITEM_BORDER 40 // Border between text and scrollbars on left and right. |
|
#define VOICETWEAK_TRANSPARENCY 150 |
|
|
|
class TweakScroller |
|
{ |
|
public: |
|
TweakScroller(); |
|
void Init( Panel *pParent, char *pText, int yPos ); |
|
|
|
// Get/set value. Values are 0-1. |
|
float GetValue(); |
|
void SetValue( float val ); |
|
|
|
public: |
|
Label m_Label; |
|
ScrollBar m_Scroll; |
|
Slider m_Slider; |
|
}; |
|
|
|
|
|
class CVoiceVGUITweakDlg : public CMenuPanel, public ICheckButton2Handler |
|
{ |
|
typedef CMenuPanel BaseClass; |
|
public: |
|
CVoiceVGUITweakDlg(); |
|
~CVoiceVGUITweakDlg(); |
|
|
|
// CMenuPanel overrides. |
|
virtual void Open(); |
|
virtual void Close(); |
|
|
|
// ICheckButton2Handler overrides. |
|
virtual void StateChanged(CCheckButton2 *pButton); |
|
|
|
// Panel overrides. |
|
virtual void paintBackground(); |
|
|
|
private: |
|
int m_DlgWidth; |
|
int m_DlgHeight; |
|
|
|
Label m_Label; |
|
|
|
IVoiceTweak *m_pVoiceTweak; // Engine voice tweak API. |
|
|
|
TweakScroller m_MicVolume; |
|
TweakScroller m_SpeakerVolume; |
|
|
|
CCheckButton2 m_VoiceModEnable; |
|
|
|
Button m_Button_OK; |
|
}; |
|
|
|
bool g_bTweakDlgOpen = false; |
|
|
|
bool IsTweakDlgOpen() |
|
{ |
|
return g_bTweakDlgOpen; |
|
} |
|
|
|
// ------------------------------------------------------------------------ // |
|
// Global functions. |
|
// ------------------------------------------------------------------------ // |
|
static CVoiceVGUITweakDlg g_VoiceTweakDlg; |
|
|
|
CMenuPanel *GetVoiceTweakDlg() |
|
{ |
|
return &g_VoiceTweakDlg; |
|
} |
|
|
|
class CVoiceTweakOKButton : public ActionSignal |
|
{ |
|
public: |
|
virtual void actionPerformed( Panel *pPanel ) |
|
{ |
|
gViewPort->HideVGUIMenu(); |
|
} |
|
}; |
|
|
|
CVoiceTweakOKButton g_OKButtonSignal; |
|
|
|
// ------------------------------------------------------------------------ // |
|
// TweakScroller |
|
// ------------------------------------------------------------------------ // |
|
TweakScroller::TweakScroller() : |
|
m_Label( "" ), |
|
m_Scroll( 0, 0, 0, 0, false ), |
|
m_Slider( 0, 0, 10, 10, false ) |
|
{ |
|
} |
|
|
|
void TweakScroller::Init( Panel *pParent, char *pText, int yPos ) |
|
{ |
|
int parentWidth, parentHeight; |
|
|
|
pParent->getSize( parentWidth, parentHeight ); |
|
|
|
// Setup the volume scroll bar. |
|
m_Label.setParent( pParent ); |
|
m_Label.setFont( Scheme::sf_primary1 ); |
|
m_Label.setContentAlignment( vgui::Label::a_northwest ); |
|
m_Label.setBgColor( 0, 0, 0, 255 ); |
|
m_Label.setFgColor( 255, 255, 255, 0 ); |
|
m_Label.setPos( ITEM_BORDER, yPos ); |
|
m_Label.setSize( parentWidth / 2 - ITEM_BORDER, 20 ); |
|
m_Label.setText( pText ); |
|
m_Label.setVisible( true ); |
|
|
|
m_Slider.setRangeWindow( 10 ); |
|
m_Slider.setRangeWindowEnabled( true ); |
|
|
|
m_Scroll.setPos( parentWidth / 2 + ITEM_BORDER, yPos ); |
|
m_Scroll.setSize( parentWidth / 2 - ITEM_BORDER * 2, 20 ); |
|
m_Scroll.setSlider( &m_Slider ); |
|
m_Scroll.setParent( pParent ); |
|
m_Scroll.setRange( 0, 100 ); |
|
m_Scroll.setFgColor( 255, 255, 255, 0 ); |
|
m_Scroll.setBgColor( 255, 255, 255, 0 ); |
|
} |
|
|
|
float TweakScroller::GetValue() |
|
{ |
|
return m_Scroll.getValue() / 100.0f; |
|
} |
|
|
|
void TweakScroller::SetValue( float val ) |
|
{ |
|
m_Scroll.setValue( (int)( val * 100.0f ) ); |
|
} |
|
|
|
// ------------------------------------------------------------------------ // |
|
// CVoiceVGUITweakDlg implementation. |
|
// ------------------------------------------------------------------------ // |
|
|
|
CVoiceVGUITweakDlg::CVoiceVGUITweakDlg() |
|
: CMenuPanel( VOICETWEAK_TRANSPARENCY, false, 0, 0, 0, 0 ), |
|
m_Button_OK( "", 0, 0 ), |
|
m_Label( "" ) |
|
{ |
|
m_pVoiceTweak = NULL; |
|
m_Button_OK.addActionSignal( &g_OKButtonSignal ); |
|
m_Label.setBgColor( 255, 255, 255, 200 ); |
|
} |
|
|
|
CVoiceVGUITweakDlg::~CVoiceVGUITweakDlg() |
|
{ |
|
} |
|
|
|
void CVoiceVGUITweakDlg::Open() |
|
{ |
|
if( g_bTweakDlgOpen ) |
|
return; |
|
|
|
g_bTweakDlgOpen = true; |
|
|
|
m_DlgWidth = ScreenWidth; |
|
m_DlgHeight = ScreenHeight; |
|
|
|
m_pVoiceTweak = gEngfuncs.pVoiceTweak; |
|
|
|
// Tell the engine to start voice tweak mode (pipe voice output right to speakers). |
|
m_pVoiceTweak->StartVoiceTweakMode(); |
|
|
|
// Set our size. |
|
setPos( ( ScreenWidth - m_DlgWidth ) / 2, ( ScreenHeight - m_DlgHeight ) / 2 ); |
|
setSize( m_DlgWidth, m_DlgHeight ); |
|
|
|
int curY = ITEM_BORDER; |
|
m_MicVolume.Init( this, gHUD.m_TextMessage.BufferedLocaliseTextString( "#Mic_Volume" ), curY ); |
|
m_MicVolume.SetValue( m_pVoiceTweak->GetControlFloat( MicrophoneVolume ) ); |
|
curY = PanelBottom( &m_MicVolume.m_Label ); |
|
|
|
m_SpeakerVolume.Init( this, gHUD.m_TextMessage.BufferedLocaliseTextString( "#Speaker_Volume" ), curY ); |
|
m_SpeakerVolume.SetValue( m_pVoiceTweak->GetControlFloat( OtherSpeakerScale ) ); |
|
curY = PanelBottom( &m_SpeakerVolume.m_Label ); |
|
|
|
m_VoiceModEnable.setParent( this ); |
|
m_VoiceModEnable.SetImages( "gfx/vgui/checked.tga", "gfx/vgui/unchecked.tga" ); |
|
m_VoiceModEnable.SetText( "Enable Voice In This Mod" ); |
|
m_VoiceModEnable.setPos( ITEM_BORDER, curY ); |
|
m_VoiceModEnable.SetCheckboxLeft( false ); |
|
m_VoiceModEnable.SetChecked( !!gEngfuncs.pfnGetCvarFloat( "voice_modenable" ) ); |
|
m_VoiceModEnable.SetHandler( this ); |
|
|
|
// Setup the OK button. |
|
int buttonWidth, buttonHeight; |
|
|
|
m_Button_OK.setText( gHUD.m_TextMessage.BufferedLocaliseTextString( "#Menu_OK" ) ); |
|
m_Button_OK.getSize( buttonWidth, buttonHeight ); |
|
m_Button_OK.setPos(( m_DlgWidth - buttonWidth ) / 2, m_DlgHeight - buttonHeight - 3 ); |
|
m_Button_OK.setParent( this ); |
|
|
|
// Put the label on the top. |
|
m_Label.setBgColor( 0, 0, 0, 255 ); |
|
m_Label.setFgColor( 255, 255, 255, 0 ); |
|
m_Label.setText( gHUD.m_TextMessage.BufferedLocaliseTextString( "#Voice_Properties" ) ); |
|
|
|
int labelWidth, labelHeight; |
|
|
|
m_Label.getSize( labelWidth, labelHeight ); |
|
m_Label.setPos( ( m_DlgWidth - labelWidth ) / 2, 5 ); |
|
m_Label.setParent( this ); |
|
|
|
BaseClass::Open(); |
|
} |
|
|
|
void CVoiceVGUITweakDlg::Close() |
|
{ |
|
m_pVoiceTweak->EndVoiceTweakMode(); |
|
g_bTweakDlgOpen = false; |
|
|
|
BaseClass::Close(); |
|
} |
|
|
|
void CVoiceVGUITweakDlg::paintBackground() |
|
{ |
|
BaseClass::paintBackground(); |
|
|
|
// Draw our border. |
|
int w, h; |
|
|
|
getSize( w, h ); |
|
|
|
drawSetColor( 128, 128, 128, 1 ); |
|
drawOutlinedRect( 0, 0, w, h ); |
|
|
|
float volume = m_MicVolume.GetValue(); |
|
m_pVoiceTweak->SetControlFloat( MicrophoneVolume, volume ); |
|
|
|
m_pVoiceTweak->SetControlFloat( OtherSpeakerScale, m_SpeakerVolume.GetValue() ); |
|
} |
|
|
|
|
|
void CVoiceVGUITweakDlg::StateChanged( CCheckButton2 *pButton ) |
|
{ |
|
if( pButton == &m_VoiceModEnable ) |
|
{ |
|
if( pButton->IsChecked() ) |
|
gEngfuncs.pfnClientCmd( "voice_modenable 1" ); |
|
else |
|
gEngfuncs.pfnClientCmd( "voice_modenable 0" ); |
|
} |
|
} |
|
|
|
|