mirror of
https://github.com/FWGS/hlsdk-xash3d
synced 2024-11-25 19:29:13 +01:00
267 lines
6.7 KiB
C++
267 lines
6.7 KiB
C++
//========= Copyright (c) 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" );
|
|
}
|
|
}
|
|
|