summaryrefslogtreecommitdiff
path: root/game/client/dod/VGUI/dodteammenu.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/dod/VGUI/dodteammenu.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'game/client/dod/VGUI/dodteammenu.cpp')
-rw-r--r--game/client/dod/VGUI/dodteammenu.cpp285
1 files changed, 285 insertions, 0 deletions
diff --git a/game/client/dod/VGUI/dodteammenu.cpp b/game/client/dod/VGUI/dodteammenu.cpp
new file mode 100644
index 0000000..e5d4c58
--- /dev/null
+++ b/game/client/dod/VGUI/dodteammenu.cpp
@@ -0,0 +1,285 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "dodteammenu.h"
+#include <convar.h>
+#include "hud.h" // for gEngfuncs
+#include "c_dod_player.h"
+#include "dod_gamerules.h"
+#include <vgui/ILocalize.h>
+#include <vgui/IVGui.h>
+#include <vgui_controls/RichText.h>
+#include "c_dod_team.h"
+#include "IGameUIFuncs.h" // for key bindings
+
+extern IGameUIFuncs *gameuifuncs; // for key binding details
+
+using namespace vgui;
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CDODTeamMenu::CDODTeamMenu(IViewPort *pViewPort) : CTeamMenu(pViewPort)
+{
+ m_pBackground = SETUP_PANEL( new CDODMenuBackground( this ) );
+
+ m_pPanel = new EditablePanel( this, "TeamImagePanel" );// team image panel
+
+ m_pFirstButton = NULL;
+
+ LoadControlSettings("Resource/UI/TeamMenu.res"); // reload this to catch DODButtons
+
+ vgui::ivgui()->AddTickSignal( GetVPanel() );
+
+ m_iActiveTeam = TEAM_UNASSIGNED;
+ m_iLastPlayerCount = -1;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Destructor
+//-----------------------------------------------------------------------------
+CDODTeamMenu::~CDODTeamMenu()
+{
+}
+
+void CDODTeamMenu::ShowPanel(bool bShow)
+{
+ if ( bShow )
+ {
+ engine->CheckPoint( "TeamMenu" ); //MATTTODO what is this?
+
+ m_iTeamMenuKey = gameuifuncs->GetButtonCodeForBind( "changeteam" );
+ }
+
+ BaseClass::ShowPanel( bShow );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Make the first buttons page get displayed when the menu becomes visible
+//-----------------------------------------------------------------------------
+void CDODTeamMenu::SetVisible( bool state )
+{
+ BaseClass::SetVisible( state );
+
+ for( int i = 0; i< GetChildCount(); i++ ) // get all the buy buttons to performlayout
+ {
+ CDODMouseOverButton<EditablePanel> *button = dynamic_cast<CDODMouseOverButton<EditablePanel> *>(GetChild(i));
+ if ( button )
+ {
+ if( button == m_pFirstButton && state == true )
+ button->ShowPage();
+ else
+ button->HidePage();
+
+ button->InvalidateLayout();
+ }
+ }
+
+ if ( state )
+ {
+ Panel *pAutoButton = FindChildByName( "autobutton" );
+ if ( pAutoButton )
+ {
+ pAutoButton->RequestFocus();
+ }
+ }
+}
+
+void CDODTeamMenu::OnTick( void )
+{
+ C_DODTeam *pAllies = dynamic_cast<C_DODTeam *>( GetGlobalTeam(TEAM_ALLIES) );
+ C_DODTeam *pAxis = dynamic_cast<C_DODTeam *>( GetGlobalTeam(TEAM_AXIS) );
+
+ if ( !pAllies || !pAxis )
+ return;
+
+ static int iLastAlliesCount = -1;
+ static int iLastAxisCount = -1;
+
+ int iNumAllies = pAllies->Get_Number_Players();
+ int iNumAxis = pAxis->Get_Number_Players();
+
+ if ( iNumAllies != iLastAlliesCount )
+ {
+ iLastAlliesCount = iNumAllies;
+
+ wchar_t wbuf[128];
+
+ if ( iNumAllies == 1 )
+ {
+ g_pVGuiLocalize->ConstructString( wbuf, sizeof(wbuf), g_pVGuiLocalize->Find("#teammenu_numAllies_1"), 0 );
+ }
+ else
+ {
+ wchar_t wnum[6];
+ _snwprintf( wnum, ARRAYSIZE(wnum), L"%d", iNumAllies );
+ g_pVGuiLocalize->ConstructString( wbuf, sizeof(wbuf), g_pVGuiLocalize->Find("#teammenu_numAllies"), 1, wnum );
+ }
+
+ Label *pLabel = dynamic_cast<Label *>( FindChildByName("num_allies") );
+
+ if ( pLabel )
+ pLabel->SetText( wbuf );
+ }
+
+ if ( iNumAxis != iLastAxisCount )
+ {
+ iLastAxisCount = iNumAxis;
+
+ wchar_t wbuf[128];
+
+ if ( iNumAxis == 1 )
+ {
+ g_pVGuiLocalize->ConstructString( wbuf, sizeof(wbuf), g_pVGuiLocalize->Find("#teammenu_numAxis_1"), 0 );
+ }
+ else
+ {
+ wchar_t wnum[6];
+ _snwprintf( wnum, ARRAYSIZE(wnum), L"%d", iNumAxis );
+ g_pVGuiLocalize->ConstructString( wbuf, sizeof(wbuf), g_pVGuiLocalize->Find("#teammenu_numAxis"), 1, wnum );
+ }
+
+ Label *pLabel = dynamic_cast<Label *>( FindChildByName("num_axis") );
+
+ if ( pLabel )
+ pLabel->SetText( wbuf );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: called to update the menu with new information
+//-----------------------------------------------------------------------------
+void CDODTeamMenu::Update( void )
+{
+ BaseClass::Update();
+
+ C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer();
+
+ Assert( pPlayer );
+
+ const ConVar *allowspecs = cvar->FindVar( "mp_allowspectators" );
+
+ if ( allowspecs && allowspecs->GetBool() )
+ {
+ if ( !pPlayer || !DODGameRules() )
+ return;
+
+ SetVisibleButton("specbutton", true);
+ }
+ else
+ {
+ SetVisibleButton("specbutton", false );
+ }
+
+ if( pPlayer->GetTeamNumber() == TEAM_UNASSIGNED ) // we aren't on a team yet
+ {
+ SetVisibleButton("CancelButton", false);
+ }
+ else
+ {
+ SetVisibleButton("CancelButton", true);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: When a team button is pressed it triggers this function to
+// cause the player to join a team
+//-----------------------------------------------------------------------------
+void CDODTeamMenu::OnCommand( const char *command )
+{
+ if ( !FStrEq( command, "vguicancel" ) )
+ {
+ engine->ClientCmd( command );
+ }
+
+ BaseClass::OnCommand( command );
+
+ gViewPortInterface->ShowBackGround( false );
+ OnClose();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Sets the visibility of a button by name
+//-----------------------------------------------------------------------------
+void CDODTeamMenu::SetVisibleButton(const char *textEntryName, bool state)
+{
+ Button *entry = dynamic_cast<Button *>(FindChildByName(textEntryName));
+ if (entry)
+ {
+ entry->SetVisible(state);
+ }
+}
+
+void CDODTeamMenu::ApplySchemeSettings( IScheme *pScheme )
+{
+
+ BaseClass::ApplySchemeSettings(pScheme);
+}
+
+//-----------------------------------------------------------------------------
+// Draw nothing
+//-----------------------------------------------------------------------------
+void CDODTeamMenu::PaintBackground( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+Panel *CDODTeamMenu::CreateControlByName( const char *controlName )
+{
+ if( !Q_stricmp( "DODMouseOverPanelButton", controlName ) )
+ {
+ CDODMouseOverButton<EditablePanel> *newButton = new CDODMouseOverButton<EditablePanel>( this, NULL, m_pPanel );
+
+ if( !m_pFirstButton )
+ {
+ m_pFirstButton = newButton;
+ }
+ return newButton;
+ }
+ else if( !Q_stricmp( "DODButton", controlName ) )
+ {
+ return new CDODButton(this);
+ }
+ else if ( !Q_stricmp( "CIconPanel", controlName ) )
+ {
+ return new CIconPanel(this, "icon_panel");
+ }
+ else
+ {
+ return BaseClass::CreateControlByName( controlName );
+ }
+}
+
+void CDODTeamMenu::OnShowPage( char const *pagename )
+{
+ if ( !pagename || !pagename[ 0 ] )
+ return;
+
+ if ( !Q_stricmp( pagename, "allies") )
+ {
+ m_iActiveTeam = TEAM_ALLIES;
+ }
+ else if ( !Q_stricmp( pagename, "axis" ) )
+ {
+ m_iActiveTeam = TEAM_AXIS;
+ }
+}
+
+void CDODTeamMenu::OnKeyCodePressed(KeyCode code)
+{
+ if ( m_iTeamMenuKey != BUTTON_CODE_INVALID && m_iTeamMenuKey == code )
+ {
+ ShowPanel( false );
+ }
+ else
+ {
+ BaseClass::OnKeyCodePressed( code );
+ }
+}