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.

120 lines
2.8 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #include "cbase.h"
  8. #include "hud.h"
  9. #include "iclientmode.h"
  10. #include "hudelement.h"
  11. //#include "view.h"
  12. //#include "vgui_controls/Controls.h"
  13. #include "vgui/ISurface.h"
  14. #include "vgui/IInput.h"
  15. #include <vgui_controls/Panel.h>
  16. // memdbgon must be the last include file in a .cpp file!!!
  17. #include "tier0/memdbgon.h"
  18. using namespace vgui;
  19. //-----------------------------------------------------------------------------
  20. // Purpose:
  21. //-----------------------------------------------------------------------------
  22. class CHudVguiScreenCursor : public CHudElement, public vgui::Panel
  23. {
  24. DECLARE_CLASS_SIMPLE( CHudVguiScreenCursor, vgui::Panel );
  25. public:
  26. CHudVguiScreenCursor( const char *pElementName );
  27. virtual bool ShouldDraw();
  28. protected:
  29. virtual void ApplySchemeSettings( vgui::IScheme *scheme );
  30. virtual void Paint();
  31. private:
  32. // Cursor sprite and color
  33. CHudTexture *m_pCursor;
  34. Color m_clrCrosshair;
  35. };
  36. DECLARE_HUDELEMENT( CHudVguiScreenCursor );
  37. CHudVguiScreenCursor::CHudVguiScreenCursor( const char *pElementName ) :
  38. CHudElement( pElementName ), BaseClass( NULL, "VguiScreenCursor" )
  39. {
  40. vgui::Panel *pParent = g_pClientMode->GetViewport();
  41. SetParent( pParent );
  42. m_pCursor = 0;
  43. m_clrCrosshair = Color( 0, 0, 0, 0 );
  44. SetHiddenBits( HIDEHUD_PLAYERDEAD );
  45. }
  46. void CHudVguiScreenCursor::ApplySchemeSettings( IScheme *scheme )
  47. {
  48. BaseClass::ApplySchemeSettings( scheme );
  49. m_clrCrosshair = scheme->GetColor( "VguiScreenCursor", Color( 255, 255, 255, 255 ) );
  50. m_pCursor = gHUD.GetIcon( "arrow" );
  51. SetPaintBackgroundEnabled( false );
  52. SetSize( ScreenWidth(), ScreenHeight() );
  53. }
  54. //-----------------------------------------------------------------------------
  55. // Purpose: Save CPU cycles by letting the HUD system early cull
  56. // costly traversal. Called per frame, return true if thinking and
  57. // painting need to occur.
  58. //-----------------------------------------------------------------------------
  59. bool CHudVguiScreenCursor::ShouldDraw( void )
  60. {
  61. C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer();
  62. if ( !pPlayer )
  63. return false;
  64. if ( pPlayer->IsInViewModelVGuiInputMode() )
  65. {
  66. return false;
  67. }
  68. if ( !pPlayer->IsInVGuiInputMode() )
  69. {
  70. return false;
  71. }
  72. return CHudElement::ShouldDraw();
  73. }
  74. void CHudVguiScreenCursor::Paint( void )
  75. {
  76. if ( !m_pCursor )
  77. return;
  78. float x, y;
  79. x = ScreenWidth()/2;
  80. y = ScreenHeight()/2;
  81. C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer();
  82. if ( !pPlayer )
  83. return;
  84. if ( pPlayer->IsInViewModelVGuiInputMode() )
  85. {
  86. int iX, iY;
  87. vgui::input()->GetCursorPos(iX, iY);
  88. x = (float)iX;
  89. y = (float)iY;
  90. }
  91. m_pCursor->DrawSelf(
  92. x - 0.5f * m_pCursor->Width(),
  93. y - 0.5f * m_pCursor->Height(),
  94. m_clrCrosshair );
  95. }