diff options
Diffstat (limited to 'game/client/dod/VGUI/dodteammenu.cpp')
| -rw-r--r-- | game/client/dod/VGUI/dodteammenu.cpp | 285 |
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 ); + } +} |