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.
285 lines
7.1 KiB
285 lines
7.1 KiB
//========= 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 ); |
|
} |
|
}
|
|
|