289 lines
6.5 KiB
289 lines
6.5 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. |
|
public: |
|
virtual void Open(); |
|
virtual void Close(); |
|
|
|
|
|
// ICheckButton2Handler overrides. |
|
public: |
|
|
|
virtual void StateChanged(CCheckButton2 *pButton); |
|
|
|
|
|
|
|
// Panel overrides. |
|
public: |
|
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"); |
|
} |
|
} |
|
|
|
|