summaryrefslogtreecommitdiff
path: root/game/client/tf/tf_hud_menu_spy_disguise.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/tf/tf_hud_menu_spy_disguise.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/tf_hud_menu_spy_disguise.cpp')
-rw-r--r--game/client/tf/tf_hud_menu_spy_disguise.cpp671
1 files changed, 671 insertions, 0 deletions
diff --git a/game/client/tf/tf_hud_menu_spy_disguise.cpp b/game/client/tf/tf_hud_menu_spy_disguise.cpp
new file mode 100644
index 0000000..47f2016
--- /dev/null
+++ b/game/client/tf/tf_hud_menu_spy_disguise.cpp
@@ -0,0 +1,671 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#include "cbase.h"
+#include "hud.h"
+#include "hudelement.h"
+#include "c_tf_player.h"
+#include "iclientmode.h"
+#include "ienginevgui.h"
+#include <vgui/ILocalize.h>
+#include <vgui/ISurface.h>
+#include <vgui/IVGui.h>
+#include "c_baseobject.h"
+#include "inputsystem/iinputsystem.h"
+
+#ifdef SIXENSE
+#include "sixense/in_sixense.h"
+#endif
+
+#include "tf_hud_menu_spy_disguise.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+using namespace vgui;
+
+ConVar tf_simple_disguise_menu( "tf_simple_disguise_menu", NULL, FCVAR_ARCHIVE, "Use a more concise disguise selection menu." );
+
+//======================================
+
+DECLARE_HUDELEMENT( CHudMenuSpyDisguise );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CHudMenuSpyDisguise::CHudMenuSpyDisguise( const char *pElementName )
+ : CHudBaseBuildMenu( pElementName, "HudMenuSpyDisguise" )
+{
+ Panel *pParent = g_pClientMode->GetViewport();
+ SetParent( pParent );
+
+ SetHiddenBits( HIDEHUD_MISCSTATUS );
+
+ for ( int i=0; i<9; ++i )
+ {
+ char buf[32];
+ Q_snprintf( buf, sizeof(buf), "class_item_red_%d", i+1 );
+ m_pClassItems_Red[i] = new EditablePanel( this, buf );
+
+ m_pKeyIcons_Red[i] = new CIconPanel( m_pClassItems_Red[i], "NumberBg" );
+ m_pKeyLabels_Red[i] = new CExLabel( m_pClassItems_Red[i], "NumberLabel", "" );
+ m_pKeyLabelsNew_Red[i] = new CExLabel( m_pClassItems_Red[i], "NewNumberLabel", "" );
+
+ Q_snprintf( buf, sizeof(buf), "class_item_blue_%d", i+1 );
+ m_pClassItems_Blue[i] = new EditablePanel( this, buf );
+
+ m_pKeyIcons_Blue[i] = new CIconPanel( m_pClassItems_Blue[i], "NumberBg" );
+ m_pKeyLabels_Blue[i] = new CExLabel( m_pClassItems_Blue[i], "NumberLabel", "" );
+ m_pKeyLabelsNew_Blue[i] = new CExLabel( m_pClassItems_Blue[i], "NewNumberLabel", "" );
+ }
+
+ m_pKeyIcons_Category[0] = new CIconPanel( this, "NumberBg1" );
+ m_pKeyIcons_Category[1] = new CIconPanel( this, "NumberBg2" );
+ m_pKeyIcons_Category[2] = new CIconPanel( this, "NumberBg3" );
+ m_pKeyLabels_Category[0] = new CExLabel( this, "NumberLabel1", "" );
+ m_pKeyLabels_Category[1] = new CExLabel( this, "NumberLabel2", "" );
+ m_pKeyLabels_Category[2] = new CExLabel( this, "NumberLabel3", "" );
+
+ m_iShowingTeam = TF_TEAM_RED;
+
+ ListenForGameEvent( "spy_pda_reset" );
+ ListenForGameEvent( "gameui_hidden" );
+
+ m_iSelectedItem = -1;
+ m_iGroupSelection = -1;
+
+ m_pActiveSelection = NULL;
+
+ InvalidateLayout( false, true );
+
+ m_bInConsoleMode = false;
+
+ RegisterForRenderGroup( "mid" );
+}
+
+ConVar tf_disguise_menu_controller_mode( "tf_disguise_menu_controller_mode", "0", FCVAR_ARCHIVE, "Use console controller disguise menus. 1 = ON, 0 = OFF." );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::ApplySchemeSettings( IScheme *pScheme )
+{
+ bool bSteamController = ::input->IsSteamControllerActive();
+ bool b360Style = ( bSteamController || IsConsole() || tf_disguise_menu_controller_mode.GetBool() );
+
+ if ( b360Style )
+ {
+ // load control settings...
+ auto res_dir = bSteamController ? "resource/UI/disguise_menu_sc" : "resource/UI/disguise_menu_360";
+ LoadControlSettings( VarArgs("%s/HudMenuSpyDisguise.res", res_dir ) );
+
+ m_pClassItems_Red[0]->LoadControlSettings( VarArgs( "%s/scout_red.res", res_dir ) );
+ m_pClassItems_Red[1]->LoadControlSettings( VarArgs( "%s/soldier_red.res", res_dir ) );
+ m_pClassItems_Red[2]->LoadControlSettings( VarArgs( "%s/pyro_red.res", res_dir ) );
+ m_pClassItems_Red[3]->LoadControlSettings( VarArgs( "%s/demoman_red.res", res_dir ) );
+ m_pClassItems_Red[4]->LoadControlSettings( VarArgs( "%s/heavy_red.res", res_dir ) );
+ m_pClassItems_Red[5]->LoadControlSettings( VarArgs( "%s/engineer_red.res", res_dir ) );
+ m_pClassItems_Red[6]->LoadControlSettings( VarArgs( "%s/medic_red.res", res_dir ) );
+ m_pClassItems_Red[7]->LoadControlSettings( VarArgs( "%s/sniper_red.res", res_dir ) );
+ m_pClassItems_Red[8]->LoadControlSettings( VarArgs( "%s/spy_red.res", res_dir ) );
+
+ m_pClassItems_Blue[0]->LoadControlSettings( VarArgs( "%s/scout_blue.res", res_dir ) );
+ m_pClassItems_Blue[1]->LoadControlSettings( VarArgs( "%s/soldier_blue.res", res_dir ) );
+ m_pClassItems_Blue[2]->LoadControlSettings( VarArgs( "%s/pyro_blue.res", res_dir ) );
+ m_pClassItems_Blue[3]->LoadControlSettings( VarArgs( "%s/demoman_blue.res", res_dir ) );
+ m_pClassItems_Blue[4]->LoadControlSettings( VarArgs( "%s/heavy_blue.res", res_dir ) );
+ m_pClassItems_Blue[5]->LoadControlSettings( VarArgs( "%s/engineer_blue.res", res_dir ) );
+ m_pClassItems_Blue[6]->LoadControlSettings( VarArgs( "%s/medic_blue.res", res_dir ) );
+ m_pClassItems_Blue[7]->LoadControlSettings( VarArgs( "%s/sniper_blue.res", res_dir ) );
+ m_pClassItems_Blue[8]->LoadControlSettings( VarArgs( "%s/spy_blue.res", res_dir ) );
+
+ m_pActiveSelection = dynamic_cast< EditablePanel * >( FindChildByName( "active_selection_bg" ) );
+
+ // Reposition the activeselection to the default position
+ m_iSelectedItem = -1; // force reposition
+ SetSelectedItem( 5 );
+ }
+ else
+ {
+ // load control settings...
+ LoadControlSettings( "resource/UI/disguise_menu/HudMenuSpyDisguise.res" );
+
+ m_pClassItems_Red[0]->LoadControlSettings( "resource/UI/disguise_menu/scout_red.res" );
+ m_pClassItems_Red[1]->LoadControlSettings( "resource/UI/disguise_menu/soldier_red.res" );
+ m_pClassItems_Red[2]->LoadControlSettings( "resource/UI/disguise_menu/pyro_red.res" );
+ m_pClassItems_Red[3]->LoadControlSettings( "resource/UI/disguise_menu/demoman_red.res" );
+ m_pClassItems_Red[4]->LoadControlSettings( "resource/UI/disguise_menu/heavy_red.res" );
+ m_pClassItems_Red[5]->LoadControlSettings( "resource/UI/disguise_menu/engineer_red.res" );
+ m_pClassItems_Red[6]->LoadControlSettings( "resource/UI/disguise_menu/medic_red.res" );
+ m_pClassItems_Red[7]->LoadControlSettings( "resource/UI/disguise_menu/sniper_red.res" );
+ m_pClassItems_Red[8]->LoadControlSettings( "resource/UI/disguise_menu/spy_red.res" );
+
+ m_pClassItems_Blue[0]->LoadControlSettings( "resource/UI/disguise_menu/scout_blue.res" );
+ m_pClassItems_Blue[1]->LoadControlSettings( "resource/UI/disguise_menu/soldier_blue.res" );
+ m_pClassItems_Blue[2]->LoadControlSettings( "resource/UI/disguise_menu/pyro_blue.res" );
+ m_pClassItems_Blue[3]->LoadControlSettings( "resource/UI/disguise_menu/demoman_blue.res" );
+ m_pClassItems_Blue[4]->LoadControlSettings( "resource/UI/disguise_menu/heavy_blue.res" );
+ m_pClassItems_Blue[5]->LoadControlSettings( "resource/UI/disguise_menu/engineer_blue.res" );
+ m_pClassItems_Blue[6]->LoadControlSettings( "resource/UI/disguise_menu/medic_blue.res" );
+ m_pClassItems_Blue[7]->LoadControlSettings( "resource/UI/disguise_menu/sniper_blue.res" );
+ m_pClassItems_Blue[8]->LoadControlSettings( "resource/UI/disguise_menu/spy_blue.res" );
+
+ m_pActiveSelection = NULL;
+ }
+
+ m_iGroupSelection = -1;
+ ToggleSelectionIcons( false );
+
+ BaseClass::ApplySchemeSettings( pScheme );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CHudMenuSpyDisguise::ShouldDraw( void )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( !pPlayer )
+ return false;
+
+ if ( pPlayer->m_Shared.InCond( TF_COND_TAUNTING ) )
+ return false;
+
+ return CHudBaseBuildMenu::ShouldDraw();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Keyboard input hook. Return 0 if handled
+//-----------------------------------------------------------------------------
+int CHudMenuSpyDisguise::HudElementKeyInput( int down, ButtonCode_t keynum, const char *pszCurrentBinding )
+{
+ if ( !ShouldDraw() )
+ {
+ return 1;
+ }
+
+ if ( !down )
+ {
+ return 1;
+ }
+
+ // menu classes are not in the same order as the defines
+ static int iRemapKeyToClass[9] =
+ {
+ TF_CLASS_SCOUT,
+ TF_CLASS_SOLDIER,
+ TF_CLASS_PYRO,
+ TF_CLASS_DEMOMAN,
+ TF_CLASS_HEAVYWEAPONS,
+ TF_CLASS_ENGINEER,
+ TF_CLASS_MEDIC,
+ TF_CLASS_SNIPER,
+ TF_CLASS_SPY
+ };
+
+ bool bController = ( IsConsole() || ( keynum >= JOYSTICK_FIRST ) );
+
+ if ( bController )
+ {
+ int iNewSelection = m_iSelectedItem;
+
+ switch( keynum )
+ {
+ case KEY_XBUTTON_UP:
+ case STEAMCONTROLLER_DPAD_UP:
+ // jump to last
+ iNewSelection = 9;
+ break;
+
+ case KEY_XBUTTON_DOWN:
+ case STEAMCONTROLLER_DPAD_DOWN:
+ // jump to first
+ iNewSelection = 1;
+ break;
+
+ case KEY_XBUTTON_RIGHT:
+ case STEAMCONTROLLER_DPAD_RIGHT:
+ // move selection to the right
+ iNewSelection++;
+ if ( iNewSelection > 9 )
+ iNewSelection = 1;
+ break;
+
+ case KEY_XBUTTON_LEFT:
+ case STEAMCONTROLLER_DPAD_LEFT:
+ // move selection to the right
+ iNewSelection--;
+ if ( iNewSelection < 1 )
+ iNewSelection = 9;
+ break;
+
+ case KEY_XBUTTON_RTRIGGER:
+ case KEY_XBUTTON_A:
+ case STEAMCONTROLLER_A:
+ {
+ // select disguise
+ int iClass = iRemapKeyToClass[m_iSelectedItem-1];
+ int iTeam = ( m_iShowingTeam == TF_TEAM_BLUE ) ? 1 : 0;
+
+ SelectDisguise( iClass, iTeam );
+ }
+ return 0;
+
+ case KEY_XBUTTON_Y:
+ case STEAMCONTROLLER_Y:
+ ToggleDisguiseTeam();
+ return 0;
+
+ case KEY_XBUTTON_B:
+ case STEAMCONTROLLER_B:
+ // cancel, close the menu
+ engine->ExecuteClientCmd( "lastinv" );
+ return 0;
+
+ default:
+ return 1; // key not handled
+ }
+
+ SetSelectedItem( iNewSelection );
+
+ return 0;
+ }
+ else
+ {
+ int iSlot = -1;
+
+#ifdef SIXENSE
+ if ( !tf_simple_disguise_menu.GetBool() && !g_pSixenseInput->IsEnabled() )
+#else
+ if ( !tf_simple_disguise_menu.GetBool() )
+#endif
+ {
+ // convert slot1, slot2 etc to 1,2,3,4
+ if ( pszCurrentBinding && !Q_strncmp( pszCurrentBinding, "slot", 4 ) && Q_strlen(pszCurrentBinding) > 4 )
+ {
+ const char *pszNum = pszCurrentBinding+4;
+ iSlot = atoi(pszNum);
+
+ // slot10 cancels
+ if ( iSlot == 10 )
+ {
+ engine->ExecuteClientCmd( "lastinv" );
+ return 0;
+ }
+
+ iSlot -= 1; // adjust to be 0 based
+
+ // allow slot1 - slot4
+ if ( iSlot < 0 || iSlot > 8 )
+ return 1;
+ }
+ }
+
+ if ( pszCurrentBinding && ( FStrEq( pszCurrentBinding, "disguiseteam" ) || FStrEq( pszCurrentBinding, "+reload" ) ) )
+ {
+ ToggleDisguiseTeam();
+ return 0;
+ }
+ else if ( pszCurrentBinding && FStrEq( pszCurrentBinding, "next_disguise" ) )
+ {
+ int iNewSelection = m_iSelectedItem;
+
+ iNewSelection++;
+ if ( iNewSelection > 9 )
+ iNewSelection = 1;
+
+ SetSelectedItem( iNewSelection );
+ return 0;
+ }
+ else if ( pszCurrentBinding && FStrEq( pszCurrentBinding, "prev_disguise" ) )
+ {
+ int iNewSelection = m_iSelectedItem;
+
+ iNewSelection--;
+ if ( iNewSelection < 1 )
+ iNewSelection = 9;
+
+ SetSelectedItem( iNewSelection );
+ return 0;
+ }
+ else if ( iSlot == -1 )
+ {
+ if ( m_iGroupSelection > -1 )
+ {
+ switch( keynum )
+ {
+ case KEY_1:
+ case KEY_2:
+ case KEY_3:
+ {
+ iSlot = m_iGroupSelection*3 + keynum - KEY_1;
+ }
+ break;
+ case KEY_4:
+ case KEY_5:
+ case KEY_6:
+ case KEY_7:
+ case KEY_8:
+ case KEY_9:
+ {
+#ifdef SIXENSE
+ if ( !tf_simple_disguise_menu.GetBool() && !g_pSixenseInput->IsEnabled() )
+#else
+ if ( !tf_simple_disguise_menu.GetBool() )
+#endif
+ {
+ iSlot = keynum - KEY_1;
+ }
+ }
+ break;
+
+ case KEY_0:
+ engine->ExecuteClientCmd( "lastinv" );
+ return 0;
+ }
+ }
+ else
+ {
+#ifdef SIXENSE
+ if ( !tf_simple_disguise_menu.GetBool() && !g_pSixenseInput->IsEnabled() )
+#else
+ if ( !tf_simple_disguise_menu.GetBool() )
+#endif
+ {
+ switch( keynum )
+ {
+ case KEY_1:
+ case KEY_2:
+ case KEY_3:
+ case KEY_4:
+ case KEY_5:
+ case KEY_6:
+ case KEY_7:
+ case KEY_8:
+ case KEY_9:
+ {
+ iSlot = keynum - KEY_1;
+ }
+ break;
+
+ case KEY_0:
+ // cancel, close the menu
+ engine->ExecuteClientCmd( "lastinv" );
+ return 0;
+
+ default:
+ return 1; // key not handled
+ }
+ }
+ else
+ {
+ switch( keynum )
+ {
+ case KEY_1:
+ case KEY_2:
+ case KEY_3:
+ {
+ m_iGroupSelection = keynum - KEY_1;
+ ToggleSelectionIcons( true );
+ return 0;
+ }
+ }
+ }
+ }
+ }
+
+ if ( iSlot >= 0 )
+ {
+ int iClass = iRemapKeyToClass[ iSlot ];
+ int iTeam = ( m_iShowingTeam == TF_TEAM_BLUE ) ? 1 : 0;
+
+ SelectDisguise( iClass, iTeam );
+
+ m_iGroupSelection = -1;
+ ToggleSelectionIcons( false );
+
+ return 0;
+ }
+ }
+
+ return 1; // key not handled
+}
+
+
+void IN_Impulse( const CCommand &args );
+void SelectDisguise( int iClass, int iTeam )
+{
+ CHudMenuSpyDisguise *pMenuSpyDisguise = ( CHudMenuSpyDisguise * )GET_HUDELEMENT( CHudMenuSpyDisguise );
+
+ if ( pMenuSpyDisguise )
+ {
+ pMenuSpyDisguise->SelectDisguise( iClass, iTeam );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::FindToggleBinding( void )
+{
+ // set the %lastinv% dialog var to our binding
+ const char *key = engine->Key_LookupBinding( "lastinv" );
+ if ( !key )
+ {
+ key = "< not bound >";
+ }
+ SetDialogVariable( "lastinv", key );
+
+ key = engine->Key_LookupBinding( "disguiseteam" );
+ if ( !key )
+ {
+ key = "< not bound >";
+ }
+ SetDialogVariable( "disguiseteam", key );
+
+ key = engine->Key_LookupBinding( "reload" );
+ if ( !key )
+ {
+ key = "< Reload >";
+ }
+ SetDialogVariable( "reload", key );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::ToggleSelectionIcons( bool bGroup )
+{
+ // in controller mode we don't want any of the key icons
+ if( tf_disguise_menu_controller_mode.GetBool() || ::input->IsSteamControllerActive() )
+ {
+ for ( int i=0; i<9; ++i )
+ {
+ m_pKeyIcons_Red[i]->SetVisible( false );
+ m_pKeyLabels_Red[i]->SetVisible( false );
+ m_pKeyLabelsNew_Red[i]->SetVisible( false );
+ m_pKeyIcons_Blue[i]->SetVisible( false );
+ m_pKeyLabels_Blue[i]->SetVisible( false );
+ m_pKeyLabelsNew_Blue[i]->SetVisible( false );
+ }
+ }
+ else
+#ifdef SIXENSE
+ if ( tf_simple_disguise_menu.GetBool() || g_pSixenseInput->IsEnabled() )
+#else
+ if ( tf_simple_disguise_menu.GetBool() )
+#endif
+ {
+ for ( int i=0; i<3; ++i )
+ {
+ m_pKeyIcons_Category[i]->SetVisible( !bGroup );
+ m_pKeyLabels_Category[i]->SetVisible( !bGroup );
+ }
+ for ( int i=0; i<9; ++i )
+ {
+ int index = i-(m_iGroupSelection*3);
+ bool bVisible = bGroup && ((m_iGroupSelection == -1) || ((index<=2)&&(index>=0)));
+ m_pKeyIcons_Red[i]->SetVisible( bVisible );
+ m_pKeyLabels_Red[i]->SetVisible( false );
+ m_pKeyLabelsNew_Red[i]->SetVisible( bVisible );
+ m_pKeyIcons_Blue[i]->SetVisible( bVisible );
+ m_pKeyLabels_Blue[i]->SetVisible( false );
+ m_pKeyLabelsNew_Blue[i]->SetVisible( bVisible );
+ }
+ }
+ else
+ {
+ for ( int i=0; i<3; ++i )
+ {
+ m_pKeyIcons_Category[i]->SetVisible( false );
+ m_pKeyLabels_Category[i]->SetVisible( false );
+ }
+ for ( int i=0; i<9; ++i )
+ {
+ m_pKeyIcons_Red[i]->SetVisible( true );
+ m_pKeyLabels_Red[i]->SetVisible( true );
+ m_pKeyLabelsNew_Red[i]->SetVisible( false );
+ m_pKeyIcons_Blue[i]->SetVisible( true );
+ m_pKeyLabels_Blue[i]->SetVisible( true );
+ m_pKeyLabelsNew_Blue[i]->SetVisible( false );
+ }
+ }
+
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::SelectDisguise( int iClass, int iTeam )
+{
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( pPlayer )
+ {
+ // intercepting the team value and reassigning what gets passed into Disguise()
+ // because the team numbers in the client menu don't match the #define values for the teams
+ char szDisguise[32];
+
+ if ( iTeam <= LAST_SHARED_TEAM )
+ {
+ iTeam = ( iTeam == 1 ) ? TF_TEAM_BLUE : TF_TEAM_RED;
+ }
+
+ Q_snprintf( szDisguise, sizeof (szDisguise), "disguise 2%d%d", iTeam, iClass );
+
+ CCommand args;
+ args.Tokenize( szDisguise );
+
+ IN_Impulse( args );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::ToggleDisguiseTeam( void )
+{
+ // flip the teams
+ m_iShowingTeam = ( m_iShowingTeam == TF_TEAM_BLUE ) ? TF_TEAM_RED : TF_TEAM_BLUE;
+
+ // show / hide the class items
+ bool bShowBlue = ( m_iShowingTeam == TF_TEAM_BLUE );
+
+ for ( int i=0; i<9; i++ )
+ {
+ m_pClassItems_Red[i]->SetVisible( !bShowBlue );
+ m_pClassItems_Blue[i]->SetVisible( bShowBlue );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::SetSelectedItem( int iSlot )
+{
+ if ( m_iSelectedItem != iSlot )
+ {
+ m_iSelectedItem = iSlot;
+
+ // move the selection item to the new position
+ if ( m_pActiveSelection )
+ {
+ // move the selection background
+ int x, y;
+ m_pClassItems_Blue[m_iSelectedItem-1]->GetPos( x, y );
+ m_pActiveSelection->SetPos( x, y );
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::FireGameEvent( IGameEvent *event )
+{
+ const char * type = event->GetName();
+
+ if ( Q_strcmp(type, "spy_pda_reset") == 0 )
+ {
+ CTFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer();
+ if ( pPlayer )
+ {
+ bool bShowBlue = ( pPlayer->GetTeamNumber() == TF_TEAM_RED );
+
+ for ( int i=0; i<9; i++ )
+ {
+ m_pClassItems_Red[i]->SetVisible( !bShowBlue );
+ m_pClassItems_Blue[i]->SetVisible( bShowBlue );
+ }
+
+ m_iShowingTeam = ( bShowBlue ) ? TF_TEAM_BLUE : TF_TEAM_RED;
+
+ m_iGroupSelection = -1;
+ ToggleSelectionIcons( false );
+ }
+ }
+ else if ( Q_strcmp(type, "gameui_hidden") == 0 )
+ {
+ FindToggleBinding();
+ }
+ else
+ {
+ CHudElement::FireGameEvent( event );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CHudMenuSpyDisguise::SetVisible( bool state )
+{
+ if ( state == true )
+ {
+ // close the weapon selection menu
+ engine->ClientCmd( "cancelselect" );
+
+ bool bConsoleMode = ( IsConsole() || tf_disguise_menu_controller_mode.GetBool() || ::input->IsSteamControllerActive() );
+
+ if ( bConsoleMode != m_bInConsoleMode )
+ {
+ InvalidateLayout( true, true );
+ m_bInConsoleMode = bConsoleMode;
+ }
+
+ FindToggleBinding();
+
+ HideLowerPriorityHudElementsInGroup( "mid" );
+
+ m_iGroupSelection = -1;
+ ToggleSelectionIcons( false );
+ }
+ else
+ {
+ UnhideLowerPriorityHudElementsInGroup( "mid" );
+ }
+
+ BaseClass::SetVisible( state );
+} \ No newline at end of file