//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #include "cbase.h" #include "hud.h" #include "iclientmode.h" #include "hudelement.h" //#include "view.h" //#include "vgui_controls/controls.h" #include "vgui/ISurface.h" #include "vgui/IInput.h" #include // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" using namespace vgui; //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- class CHudVguiScreenCursor : public CHudElement, public vgui::Panel { DECLARE_CLASS_SIMPLE( CHudVguiScreenCursor, vgui::Panel ); public: CHudVguiScreenCursor( const char *pElementName ); virtual bool ShouldDraw(); protected: virtual void ApplySchemeSettings( vgui::IScheme *scheme ); virtual void Paint(); private: // Cursor sprite and color CHudTexture *m_pCursor; Color m_clrCrosshair; }; DECLARE_HUDELEMENT( CHudVguiScreenCursor ); CHudVguiScreenCursor::CHudVguiScreenCursor( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "VguiScreenCursor" ) { vgui::Panel *pParent = GetClientMode()->GetViewport(); SetParent( pParent ); m_pCursor = 0; m_clrCrosshair = Color( 0, 0, 0, 0 ); SetHiddenBits( HIDEHUD_PLAYERDEAD ); } void CHudVguiScreenCursor::ApplySchemeSettings( IScheme *scheme ) { BaseClass::ApplySchemeSettings( scheme ); m_clrCrosshair = scheme->GetColor( "VguiScreenCursor", Color( 255, 255, 255, 255 ) ); m_pCursor = HudIcons().GetIcon( "arrow" ); SetPaintBackgroundEnabled( false ); SetSize( ScreenWidth(), ScreenHeight() ); } //----------------------------------------------------------------------------- // Purpose: Save CPU cycles by letting the HUD system early cull // costly traversal. Called per frame, return true if thinking and // painting need to occur. //----------------------------------------------------------------------------- bool CHudVguiScreenCursor::ShouldDraw( void ) { C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer(); if ( !pPlayer ) return false; if ( pPlayer->IsInViewModelVGuiInputMode() ) { return false; } if ( !pPlayer->IsInVGuiInputMode() ) { return false; } return CHudElement::ShouldDraw(); } void CHudVguiScreenCursor::Paint( void ) { if ( !m_pCursor ) return; float x, y; x = ScreenWidth()/2; y = ScreenHeight()/2; C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer(); if ( !pPlayer ) return; if ( pPlayer->IsInViewModelVGuiInputMode() ) { int iX, iY; vgui::input()->GetCursorPos(iX, iY); x = (float)iX; y = (float)iY; } m_pCursor->DrawSelf( x - 0.5f * m_pCursor->Width(), y - 0.5f * m_pCursor->Height(), m_clrCrosshair ); }