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.
1296 lines
37 KiB
1296 lines
37 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
// Author: Matthew D. Campbell (matt@turtlerockstudios.com), 2003 |
|
|
|
#include "cbase.h" |
|
|
|
#include <vgui/KeyCode.h> |
|
#include "career_box.h" |
|
#include "career_button.h" |
|
#include "buypreset_listbox.h" |
|
#include <vgui_controls/TextImage.h> |
|
#include <vgui_controls/CheckButton.h> |
|
#include <vgui_controls/ComboBox.h> |
|
#include "cs_ammodef.h" |
|
#include "weapon_csbase.h" |
|
#include "backgroundpanel.h" |
|
#include "cs_gamerules.h" |
|
|
|
#include <vgui/IInput.h> |
|
#include "bot/shared_util.h" |
|
#include <vgui_controls/BitmapImagePanel.h> |
|
#include <vgui/ISurface.h> |
|
#include <vgui/ILocalize.h> |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
#ifndef max |
|
#define max(a,b) (((a) > (b)) ? (a) : (b)) |
|
#endif |
|
|
|
using namespace vgui; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
class ConVarToggleCheckButton : public vgui::CheckButton |
|
{ |
|
DECLARE_CLASS_SIMPLE( ConVarToggleCheckButton, vgui::CheckButton ); |
|
|
|
public: |
|
ConVarToggleCheckButton( vgui::Panel *parent, const char *panelName, const char *text ); |
|
~ConVarToggleCheckButton(); |
|
|
|
virtual void SetSelected( bool state ); |
|
|
|
virtual void Paint(); |
|
|
|
void Reset(); |
|
void ApplyChanges(); |
|
bool HasBeenModified(); |
|
void SetConVar( const char *name ); |
|
|
|
virtual void ApplySettings( KeyValues *inResourceData ) |
|
{ |
|
BaseClass::ApplySettings( inResourceData ); |
|
|
|
const char *name = inResourceData->GetString( "convar", NULL ); |
|
if ( name ) |
|
{ |
|
SetConVar( name ); |
|
} |
|
} |
|
|
|
private: |
|
MESSAGE_FUNC( OnButtonChecked, "CheckButtonChecked" ); |
|
|
|
char *m_pszCvarName; |
|
bool m_bStartValue; |
|
}; |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
ConVarToggleCheckButton::ConVarToggleCheckButton( Panel *parent, const char *panelName, const char *text ) |
|
: CheckButton( parent, panelName, text ) |
|
{ |
|
m_pszCvarName = NULL; |
|
AddActionSignalTarget( this ); |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
ConVarToggleCheckButton::~ConVarToggleCheckButton() |
|
{ |
|
if ( m_pszCvarName ) |
|
delete[] m_pszCvarName; |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::SetConVar( const char *name ) |
|
{ |
|
if ( m_pszCvarName ) |
|
delete[] m_pszCvarName; |
|
|
|
m_pszCvarName = CloneString( name ); |
|
|
|
if (m_pszCvarName && *m_pszCvarName) |
|
{ |
|
Reset(); |
|
} |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::Paint() |
|
{ |
|
if ( !m_pszCvarName || !m_pszCvarName[ 0 ] ) |
|
{ |
|
BaseClass::Paint(); |
|
return; |
|
} |
|
|
|
// Look up current value |
|
ConVar const *var = cvar->FindVar( m_pszCvarName ); |
|
if ( !var ) |
|
return; |
|
bool value = var->GetBool(); |
|
|
|
if (value != m_bStartValue) |
|
{ |
|
SetSelected( value ); |
|
m_bStartValue = value; |
|
} |
|
BaseClass::Paint(); |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::ApplyChanges() |
|
{ |
|
m_bStartValue = IsSelected(); |
|
ConVar *var = (ConVar *)cvar->FindVar( m_pszCvarName ); |
|
if ( !var ) |
|
return; |
|
var->SetValue(m_bStartValue); |
|
|
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::Reset() |
|
{ |
|
ConVar const *var = cvar->FindVar( m_pszCvarName ); |
|
if ( !var ) |
|
return; |
|
m_bStartValue = var->GetBool(); |
|
SetSelected(m_bStartValue); |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
bool ConVarToggleCheckButton::HasBeenModified() |
|
{ |
|
return IsSelected() != m_bStartValue; |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::SetSelected( bool state ) |
|
{ |
|
BaseClass::SetSelected( state ); |
|
|
|
if ( !m_pszCvarName || !m_pszCvarName[ 0 ] ) |
|
return; |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void ConVarToggleCheckButton::OnButtonChecked() |
|
{ |
|
if (HasBeenModified()) |
|
{ |
|
PostActionSignal(new KeyValues("ControlModified")); |
|
} |
|
} |
|
|
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
CCareerBaseBox::CCareerBaseBox(Panel *parent, const char *panelName, bool loadResources, bool useCareerButtons) : Frame(parent, panelName, false) |
|
{ |
|
// @TODO: SetScheme("CareerBoxScheme"); |
|
SetScheme("ClientScheme"); |
|
SetProportional( true ); |
|
SetMoveable(false); |
|
SetSizeable(false); |
|
|
|
m_bgColor = Color( 0, 0, 0, 0 ); |
|
m_borderColor = Color( 0, 0, 0, 0 ); |
|
|
|
m_pTextLabel = new Label( this, "TextLabel", "" ); |
|
|
|
if ( useCareerButtons ) |
|
{ |
|
m_pOkButton = new CCareerButton( this, "OkButton", "", "", false ); |
|
m_pCancelButton = new CCareerButton( this, "CancelButton", "", "", false ); |
|
} |
|
else |
|
{ |
|
m_pOkButton = new Button( this, "OkButton", "" ); |
|
m_pCancelButton = new Button( this, "CancelButton", "" ); |
|
} |
|
m_pOkButton->SetVisible(false); |
|
if ( useCareerButtons ) |
|
{ |
|
m_buttons.PutElement( m_pOkButton ); |
|
m_buttons.PutElement( m_pCancelButton ); |
|
} |
|
m_cancelFocus = false; |
|
|
|
if (loadResources) |
|
{ |
|
const int BufLen = strlen(panelName) + 32; |
|
char *buf = new char[BufLen]; |
|
Q_snprintf( buf, BufLen, "Resource/Career/%s.res", panelName ); |
|
LoadControlSettings( buf ); |
|
delete[] buf; |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
vgui::Panel * CCareerBaseBox::CreateControlByName(const char *controlName) |
|
{ |
|
if ( Q_stricmp( controlName, "ConVarCheckButton" ) == 0 ) |
|
{ |
|
ConVarToggleCheckButton *button = new ConVarToggleCheckButton( NULL, controlName, "" ); |
|
m_conVarCheckButtons.PutElement( button ); |
|
return button; |
|
} |
|
|
|
return BaseClass::CreateControlByName( controlName ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::SetCancelButtonAsDefault() |
|
{ |
|
m_cancelFocus = true; |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::SetLabelText( const wchar_t *text ) |
|
{ |
|
m_pTextLabel->SetText(text); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::SetLabelText( const char *text ) |
|
{ |
|
m_pTextLabel->SetText(text); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::ApplySchemeSettings( vgui::IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings( pScheme ); |
|
|
|
for (int i=0; i<m_buttons.GetCount(); ++i) |
|
{ |
|
m_buttons[i]->SetArmedSound("UI/buttonrollover.wav"); |
|
m_buttons[i]->SetDepressedSound("UI/buttonclick.wav"); |
|
m_buttons[i]->SetReleasedSound("UI/buttonclickrelease.wav"); |
|
} |
|
|
|
m_bgColor = GetSchemeColor("Popup.BgColor", Color( 64, 64, 64, 255 ), pScheme); |
|
m_borderColor = GetSchemeColor("FgColor", Color( 64, 64, 64, 255 ), pScheme); |
|
|
|
SetBorder( pScheme->GetBorder( "BaseBorder" ) ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::PerformLayout( ) |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
int x, y, w, h; |
|
GetBounds(x, y, w, h); |
|
|
|
int screenWide, screenTall; |
|
GetHudSize( screenWide, screenTall ); |
|
if ( x + w/2 != screenWide/2 ) |
|
{ |
|
SetPos( screenWide/2 - w/2, screenTall/2 - h/2 ); |
|
GetBounds(x, y, w, h); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::PaintBackground( ) |
|
{ |
|
int wide, tall; |
|
GetSize( wide, tall ); |
|
|
|
DrawRoundedBackground( m_bgColor, wide, tall ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::PaintBorder( ) |
|
{ |
|
int wide, tall; |
|
GetSize( wide, tall ); |
|
|
|
DrawRoundedBorder( m_borderColor, wide, tall ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::ShowWindow() |
|
{ |
|
SetVisible( true ); |
|
SetEnabled( true ); |
|
MoveToFront(); |
|
|
|
if ( m_pCancelButton->IsVisible() && m_cancelFocus ) |
|
{ |
|
m_pCancelButton->RequestFocus(); |
|
} |
|
else if ( m_pOkButton->IsVisible() ) |
|
{ |
|
m_pOkButton->RequestFocus(); |
|
} |
|
else // handle message boxes with no button |
|
{ |
|
RequestFocus(); |
|
} |
|
|
|
InvalidateLayout(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::DoModal() |
|
{ |
|
ShowWindow(); |
|
input()->SetAppModalSurface(GetVPanel()); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::OnKeyCodeTyped(KeyCode code) |
|
{ |
|
if (code == KEY_ESCAPE) |
|
{ |
|
OnCommand("Cancel"); |
|
} |
|
else if (code == KEY_ENTER) |
|
{ |
|
BaseClass::OnKeyCodeTyped( KEY_SPACE ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnKeyCodeTyped(code); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::OnCommand(const char *command) |
|
{ |
|
KeyValues *okSettings = new KeyValues( "GetCommand" ); |
|
if ( m_pOkButton->RequestInfo( okSettings ) ) |
|
{ |
|
const char *okCommand = okSettings->GetString( "command", "Ok" ); |
|
if ( stricmp(command, okCommand) == 0 ) |
|
{ |
|
for (int i=0; i<m_conVarCheckButtons.GetCount(); ++i) |
|
{ |
|
m_conVarCheckButtons[i]->ApplyChanges(); |
|
} |
|
} |
|
} |
|
|
|
if (stricmp(command, "close")) |
|
{ |
|
PostActionSignal( new KeyValues("Command", "command", command) ); |
|
} |
|
|
|
BaseClass::OnCommand(command); |
|
|
|
Close(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CCareerBaseBox::AddButton( vgui::Button *pButton ) |
|
{ |
|
m_buttons.PutElement( pButton ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CCareerQueryBox::CCareerQueryBox(vgui::Panel *parent, const char *panelName, const char *resourceName) : CCareerBaseBox(parent, panelName, (resourceName == NULL)) |
|
{ |
|
if ( resourceName ) |
|
{ |
|
LoadControlSettings( resourceName ); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CCareerQueryBox::CCareerQueryBox(const char *title, const char *labelText, const char *panelName, vgui::Panel *parent) : CCareerBaseBox(parent, panelName) |
|
{ |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CCareerQueryBox::CCareerQueryBox(const wchar_t *title, const wchar_t *labelText, const char *panelName, vgui::Panel *parent) : CCareerBaseBox(parent, panelName) |
|
{ |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CCareerQueryBox::~CCareerQueryBox() |
|
{ |
|
} |
|
|
|
// sorted order weapon list ----------------------------------------------------------------------- |
|
const int NUM_SECONDARY_WEAPONS = 7; |
|
static CSWeaponID s_secondaryWeapons[NUM_SECONDARY_WEAPONS] = |
|
{ |
|
WEAPON_NONE, |
|
WEAPON_USP, |
|
WEAPON_GLOCK, |
|
WEAPON_DEAGLE, |
|
WEAPON_ELITE, |
|
WEAPON_P228, |
|
WEAPON_FIVESEVEN, |
|
}; |
|
|
|
const int NUM_PRIMARY_WEAPONS = 23; |
|
static CSWeaponID s_primaryWeapons[NUM_PRIMARY_WEAPONS] = |
|
{ |
|
WEAPON_NONE, |
|
|
|
// Assault Rifles |
|
CSWeaponID(-WEAPONTYPE_RIFLE), |
|
WEAPON_SG552, |
|
WEAPON_AUG, |
|
WEAPON_AK47, |
|
WEAPON_M4A1, |
|
WEAPON_GALIL, |
|
WEAPON_FAMAS, |
|
|
|
// Snipers |
|
CSWeaponID(-WEAPONTYPE_SNIPER_RIFLE), |
|
WEAPON_AWP, |
|
WEAPON_SG550, |
|
WEAPON_G3SG1, |
|
WEAPON_SCOUT, |
|
|
|
// SMG |
|
CSWeaponID(-WEAPONTYPE_SUBMACHINEGUN), |
|
WEAPON_P90, |
|
WEAPON_UMP45, |
|
WEAPON_MP5NAVY, |
|
WEAPON_MAC10, |
|
WEAPON_TMP, |
|
|
|
// Heavy |
|
CSWeaponID(-WEAPONTYPE_SHOTGUN), |
|
WEAPON_M249, |
|
WEAPON_XM1014, |
|
WEAPON_M3, |
|
// WEAPON_SHIELDGUN, |
|
}; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
class CWeaponButton : public vgui::Button |
|
{ |
|
typedef vgui::Button BaseClass; |
|
|
|
public: |
|
CWeaponButton( BuyPresetListBox *pParent, CSWeaponID weaponID, bool isPrimary ) : BaseClass( pParent->GetParent(), SharedVarArgs( "WeaponButton%d", weaponID ), "" ) |
|
{ |
|
m_isPrimary = isPrimary; |
|
m_pImage = NULL; |
|
m_pTitleImage = new TextImage( WeaponIDToDisplayName( weaponID ) ); |
|
m_pCostImage = new TextImage( L"" ); |
|
|
|
m_pListBox = pParent; |
|
BuyPresetWeapon weapon( weaponID ); |
|
SetWeapon( weapon ); |
|
} |
|
|
|
virtual ~CWeaponButton() { delete m_pTitleImage; delete m_pCostImage; } |
|
|
|
virtual void ApplySchemeSettings( IScheme *pScheme ); |
|
|
|
virtual Color GetBgColor() { return (IsCurrent()) ? m_selectedBgColor : Button::GetBgColor(); } |
|
virtual Color GetFgColor() { return (IsCurrent()) ? m_selectedFgColor : Button::GetFgColor(); } |
|
|
|
void SetCurrent() { s_current = this; } |
|
bool IsCurrent() const { return s_current == this; } |
|
|
|
void SetWeapon( const BuyPresetWeapon& weapon ); |
|
const BuyPresetWeapon& GetWeapon() { return m_weapon; } |
|
|
|
virtual void Paint(); |
|
virtual void PerformLayout(); |
|
virtual void PaintBorder() {} |
|
|
|
virtual void OnMousePressed( MouseCode code ) |
|
{ |
|
if ( code == MOUSE_LEFT ) |
|
{ |
|
SetCurrent(); |
|
m_pListBox->GetParent()->OnCommand( "select_weapon" ); |
|
} |
|
Button::OnMousePressed( code ); |
|
} |
|
|
|
virtual void OnMouseDoublePressed( MouseCode code ) |
|
{ |
|
if ( code == MOUSE_LEFT ) |
|
{ |
|
SetCurrent(); |
|
m_pListBox->GetParent()->OnCommand( "select_weapon" ); |
|
m_pListBox->GetParent()->OnCommand( "popup_ok" ); |
|
} |
|
Button::OnMouseDoublePressed( code ); |
|
} |
|
|
|
protected: |
|
static CWeaponButton * s_current; |
|
BuyPresetListBox * m_pListBox; |
|
BuyPresetWeapon m_weapon; |
|
|
|
IImage *m_pImage; |
|
TextImage *m_pTitleImage; |
|
TextImage *m_pCostImage; |
|
int m_imageWide; |
|
int m_imageTall; |
|
int m_imageX; |
|
int m_imageY; |
|
|
|
Color m_selectedBgColor; |
|
Color m_selectedFgColor; |
|
|
|
bool m_isPrimary; |
|
}; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CWeaponButton * CWeaponButton::s_current = NULL; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponButton::ApplySchemeSettings( IScheme *pScheme ) |
|
{ |
|
CWeaponButton * current = s_current; // save off current so Button::ApplySchemeSettings() can get the right colors |
|
s_current = NULL; |
|
Button::ApplySchemeSettings( pScheme ); |
|
m_selectedBgColor = GetSchemeColor( "Button.ArmedBgColor", Button::GetBgColor(), pScheme ); |
|
m_selectedFgColor = GetSchemeColor( "Button.ArmedTextColor", Button::GetFgColor(), pScheme ); |
|
s_current = current; |
|
m_pTitleImage->SetColor( pScheme->GetColor( "Button.TextColor", Color() ) ); |
|
m_pTitleImage->SetFont( pScheme->GetFont( "Default", IsProportional() ) ); |
|
m_pTitleImage->SetWrap( true ); |
|
m_pCostImage->SetColor( pScheme->GetColor( "Button.TextColor", Color() ) ); |
|
m_pCostImage->SetFont( pScheme->GetFont( "Default", IsProportional() ) ); |
|
m_pCostImage->SetWrap( true ); |
|
SetWeapon( m_weapon ); |
|
SetBorder( NULL ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponButton::SetWeapon( const BuyPresetWeapon& weapon ) |
|
{ |
|
m_weapon = weapon; |
|
if ( m_weapon.GetName() ) |
|
{ |
|
// weapon string |
|
const wchar_t * name = m_weapon.GetName(); |
|
m_pTitleImage->SetText( name ); |
|
|
|
// cost string |
|
CCSWeaponInfo *info = GetWeaponInfo( m_weapon.GetWeaponID() ); |
|
if ( info ) |
|
{ |
|
const int BufLen = 256; |
|
wchar_t wbuf[BufLen]; |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( info->GetWeaponPrice() ) ); |
|
m_pCostImage->SetText( wbuf ); |
|
} |
|
else |
|
{ |
|
m_pCostImage->SetText( L"" ); |
|
} |
|
} |
|
else |
|
{ |
|
m_pTitleImage->SetText( L"" ); |
|
m_pCostImage->SetText( L"" ); |
|
} |
|
|
|
m_pTitleImage->ResizeImageToContent(); |
|
m_pCostImage->ResizeImageToContent(); |
|
|
|
InvalidateLayout( true, false ); |
|
|
|
m_pImage = scheme()->GetImage( ImageFnameFromWeaponID( m_weapon.GetWeaponID(), m_isPrimary ), true ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponButton::PerformLayout() |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
// Calculate some sizes |
|
int oldWide, oldTall; |
|
GetSize( oldWide, oldTall ); |
|
|
|
const float IMAGE_PERCENT = 0.42f; |
|
const float TITLE_PERCENT = 0.45f; |
|
const float COST_PERCENT = 1.0f - TITLE_PERCENT - IMAGE_PERCENT; |
|
|
|
int maxTitleWide = (int) oldWide * TITLE_PERCENT; |
|
int maxImageWide = (int) oldWide * IMAGE_PERCENT; |
|
int maxCostWide = (int) oldWide * COST_PERCENT; |
|
int textTall = surface()->GetFontTall( m_pTitleImage->GetFont() ) * 2; |
|
if ( oldTall != textTall ) |
|
{ |
|
oldTall = textTall; |
|
SetSize( oldWide, oldTall ); |
|
m_pListBox->InvalidateLayout(); |
|
} |
|
|
|
// Position the weapon name |
|
{ |
|
m_pTitleImage->SetSize( maxTitleWide, oldTall ); |
|
m_pTitleImage->RecalculateNewLinePositions(); |
|
m_pTitleImage->ResizeImageToContent(); |
|
|
|
int textContentWide, textContentTall; |
|
m_pTitleImage->GetSize( textContentWide, textContentTall ); |
|
|
|
if ( textContentTall < textTall ) |
|
{ |
|
m_pTitleImage->SetSize( maxTitleWide, textContentTall ); |
|
m_pTitleImage->SetPos( maxImageWide, (textTall - textContentTall) / 2 ); |
|
} |
|
else |
|
{ |
|
m_pTitleImage->SetPos( maxImageWide, 0 ); |
|
} |
|
} |
|
|
|
// Position the weapon cost |
|
{ |
|
m_pCostImage->SetSize( maxCostWide, oldTall ); |
|
m_pCostImage->RecalculateNewLinePositions(); |
|
m_pCostImage->ResizeImageToContent(); |
|
|
|
int textContentWide, textContentTall; |
|
m_pCostImage->GetSize( textContentWide, textContentTall ); |
|
|
|
if ( textContentTall < textTall ) |
|
{ |
|
m_pCostImage->SetSize( maxCostWide, textContentTall ); |
|
m_pCostImage->SetPos( oldWide - maxCostWide, (textTall - textContentTall) / 2 ); |
|
} |
|
else |
|
{ |
|
m_pCostImage->SetPos( oldWide - maxCostWide, 0 ); |
|
} |
|
} |
|
|
|
|
|
// Position the weapon image |
|
m_pImage = scheme()->GetImage( ImageFnameFromWeaponID( m_weapon.GetWeaponID(), m_isPrimary ), true ); |
|
|
|
int maxImageTall = textTall; |
|
|
|
m_pImage->GetContentSize( m_imageWide, m_imageTall ); |
|
if ( m_imageTall > maxImageTall ) |
|
{ |
|
m_imageWide = (int) m_imageWide * 1.0f * maxImageTall / m_imageTall; |
|
m_imageTall = maxImageTall; |
|
} |
|
if ( m_imageWide > maxImageWide ) |
|
{ |
|
m_imageTall = (int) m_imageTall * 1.0f * maxImageWide / m_imageWide; |
|
m_imageWide = maxImageWide; |
|
} |
|
m_imageY = (textTall - m_imageTall) / 2; |
|
m_imageX = (((int) oldWide * IMAGE_PERCENT) - m_imageWide) / 2; |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponButton::Paint() |
|
{ |
|
if ( m_pImage ) |
|
{ |
|
m_pImage->SetSize( m_imageWide, m_imageTall ); |
|
m_pImage->SetPos( m_imageX, m_imageY ); |
|
m_pImage->Paint(); |
|
m_pImage->SetSize( 0, 0 ); |
|
} |
|
m_pTitleImage->Paint(); |
|
m_pCostImage->Paint(); |
|
|
|
BaseClass::Paint(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
class WeaponComboBox : public vgui::ComboBox |
|
{ |
|
public: |
|
WeaponComboBox( CWeaponSelectBox *parent, const char *name, int numEntries, bool editable ) |
|
: ComboBox( parent, name, numEntries, editable ) |
|
{ |
|
m_pBox = parent; |
|
} |
|
|
|
virtual void OnSetText( const wchar_t *newText ) |
|
{ |
|
ComboBox::OnSetText( newText ); |
|
if ( m_pBox ) |
|
m_pBox->UpdateClips(); |
|
} |
|
|
|
private: |
|
CWeaponSelectBox *m_pBox; |
|
}; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
CWeaponSelectBox::CWeaponSelectBox(vgui::Panel *parent, WeaponSet *pWeaponSet, bool isSecondary ) : CCareerBaseBox(parent, "BuyBoxSelectWeapon", false) |
|
{ |
|
m_pWeaponSet = pWeaponSet; |
|
m_isSecondary = isSecondary; |
|
|
|
m_numWeapons = NUM_PRIMARY_WEAPONS; |
|
m_weaponIDs = s_primaryWeapons; |
|
|
|
BuyPresetWeapon *weapon; |
|
if ( !m_isSecondary ) |
|
{ |
|
weapon = &m_pWeaponSet->m_primaryWeapon; |
|
if ( !IsPrimaryWeapon( weapon->GetWeaponID() ) && weapon->GetWeaponID() != WEAPON_NONE ) |
|
{ |
|
BuyPresetWeapon tmp( WEAPON_NONE ); |
|
m_pWeaponSet->m_primaryWeapon = tmp; |
|
} |
|
} |
|
else |
|
{ |
|
m_numWeapons = NUM_SECONDARY_WEAPONS; |
|
m_weaponIDs = s_secondaryWeapons; |
|
weapon = &m_pWeaponSet->m_secondaryWeapon; |
|
if ( !IsSecondaryWeapon( weapon->GetWeaponID() ) && weapon->GetWeaponID() != WEAPON_NONE ) |
|
{ |
|
BuyPresetWeapon tmp( WEAPON_NONE ); |
|
*weapon = tmp; |
|
} |
|
} |
|
|
|
int maxClips = 0; |
|
const CCSWeaponInfo *info = GetWeaponInfo( weapon->GetWeaponID() ); |
|
if ( info ) |
|
{ |
|
int maxRounds = GetCSAmmoDef()->MaxCarry( info->iAmmoType ); |
|
int buyClipSize = GetCSAmmoDef()->GetBuySize( info->iAmmoType ); |
|
maxClips = (buyClipSize > 0) ? ceil(maxRounds/(float)buyClipSize) : 0; |
|
} |
|
else |
|
{ |
|
maxClips = NUM_CLIPS_FOR_CURRENT; // so we can buy ammo for our current gun |
|
} |
|
|
|
m_pClips = new WeaponComboBox( this, "Clips", 2*maxClips+1, false ); |
|
m_pClips->SetOpenDirection( Menu::UP ); |
|
m_pListBox = new BuyPresetListBox( this, "WeaponListBox" ); |
|
m_pBullets = new Label( this, "bullets", "" ); |
|
|
|
int selectedWeaponIndex = -1; |
|
int i; |
|
for ( i=0; i<m_numWeapons; ++i ) |
|
{ |
|
if ( m_weaponIDs[i] < 0 ) |
|
{ |
|
const char *text = ""; |
|
switch ( (int)m_weaponIDs[i] ) |
|
{ |
|
case -WEAPONTYPE_RIFLE: |
|
text = "#Cstrike_BuyPresetCategoryRifle"; |
|
break; |
|
case -WEAPONTYPE_SNIPER_RIFLE: |
|
text = "#Cstrike_BuyPresetCategorySniper"; |
|
break; |
|
case -WEAPONTYPE_SUBMACHINEGUN: |
|
text = "#Cstrike_BuyPresetCategorySMG"; |
|
break; |
|
case -WEAPONTYPE_SHOTGUN: |
|
text = "#Cstrike_BuyPresetCategoryHeavy"; |
|
break; |
|
} |
|
Label *pLabel = new Label( m_pListBox, SharedVarArgs("weaponlabel%d", i), text ); |
|
m_pListBox->AddItem( pLabel, NULL ); |
|
} |
|
else |
|
{ |
|
CWeaponButton *pWeaponButton = new CWeaponButton( m_pListBox, m_weaponIDs[i], !m_isSecondary ); |
|
m_pListBox->AddItem( pWeaponButton, NULL ); |
|
if ( m_weaponIDs[i] == weapon->GetWeaponID() ) |
|
{ |
|
pWeaponButton->SetCurrent(); |
|
selectedWeaponIndex = i; |
|
} |
|
} |
|
} |
|
m_pListBox->MakeItemVisible( selectedWeaponIndex ); |
|
|
|
LoadControlSettings( "resource/UI/BuyPreset/BoxSelectWeapon.res" ); |
|
PopulateControls(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CWeaponSelectBox::~CWeaponSelectBox() |
|
{ |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::ActivateBuildMode() |
|
{ |
|
SetClipsVisible( true ); |
|
m_pListBox->DeleteAllItems(); |
|
BaseClass::ActivateBuildMode(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::SetClipsVisible( bool visible ) |
|
{ |
|
SetLabelVisible( visible ); |
|
m_pClips->SetVisible( visible ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::PopulateControls() |
|
{ |
|
BuyPresetWeapon *weapon; |
|
if (!m_isSecondary) |
|
{ |
|
weapon = &m_pWeaponSet->m_primaryWeapon; |
|
} |
|
else |
|
{ |
|
weapon = &m_pWeaponSet->m_secondaryWeapon; |
|
} |
|
|
|
int i; |
|
int maxClips = 0; |
|
const CCSWeaponInfo *info = GetWeaponInfo( weapon->GetWeaponID() ); |
|
if ( info ) |
|
{ |
|
int maxRounds = GetCSAmmoDef()->MaxCarry( info->iAmmoType ); |
|
int buyClipSize = GetCSAmmoDef()->GetBuySize( info->iAmmoType ); |
|
maxClips = (buyClipSize > 0) ? ceil(maxRounds/(float)buyClipSize) : 0; |
|
} |
|
else |
|
{ |
|
maxClips = NUM_CLIPS_FOR_CURRENT; |
|
} |
|
m_pClips->SetNumberOfEditLines( 2*maxClips+1 ); |
|
|
|
SetClipsVisible( maxClips != 0 ); |
|
|
|
m_pClips->DeleteAllItems(); |
|
|
|
// populate clips combo box |
|
m_pClips->AddItem( "#Cstrike_BuyPresetEditWeaponFullClips", NULL ); |
|
|
|
const int BufLen = 64; |
|
wchar_t buf[BufLen]; |
|
for ( i=maxClips-1; i>=0; --i ) |
|
{ |
|
const char* clipsOrMore = "#Cstrike_BuyPresetEditClipsOrMore"; |
|
const char* clips = "#Cstrike_BuyPresetEditClips"; |
|
if ( i == 1 ) |
|
{ |
|
clipsOrMore = "#Cstrike_BuyPresetEditClipOrMore"; |
|
clips = "#Cstrike_BuyPresetEditClip"; |
|
} |
|
g_pVGuiLocalize->ConstructString( buf, sizeof(buf), |
|
g_pVGuiLocalize->Find( clipsOrMore ), |
|
1, NumAsWString( i )); |
|
m_pClips->AddItem( buf, NULL ); |
|
g_pVGuiLocalize->ConstructString( buf, sizeof(buf), |
|
g_pVGuiLocalize->Find( clips ), |
|
1, NumAsWString( i )); |
|
m_pClips->AddItem( buf, NULL ); |
|
} |
|
|
|
// now select the proper entry |
|
int clipIndexToSelect = weapon->GetFillAmmo(); |
|
clipIndexToSelect += 2 * weapon->GetAmmoAmount(); |
|
clipIndexToSelect = maxClips*2 - clipIndexToSelect; |
|
m_pClips->ActivateItemByRow( clipIndexToSelect ); |
|
|
|
if ( m_isSecondary ) |
|
{ |
|
Panel *pPanel = FindChildByName( "TitleLabel" ); |
|
if ( pPanel ) |
|
{ |
|
const wchar_t *title = g_pVGuiLocalize->Find( "#Cstrike_BuyPresetWizardSecondary" ); |
|
if ( title ) |
|
PostMessage(pPanel, new KeyValues("SetText", "text", title)); |
|
} |
|
} |
|
|
|
UpdateClips(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::UpdateClips() |
|
{ |
|
if ( !m_pClips ) |
|
return; |
|
|
|
int numEntries = m_pClips->GetItemCount(); |
|
int activeID = m_pClips->GetActiveItem(); |
|
int combined = numEntries - activeID + 1; |
|
int numClips = combined/2 - 1; |
|
//bool isFill = (combined%2) != 0; |
|
|
|
BuyPresetWeapon *weapon; |
|
if (!m_isSecondary) |
|
{ |
|
weapon = &m_pWeaponSet->m_primaryWeapon; |
|
} |
|
else |
|
{ |
|
weapon = &m_pWeaponSet->m_secondaryWeapon; |
|
} |
|
|
|
const CCSWeaponInfo *info = GetWeaponInfo( weapon->GetWeaponID() ); |
|
if ( info ) |
|
{ |
|
int maxRounds = GetCSAmmoDef()->MaxCarry( info->iAmmoType ); |
|
int buyClipSize = GetCSAmmoDef()->GetBuySize( info->iAmmoType ); |
|
m_pBullets->SetVisible( true ); |
|
|
|
const int BufLen = 64; |
|
wchar_t buf[BufLen]; |
|
g_pVGuiLocalize->ConstructString( buf, sizeof(buf), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetsBullets" ), |
|
2, NumAsWString( MIN( maxRounds, numClips * buyClipSize ) ), NumAsWString( maxRounds ) ); |
|
m_pBullets->SetText( buf ); |
|
} |
|
else |
|
{ |
|
m_pBullets->SetVisible( false ); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::ApplySchemeSettings( IScheme *pScheme ) |
|
{ |
|
BaseClass::ApplySchemeSettings(pScheme); |
|
|
|
HFont font = pScheme->GetFont("Default", IsProportional()); |
|
int tall = surface()->GetFontTall(font) + 2; |
|
if ( font != INVALID_FONT ) |
|
{ |
|
Menu *pMenu = m_pClips->GetMenu(); |
|
pMenu->SetMenuItemHeight( tall ); |
|
} |
|
|
|
for ( int i=0; i<m_pListBox->GetItemCount(); ++i ) |
|
{ |
|
if ( m_weaponIDs[i] >= 0 ) |
|
{ |
|
CWeaponButton *pButton = static_cast< CWeaponButton * >(m_pListBox->GetItemPanel(i)); |
|
if ( pButton && pButton->IsCurrent() ) |
|
{ |
|
m_pListBox->MakeItemVisible( i ); |
|
} |
|
} |
|
else |
|
{ |
|
// it's a caption label |
|
Label *pLabel = static_cast< Label * >(m_pListBox->GetItemPanel(i)); |
|
if ( pLabel ) |
|
{ |
|
pLabel->SetContentAlignment( Label::a_center ); |
|
pLabel->SetBorder( pScheme->GetBorder( "ButtonBorder" ) ); |
|
pLabel->SetBgColor( pScheme->GetColor( "Frame.BgColor", Color( 0, 0, 0, 255 ) ) ); |
|
} |
|
} |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
CSWeaponID CWeaponSelectBox::GetSelectedWeaponID() |
|
{ |
|
int selectedIndex = -1; |
|
for ( int i=0; i<m_pListBox->GetItemCount(); ++i ) |
|
{ |
|
if ( m_weaponIDs[selectedIndex] >= 0 ) |
|
{ |
|
CWeaponButton *pButton = static_cast< CWeaponButton * >(m_pListBox->GetItemPanel(i)); |
|
if ( pButton && pButton->IsCurrent() ) |
|
{ |
|
selectedIndex = i; |
|
} |
|
} |
|
} |
|
if ( selectedIndex >= 0 ) |
|
{ |
|
return m_weaponIDs[selectedIndex]; |
|
} |
|
|
|
return WEAPON_NONE; |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CWeaponSelectBox::OnCommand(const char *command) |
|
{ |
|
if (!stricmp(command, "select_weapon")) |
|
{ |
|
CSWeaponID weaponID = GetSelectedWeaponID(); |
|
BuyPresetWeapon weapon( weaponID ); |
|
if ( m_isSecondary ) |
|
{ |
|
m_pWeaponSet->m_secondaryWeapon = weapon; |
|
} |
|
else |
|
{ |
|
m_pWeaponSet->m_primaryWeapon = weapon; |
|
} |
|
|
|
PopulateControls(); |
|
return; |
|
} |
|
|
|
if (!stricmp(command, "popup_ok")) |
|
{ |
|
if ( !m_pClips ) |
|
return; |
|
|
|
int numEntries = m_pClips->GetItemCount(); |
|
int activeID = m_pClips->GetActiveItem(); |
|
int combined = numEntries - activeID + 1; |
|
int numClips = combined/2 - 1; |
|
bool isFill = (combined%2) != 0; |
|
|
|
BuyPresetWeapon weapon( GetSelectedWeaponID() ); |
|
weapon.SetAmmoType( AMMO_CLIPS ); |
|
weapon.SetAmmoAmount( numClips ); |
|
weapon.SetFillAmmo( isFill ); |
|
|
|
if ( m_isSecondary ) |
|
{ |
|
m_pWeaponSet->m_secondaryWeapon = weapon; |
|
} |
|
else |
|
{ |
|
m_pWeaponSet->m_primaryWeapon = weapon; |
|
} |
|
BaseClass::OnCommand( command ); |
|
} |
|
else |
|
{ |
|
BaseClass::OnCommand(command); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
class EquipmentComboBox : public ComboBox |
|
{ |
|
public: |
|
EquipmentComboBox( CBaseSelectBox *parent, const char *name, int numEntries, bool editable ) |
|
: ComboBox( parent, name, numEntries, editable ) |
|
{ |
|
m_pBox = parent; |
|
} |
|
|
|
virtual void OnSetText( const wchar_t *newText ) |
|
{ |
|
ComboBox::OnSetText( newText ); |
|
m_pBox->OnControlChanged(); |
|
} |
|
|
|
private: |
|
CBaseSelectBox *m_pBox; |
|
}; |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
CGrenadeSelectBox::CGrenadeSelectBox( vgui::Panel *parent, WeaponSet *pWeaponSet ) : BaseClass( parent, "BuyBoxSelectGrenades", false ) |
|
{ |
|
m_pWeaponSet = pWeaponSet; |
|
|
|
// Equipment controls |
|
m_pHEGrenade = new EquipmentComboBox( this, "hegrenade", 2, false ); |
|
m_pSmokeGrenade = new EquipmentComboBox( this, "smokegrenade", 2, false ); |
|
m_pFlashbangs = new EquipmentComboBox( this, "flashbangs", 3, false ); |
|
|
|
// Equipment images |
|
m_pHEGrenadeImage = new EquipmentLabel( this, "HEGrenadeImage" ); |
|
m_pSmokeGrenadeImage = new EquipmentLabel( this, "SmokeGrenadeImage" ); |
|
m_pFlashbangImage = new EquipmentLabel( this, "FlashbangImage" ); |
|
|
|
m_pHELabel = new Label( this, "HECost", "" ); |
|
m_pSmokeLabel = new Label( this, "SmokeCost", "" ); |
|
m_pFlashLabel = new Label( this, "FlashCost", "" ); |
|
|
|
LoadControlSettings( "Resource/UI/BuyPreset/BoxSelectGrenades.res" ); |
|
|
|
// Add entries to the combo boxes |
|
m_pHEGrenade->AddItem( "0", NULL ); |
|
m_pHEGrenade->AddItem( "1", NULL ); |
|
|
|
m_pSmokeGrenade->AddItem( "0", NULL ); |
|
m_pSmokeGrenade->AddItem( "1", NULL ); |
|
|
|
m_pFlashbangs->AddItem( "0", NULL ); |
|
m_pFlashbangs->AddItem( "1", NULL ); |
|
m_pFlashbangs->AddItem( "2", NULL ); |
|
|
|
// populate the data |
|
m_pHEGrenade->ActivateItemByRow( m_pWeaponSet->m_HEGrenade ); |
|
m_pSmokeGrenade->ActivateItemByRow( m_pWeaponSet->m_smokeGrenade ); |
|
m_pFlashbangs->ActivateItemByRow( m_pWeaponSet->m_flashbangs ); |
|
|
|
m_pHEGrenadeImage->SetItem( "gfx/vgui/hegrenade_square", 1 ); |
|
m_pSmokeGrenadeImage->SetItem( "gfx/vgui/smokegrenade_square", 1 ); |
|
m_pFlashbangImage->SetItem( "gfx/vgui/flashbang_square", 1 ); |
|
|
|
OnControlChanged(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CGrenadeSelectBox::OnControlChanged() |
|
{ |
|
const int BufLen = 256; |
|
wchar_t wbuf[BufLen]; |
|
|
|
CCSWeaponInfo *info; |
|
|
|
int numGrenades; |
|
info = GetWeaponInfo( WEAPON_HEGRENADE ); |
|
if ( info ) |
|
{ |
|
numGrenades = m_pHEGrenade->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( info->GetWeaponPrice() * numGrenades ) ); |
|
m_pHELabel->SetText( wbuf ); |
|
} |
|
|
|
info = GetWeaponInfo( WEAPON_SMOKEGRENADE ); |
|
if ( info ) |
|
{ |
|
numGrenades = m_pSmokeGrenade->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( info->GetWeaponPrice() * numGrenades ) ); |
|
m_pSmokeLabel->SetText( wbuf ); |
|
} |
|
|
|
info = GetWeaponInfo( WEAPON_FLASHBANG ); |
|
if ( info ) |
|
{ |
|
numGrenades = m_pFlashbangs->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( info->GetWeaponPrice() * numGrenades ) ); |
|
m_pFlashLabel->SetText( wbuf ); |
|
} |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CGrenadeSelectBox::OnCommand( const char *command ) |
|
{ |
|
if (!stricmp(command, "popup_ok")) |
|
{ |
|
// stuff values back in m_pWeaponSet |
|
m_pWeaponSet->m_HEGrenade = m_pHEGrenade->GetActiveItem(); |
|
m_pWeaponSet->m_smokeGrenade = m_pSmokeGrenade->GetActiveItem(); |
|
m_pWeaponSet->m_flashbangs = m_pFlashbangs->GetActiveItem(); |
|
} |
|
BaseClass::OnCommand( command ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
//-------------------------------------------------------------------------------------------------------------- |
|
CEquipmentSelectBox::CEquipmentSelectBox( vgui::Panel *parent, WeaponSet *pWeaponSet ) : BaseClass( parent, "BuyBoxSelectEquipment", false ) |
|
{ |
|
m_pWeaponSet = pWeaponSet; |
|
|
|
// Equipment controls |
|
m_pKevlar = new EquipmentComboBox( this, "kevlar", 2, false ); |
|
m_pHelmet = new EquipmentComboBox( this, "helmet", 2, false ); |
|
m_pDefuser = new EquipmentComboBox( this, "defuser", 2, false ); |
|
m_pNightvision = new EquipmentComboBox( this, "nightvision", 2, false ); |
|
|
|
// Equipment labels |
|
m_pKevlarLabel = new Label( this, "kevlarCost", "" ); |
|
m_pHelmetLabel = new Label( this, "helmetCost", "" ); |
|
m_pDefuserLabel = new Label( this, "defuserCost", "" ); |
|
m_pNightvisionLabel = new Label( this, "nightvisionCost", "" ); |
|
|
|
// Equipment images |
|
m_pKevlarImage = new EquipmentLabel( this, "KevlarImage" ); |
|
m_pHelmetImage = new EquipmentLabel( this, "HelmetImage" ); |
|
m_pDefuserImage = new EquipmentLabel( this, "DefuserImage" ); |
|
m_pNightvisionImage = new EquipmentLabel( this, "NightvisionImage" ); |
|
|
|
LoadControlSettings( "Resource/UI/BuyPreset/BoxSelectEquipment.res" ); |
|
|
|
// Add entries to the combo boxes |
|
m_pKevlar->AddItem( "0", NULL ); |
|
m_pKevlar->AddItem( "1", NULL ); |
|
|
|
m_pHelmet->AddItem( "0", NULL ); |
|
m_pHelmet->AddItem( "1", NULL ); |
|
|
|
m_pDefuser->AddItem( "0", NULL ); |
|
m_pDefuser->AddItem( "1", NULL ); |
|
|
|
m_pNightvision->AddItem( "0", NULL ); |
|
m_pNightvision->AddItem( "1", NULL ); |
|
|
|
// populate the data |
|
m_pKevlar->ActivateItemByRow( ( m_pWeaponSet->m_armor > 0 ) ); |
|
m_pHelmet->ActivateItemByRow( ( m_pWeaponSet->m_armor && m_pWeaponSet->m_helmet ) ); |
|
m_pDefuser->ActivateItemByRow( m_pWeaponSet->m_defuser ); |
|
m_pNightvision->ActivateItemByRow( m_pWeaponSet->m_nightvision ); |
|
|
|
m_pKevlarImage->SetItem( "gfx/vgui/kevlar", 1 ); |
|
m_pHelmetImage->SetItem( "gfx/vgui/helmet", 1 ); |
|
m_pDefuserImage->SetItem( "gfx/vgui/defuser", 1 ); |
|
m_pNightvisionImage->SetItem( "gfx/vgui/nightvision", 1 ); |
|
|
|
OnControlChanged(); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CEquipmentSelectBox::OnControlChanged() |
|
{ |
|
const int BufLen = 256; |
|
wchar_t wbuf[BufLen]; |
|
|
|
int iHelmetPrice = HELMET_PRICE; |
|
int iKevlarPrice = KEVLAR_PRICE; |
|
int iNVGPrice = NVG_PRICE; |
|
|
|
if ( CSGameRules()->IsBlackMarket() ) |
|
{ |
|
iHelmetPrice = CSGameRules()->GetBlackMarketPriceForWeapon( WEAPON_ASSAULTSUIT ) - CSGameRules()->GetBlackMarketPriceForWeapon( WEAPON_KEVLAR ); |
|
iKevlarPrice = CSGameRules()->GetBlackMarketPriceForWeapon( WEAPON_KEVLAR ); |
|
iNVGPrice = CSGameRules()->GetBlackMarketPriceForWeapon( WEAPON_NVG ); |
|
} |
|
|
|
int count = m_pKevlar->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( iKevlarPrice * count ) ); |
|
m_pKevlarLabel->SetText( wbuf ); |
|
|
|
m_pHelmet->SetEnabled( count ); |
|
if ( !count && m_pHelmet->GetActiveItem() ) |
|
m_pHelmet->ActivateItemByRow( 0 ); |
|
|
|
count = m_pHelmet->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( iHelmetPrice * count ) ); |
|
m_pHelmetLabel->SetText( wbuf ); |
|
|
|
count = m_pDefuser->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( DEFUSEKIT_PRICE * count ) ); |
|
m_pDefuserLabel->SetText( wbuf ); |
|
|
|
count = m_pNightvision->GetActiveItem(); |
|
g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), |
|
g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), |
|
1, NumAsWString( NVG_PRICE * count ) ); |
|
m_pNightvisionLabel->SetText( wbuf ); |
|
} |
|
|
|
//-------------------------------------------------------------------------------------------------------------- |
|
void CEquipmentSelectBox::OnCommand( const char *command ) |
|
{ |
|
if (!stricmp(command, "popup_ok")) |
|
{ |
|
// stuff values back in m_pWeaponSet |
|
m_pWeaponSet->m_armor = m_pKevlar->GetActiveItem() ? 100 : 0; |
|
m_pWeaponSet->m_helmet = m_pWeaponSet->m_armor && m_pHelmet->GetActiveItem(); |
|
m_pWeaponSet->m_defuser = m_pDefuser->GetActiveItem(); |
|
m_pWeaponSet->m_nightvision = m_pNightvision->GetActiveItem(); |
|
} |
|
BaseClass::OnCommand( command ); |
|
} |
|
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
|