Team Fortress 2 Source Code as on 22/4/2020
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.

151 lines
4.3 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. //=============================================================================//
  6. #include "cbase.h"
  7. #include "hudelement.h"
  8. #include <vgui_controls/Panel.h>
  9. #include <vgui_controls/EditablePanel.h>
  10. #include <vgui_controls/ImagePanel.h>
  11. #include <vgui/ISurface.h>
  12. #include "c_dod_player.h"
  13. #include "clientmode_dod.h"
  14. #include "dod_hud_tnt_pickup.h"
  15. #include <vgui/ILocalize.h>
  16. DECLARE_HUDELEMENT( CDODHudTNTPickupPanel );
  17. ConVar hud_c4pickuppanel( "hud_c4pickuppanel", "1", FCVAR_CLIENTDLL | FCVAR_ARCHIVE, "Set to 0 to not draw the HUD c4 pickup panel" );
  18. //-----------------------------------------------------------------------------
  19. // Purpose: Constructor
  20. //-----------------------------------------------------------------------------
  21. CDODHudTNTPickupPanel::CDODHudTNTPickupPanel( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudTNTPickupPanel" )
  22. {
  23. SetParent( g_pClientMode->GetViewport() );
  24. m_pBackground = new vgui::Panel( this, "CapturePanelBackground" );
  25. m_pTNTImage = new CIconPanel( this, "TNTImage" );
  26. m_pPickupLabel = new vgui::Label( this, "pickupLabel", "..." );
  27. // load control settings...
  28. LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" );
  29. SetVisible( false );
  30. m_flShowUntilTime = 0;
  31. m_bInitLayout = true;
  32. RegisterForRenderGroup( "winpanel" );
  33. }
  34. //-----------------------------------------------------------------------------
  35. // Purpose:
  36. //-----------------------------------------------------------------------------
  37. void CDODHudTNTPickupPanel::Init()
  38. {
  39. // listen for client side events
  40. ListenForGameEvent( "dod_tnt_pickup" );
  41. }
  42. //-----------------------------------------------------------------------------
  43. // Purpose:
  44. //-----------------------------------------------------------------------------
  45. void CDODHudTNTPickupPanel::VidInit()
  46. {
  47. // listen for client side events
  48. m_flShowUntilTime = 0;
  49. m_bInitLayout = true;
  50. }
  51. //-----------------------------------------------------------------------------
  52. // Purpose:
  53. //-----------------------------------------------------------------------------
  54. void CDODHudTNTPickupPanel::OnScreenSizeChanged( int iOldWide, int iOldTall )
  55. {
  56. LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" );
  57. m_bInitLayout = true;
  58. }
  59. //-----------------------------------------------------------------------------
  60. // Purpose:
  61. //-----------------------------------------------------------------------------
  62. void CDODHudTNTPickupPanel::ApplySchemeSettings( vgui::IScheme *pScheme )
  63. {
  64. BaseClass::ApplySchemeSettings( pScheme );
  65. LoadControlSettings( "resource/UI/HudTNTPickupPanel.res" );
  66. m_bInitLayout = true;
  67. if ( m_pBackground )
  68. {
  69. m_pBackground->SetBgColor( GetSchemeColor( "HintMessageBg", pScheme ) );
  70. m_pBackground->SetPaintBackgroundType( 2 );
  71. }
  72. }
  73. void CDODHudTNTPickupPanel::FireGameEvent( IGameEvent *event )
  74. {
  75. const char *pszEventName = event->GetName();
  76. C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer();
  77. if ( !Q_strcmp( pszEventName, "dod_tnt_pickup" ) && pPlayer && pPlayer->ShouldShowHints() )
  78. {
  79. if ( hud_c4pickuppanel.GetBool() )
  80. {
  81. // fire the show animation
  82. SetVisible( true );
  83. m_flShowUntilTime = gpGlobals->curtime + 3.5;
  84. m_pTNTImage->SetVisible( true );
  85. }
  86. }
  87. }
  88. void CDODHudTNTPickupPanel::OnThink( void )
  89. {
  90. BaseClass::OnThink();
  91. // if only vgui had relative layouts for elements..
  92. if ( m_bInitLayout )
  93. {
  94. // localize text if we need
  95. m_pPickupLabel->SetText( g_pVGuiLocalize->Find( "dod_tnt_pickup_help" ) );
  96. // size label to contents
  97. m_pPickupLabel->SizeToContents();
  98. int labelX, labelY, labelW, labelH;
  99. m_pPickupLabel->GetBounds( labelX, labelY, labelW, labelH );
  100. int imageX, imageY, imageH, imageW;
  101. m_pTNTImage->GetBounds( imageX, imageY, imageH, imageW );
  102. // total width is:
  103. // margin + image width + margin + text + margin
  104. int newWidth = 3 * XRES(10) + imageW + labelW;
  105. int bgX, bgY, bgW, bgH;
  106. m_pBackground->GetBounds( bgX, bgY, bgW, bgH );
  107. int newX = XRES(320) - newWidth/2;
  108. m_pBackground->SetBounds( newX, bgY, newWidth, bgH );
  109. m_pTNTImage->SetPos( newX + XRES(10), imageY );
  110. m_pPickupLabel->SetPos( newX + 2 * XRES(10) + imageW, bgY + ( bgH - labelY) / 2 );
  111. m_bInitLayout = false;
  112. }
  113. if ( IsVisible() && gpGlobals->curtime > m_flShowUntilTime )
  114. {
  115. SetVisible( false );
  116. }
  117. }