summaryrefslogtreecommitdiff
path: root/game/client/cstrike/VGUI/buypreset_panel.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/cstrike/VGUI/buypreset_panel.cpp
downloadarchived-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.cpp447
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 );
+}
+
+//--------------------------------------------------------------------------------------------------------------