//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef SFHUDRETICLE_H_ #define SFHUDRETICLE_H_ #include "hud.h" #include "hud_element_helper.h" #include "scaleformui/scaleformui.h" #include "sfhudflashinterface.h" #include "cs_gamerules.h" #include "c_cs_player.h" #include "weapon_csbase.h" #include "takedamageinfo.h" #include "weapon_csbase.h" #include "ammodef.h" #if defined(_PS3) || defined(POSIX) #define HUDRET_WEPICON_SELECTED_IMG_STRING L"" #define HUDRET_WEPICON_IMG_STRING L"" #else #define HUDRET_WEPICON_SELECTED_IMG_STRING L"" #define HUDRET_WEPICON_IMG_STRING L"" #endif #define VIEWPUNCH_COMPENSATE_MAGIC_SCALAR 0.65 // cl_flinch_scale.GetFloat() #define VIEWPUNCH_COMPENSATE_MAGIC_ANGLE 1 struct PlayerIDPanel { EHANDLE hPlayer; SFVALUE panel; SFVALUE arrowA; SFVALUE arrowB; SFVALUE arrowF; SFVALUE voiceIcon; SFVALUE defuseIcon; int iconsFlag; bool bActive; bool bShowName; bool bFriend; int nTeam; int nHealth; float flUpdateAt; float bFlashedAmt; float flLastHighlightTime; float flNameAlpha; }; class SFHudReticle : public SFHudFlashInterface { enum { TEXTFIELD_LENGTH = 256 }; public: enum RETICLE_MODE { RETICLE_MODE_NONE, RETICLE_MODE_WEAPON, RETICLE_MODE_OBSERVER }; explicit SFHudReticle( const char *value ); virtual ~SFHudReticle(); void OnSwapReticle( SCALEFORM_CALLBACK_ARGS_DECL ); // These overload the CHudElement class virtual void ProcessInput( void ); virtual void LevelInit( void ); virtual void LevelShutdown( void ); virtual void SetActive( bool bActive ); virtual bool ShouldDraw( void ); // these overload the ScaleformFlashInterfaceMixin class virtual void FlashReady( void ); virtual bool PreUnloadFlash( void ); virtual void FireGameEvent( IGameEvent *event ); void ToggleTeamEquipmentVisibility( bool bShow ); protected: void ShowReticle( RETICLE_MODE mode, bool value ); bool SetReticlePosition( int distance, int crosshairGap , int offsetX, int offsetY, int nDesiredFishtail ); void LockSlot(bool wantItLocked, bool& currentlyLocked); void ResetDisplay( void ); int TeamToTextIndex( int iTeamNumber ); // Swaps the current reticle assets void PerformSwapReticle( const char * szReticleName ); void AddNewPlayerID( CBaseEntity *player, bool bShowName, bool bFriend = false ); void UpdatePlayerID( CBaseEntity *player, int slot, bool bHealthAndNameOnly = false ); void RemoveID( int index ); void RemoveAllIDs( void ); void GetIconHTML( const wchar_t * szIcon, wchar_t * szBuffer, int nBufferSize, bool bSelected ); bool ShouldShowAllFriendlyTargetIDs( void ); bool ShouldShowAllFriendlyEquipment( void ); protected: wchar_t m_wcIDString[ TEXTFIELD_LENGTH ]; bool m_bCrosshairPositionsInitialized; double m_TopPipY; double m_BottomPipY; double m_LeftPipX; double m_RightPipX; float m_dotX; float m_dotY; float m_blackRingX; float m_blackRingY; float m_friendIndicatorX; float m_friendIndicatorY; float m_IDMovieX; float m_IDMovieY; SFVALUE m_WeaponCrosshairHandle; SFVALUE m_ObserverCrosshairHandle; SFVALUE m_TopPip; SFVALUE m_BottomPip; SFVALUE m_LeftPip; SFVALUE m_RightPip; SFVALUE m_topCrosshairArc; SFVALUE m_rightCrosshairArc; SFVALUE m_leftCrosshairArc; SFVALUE m_bottomCrosshairArc; SFVALUE m_FriendCrosshair; SFVALUE m_crosshairDot; SFVALUE m_blackRing; SFVALUE m_IDMovie; SFVALUE m_IDText; SFVALUE m_FlashedIcon; RETICLE_MODE m_iReticleMode; float m_fIDTimer; int m_iLastGap; int m_iLastSpread; bool m_bTextIDVisible; bool m_bFriendlyCrosshairVisible; bool m_bEnemyCrosshairVisible; bool m_bFlashedIconFadingOut; bool m_bForceShowAllTeammateTargetIDs; CUtlVector m_playerIDs; }; extern ConVar crosshair; //extern ConVar sfcrosshair; #endif /* SFHUDRETICLE_H_ */