diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/cstrike/VGUI/buypreset_panel.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/cstrike/VGUI/buypreset_panel.cpp')
| -rw-r--r-- | game/client/cstrike/VGUI/buypreset_panel.cpp | 447 |
1 files changed, 447 insertions, 0 deletions
diff --git a/game/client/cstrike/VGUI/buypreset_panel.cpp b/game/client/cstrike/VGUI/buypreset_panel.cpp new file mode 100644 index 0000000..321984b --- /dev/null +++ b/game/client/cstrike/VGUI/buypreset_panel.cpp @@ -0,0 +1,447 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#include "cbase.h" + +#include "weapon_csbase.h" +#include "cs_ammodef.h" + +#include <vgui/IVGui.h> +#include <vgui/IScheme.h> +#include <vgui/ISurface.h> +#include <vgui_controls/Label.h> +#include <vgui/ILocalize.h> +#include "vgui_controls/BuildGroup.h" +#include "vgui_controls/BitmapImagePanel.h" +#include "vgui_controls/TextEntry.h" +#include "vgui_controls/TextImage.h" +#include "vgui_controls/RichText.h" +#include "vgui_controls/QueryBox.h" +#include "career_box.h" +#include "buypreset_listbox.h" +#include "buypreset_weaponsetlabel.h" +#include "backgroundpanel.h" + +#include "cstrike/bot/shared_util.h" + +using namespace vgui; + +const float horizTitleRatio = 18.0f/68.0f; + +//-------------------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------------------- +/* +class PresetNameTextEntry : public TextEntry +{ +public: + PresetNameTextEntry(Panel *parent, CBuyPresetEditMainMenu *menu, const char *name ) : TextEntry( parent, name ) + { + m_pMenu = menu; + } + + virtual void FireActionSignal() + { + TextEntry::FireActionSignal(); + if ( m_pMenu ) + { + m_pMenu->SetDirty(); + } + } + +private: + CBuyPresetEditMainMenu *m_pMenu; +}; +*/ + +//-------------------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------------------- +int GetScaledValue( HScheme hScheme, int unscaled ) +{ + int val = scheme()->GetProportionalScaledValueEx( hScheme, unscaled ); + return GetAlternateProportionalValueFromScaled( hScheme, val ); +} + +//-------------------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------------------- +class PresetBackgroundPanel : public vgui::Panel +{ + typedef vgui::Panel BaseClass; + +public: + PresetBackgroundPanel( vgui::Panel *parent, const char *panelName ) : BaseClass( parent, panelName ) + { + }; + + virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) + { + BaseClass::ApplySchemeSettings( pScheme ); + SetBorder( pScheme->GetBorder("ButtonBorder") ); + m_lineColor = pScheme->GetColor( "Border.Bright", Color( 0, 0, 0, 0 ) ); + } + + virtual void ApplySettings( KeyValues *inResourceData ) + { + BaseClass::ApplySettings( inResourceData ); + + m_lines.RemoveAll(); + KeyValues *lines = inResourceData->FindKey( "lines", false ); + if ( lines ) + { + KeyValues *line = lines->GetFirstValue(); + while ( line ) + { + const char *str = line->GetString( NULL, "" ); + Vector4D p; + int numPoints = sscanf( str, "%f %f %f %f", &p[0], &p[1], &p[2], &p[3] ); + if ( numPoints == 4 ) + { + m_lines.AddToTail( p ); + } + line = line->GetNextValue(); + } + } + } + + virtual void PaintBackground( void ) + { + BaseClass::PaintBackground(); + + vgui::surface()->DrawSetColor( m_lineColor ); + vgui::surface()->DrawSetTextColor( m_lineColor ); + for ( int i=0; i<m_scaledLines.Count(); ++i ) + { + int x1, x2, y1, y2; + + x1 = m_scaledLines[i][0]; + y1 = m_scaledLines[i][1]; + x2 = m_scaledLines[i][2]; + y2 = m_scaledLines[i][3]; + + vgui::surface()->DrawFilledRect( x1, y1, x2, y2 ); + } + } + + virtual void PerformLayout( void ) + { + m_scaledLines.RemoveAll(); + for ( int i=0; i<m_lines.Count(); ++i ) + { + int x1, x2, y1, y2; + + x1 = GetScaledValue( GetScheme(), m_lines[i][0] ); + y1 = GetScaledValue( GetScheme(), m_lines[i][1] ); + x2 = GetScaledValue( GetScheme(), m_lines[i][2] ); + y2 = GetScaledValue( GetScheme(), m_lines[i][3] ); + + if ( x1 == x2 ) + { + ++x2; + } + + if ( y1 == y2 ) + { + ++y2; + } + + m_scaledLines.AddToTail( Vector4D( x1, y1, x2, y2 ) ); + } + } + +private: + Color m_lineColor; + CUtlVector< Vector4D > m_lines; + CUtlVector< Vector4D > m_scaledLines; +}; + +//-------------------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------------------- +BuyPresetEditPanel::BuyPresetEditPanel( Panel *parent, const char *panelName, const char *resourceFilename, int fallbackIndex, bool editableName ) : BaseClass( parent, panelName ) +{ + SetProportional( parent->IsProportional() ); + if ( IsProportional() ) + { + m_baseWide = m_baseTall = scheme()->GetProportionalScaledValueEx( GetScheme(), 100 ); + } + else + { + m_baseWide = m_baseTall = 100; + } + SetSize( m_baseWide, m_baseTall ); + + m_fallbackIndex = fallbackIndex; + + m_pBgPanel = new PresetBackgroundPanel( this, "mainBackground" ); + + m_pTitleEntry = NULL; + m_pTitleLabel = NULL; + m_pCostLabel = NULL; + /* + m_pTitleEntry = new PresetNameTextEntry( this, dynamic_cast<CBuyPresetEditMainMenu *>(parent), "titleEntry" ); + m_pTitleLabel = new Label( this, "title", "" ); + m_pCostLabel = new Label( this, "cost", "" ); + */ + + m_pPrimaryWeapon = new WeaponLabel( this, "primary" ); + m_pSecondaryWeapon = new WeaponLabel( this, "secondary" ); + + m_pHEGrenade = new EquipmentLabel( this, "hegrenade" ); + m_pSmokeGrenade = new EquipmentLabel( this, "smokegrenade" ); + m_pFlashbangs = new EquipmentLabel( this, "flashbang" ); + + m_pDefuser = new EquipmentLabel( this, "defuser" ); + m_pNightvision = new EquipmentLabel( this, "nightvision" ); + + m_pArmor = new EquipmentLabel( this, "armor" ); + + if ( resourceFilename ) + { + LoadControlSettings( resourceFilename ); + } + + int x, y, w, h; + m_pBgPanel->GetBounds( x, y, w, h ); + + m_baseWide = x + w; + m_baseTall = y + h; + SetSize( m_baseWide, m_baseTall ); +} + +//-------------------------------------------------------------------------------------------------------------- +BuyPresetEditPanel::~BuyPresetEditPanel() +{ +} + +//-------------------------------------------------------------------------------------------------------------- +void BuyPresetEditPanel::SetWeaponSet( const WeaponSet *pWeaponSet, bool current ) +{ + // set to empty state + Reset(); + + // now fill in items + if ( pWeaponSet ) + { + if ( m_pTitleLabel ) + { + m_pTitleLabel->SetText( SharedVarArgs( "#Cstrike_BuyPresetChoice%d", m_fallbackIndex ) ); + } + if ( m_pTitleEntry ) + { + m_pTitleEntry->SetText( SharedVarArgs( "#Cstrike_BuyPresetChoice%d", m_fallbackIndex ) ); + } + + if ( m_pCostLabel ) + { + const int BufLen = 256; + wchar_t wbuf[BufLen]; + g_pVGuiLocalize->ConstructString( wbuf, sizeof( wbuf ), + g_pVGuiLocalize->Find( "#Cstrike_BuyPresetPlainCost" ), + 1, NumAsWString( pWeaponSet->FullCost() ) ); + m_pCostLabel->SetText( wbuf ); + } + + m_pPrimaryWeapon->SetWeapon( &pWeaponSet->m_primaryWeapon, true, true ); + m_pSecondaryWeapon->SetWeapon( &pWeaponSet->m_secondaryWeapon, false, true ); + + if ( pWeaponSet->m_HEGrenade ) + m_pHEGrenade->SetItem( "gfx/vgui/hegrenade_square", 1 ); + if ( pWeaponSet->m_smokeGrenade ) + m_pSmokeGrenade->SetItem( "gfx/vgui/smokegrenade_square", 1 ); + if ( pWeaponSet->m_flashbangs ) + m_pFlashbangs->SetItem( "gfx/vgui/flashbang_square", pWeaponSet->m_flashbangs ); + + if ( pWeaponSet->m_defuser ) + m_pDefuser->SetItem( "gfx/vgui/defuser", 1 ); + if ( pWeaponSet->m_nightvision ) + m_pNightvision->SetItem( "gfx/vgui/nightvision", 1 ); + + if ( pWeaponSet->m_armor ) + { + if ( pWeaponSet->m_helmet ) + m_pArmor->SetItem( "gfx/vgui/kevlar_helmet", 1 ); + else + m_pArmor->SetItem( "gfx/vgui/kevlar", 1 ); + } + } +} + +//-------------------------------------------------------------------------------------------------------------- +void BuyPresetEditPanel::SetText( const wchar_t *text ) +{ + if ( !text ) + text = L""; + if ( m_pTitleLabel ) + { + m_pTitleLabel->SetText( text ); + } + if ( m_pTitleEntry ) + { + m_pTitleEntry->SetText( text ); + } + InvalidateLayout(); +} + +//-------------------------------------------------------------------------------------------------------------- +/** + * Handle command callbacks + */ +void BuyPresetEditPanel::OnCommand( const char *command ) +{ + if (stricmp(command, "close")) + { + PostActionSignal( new KeyValues("Command", "command", SharedVarArgs( "%s %d", command, m_fallbackIndex )) ); + } + + BaseClass::OnCommand(command); +} + +//-------------------------------------------------------------------------------------------------------------- +void BuyPresetEditPanel::ApplySchemeSettings(IScheme *pScheme) +{ + BaseClass::ApplySchemeSettings(pScheme); + SetBgColor( Color( 0, 0, 0, 0 ) ); + + IBorder *pBorder = NULL; + + int i; + + for (i = 0; i < GetChildCount(); i++) + { + // perform auto-layout on the child panel + Panel *child = GetChild(i); + if (!child) + continue; + + if ( !stricmp( "button", child->GetClassName() ) ) + { + Button *pButton = dynamic_cast<Button *>(child); + if ( pButton ) + { + pButton->SetDefaultBorder( pBorder ); + pButton->SetDepressedBorder( pBorder ); + pButton->SetKeyFocusBorder( pBorder ); + } + } + } + + pBorder = pScheme->GetBorder("BuyPresetButtonBorder"); + + const int NumButtons = 4; + const char * buttonNames[4] = { "editPrimary", "editSecondary", "editGrenades", "editEquipment" }; + for ( i=0; i<NumButtons; ++i ) + { + Panel *pPanel = FindChildByName( buttonNames[i] ); + if ( pPanel ) + { + pPanel->SetBorder( pBorder ); + if ( !stricmp( "button", pPanel->GetClassName() ) ) + { + Button *pButton = dynamic_cast<Button *>(pPanel); + if ( pButton ) + { + pButton->SetDefaultBorder( pBorder ); + pButton->SetDepressedBorder( pBorder ); + pButton->SetKeyFocusBorder( pBorder ); + + Color fgColor, bgColor; + fgColor = GetSchemeColor("Label.TextDullColor", GetFgColor(), pScheme); + bgColor = Color( 0, 0, 0, 0 ); + pButton->SetDefaultColor( fgColor, bgColor ); + } + } + } + } +} + +//-------------------------------------------------------------------------------------------------------------- +/** + * Overrides EditablePanel's resizing of children to scale them proportionally to the main panel's change. + */ +void BuyPresetEditPanel::OnSizeChanged( int wide, int tall ) +{ + if ( !m_baseWide ) + m_baseWide = 1; + if ( !m_baseTall ) + m_baseTall = 1; + + Panel::OnSizeChanged(wide, tall); + InvalidateLayout(); + + if ( wide == m_baseWide && tall == m_baseTall ) + { + Repaint(); + return; + } + + float xScale = wide / (float) m_baseWide; + float yScale = tall / (float) m_baseTall; + + for (int i = 0; i < GetChildCount(); i++) + { + // perform auto-layout on the child panel + Panel *child = GetChild(i); + if (!child) + continue; + + int x, y, w, t; + child->GetBounds(x, y, w, t); + + int newX = (int) x * xScale; + int newY = (int) y * yScale; + int newW = (int) (x+w) * xScale - newX; + int newT = (int) t * yScale; + + // make sure the child isn't too big... + if(newX+newW>wide) + { + continue; + } + + if(newY+newT>tall) + { + continue; + } + + child->SetBounds(newX, newY, newW, newT); + child->InvalidateLayout(); + } + Repaint(); + + // update the baselines + m_baseWide = wide; + m_baseTall = tall; +} + +//-------------------------------------------------------------------------------------------------------------- +void BuyPresetEditPanel::Reset() +{ + if ( m_pTitleLabel ) + { + m_pTitleLabel->SetText( "#Cstrike_BuyPresetNewChoice" ); + } + if ( m_pTitleEntry ) + { + m_pTitleEntry->SetText( "#Cstrike_BuyPresetNewChoice" ); + } + if ( m_pCostLabel ) + { + m_pCostLabel->SetText( "" ); + } + + BuyPresetWeapon weapon; + m_pPrimaryWeapon->SetWeapon( &weapon, true, false ); + m_pSecondaryWeapon->SetWeapon( &weapon, false, false ); + + m_pHEGrenade->SetItem( NULL, 1 ); + m_pSmokeGrenade->SetItem( NULL, 1 ); + m_pFlashbangs->SetItem( NULL, 1 ); + + m_pDefuser->SetItem( NULL, 1 ); + m_pNightvision->SetItem( NULL, 1 ); + + m_pArmor->SetItem( NULL, 1 ); +} + +//-------------------------------------------------------------------------------------------------------------- |