diff options
Diffstat (limited to 'game/client/cstrike/VGUI/cstrikespectatorgui.h')
| -rw-r--r-- | game/client/cstrike/VGUI/cstrikespectatorgui.h | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/game/client/cstrike/VGUI/cstrikespectatorgui.h b/game/client/cstrike/VGUI/cstrikespectatorgui.h new file mode 100644 index 0000000..5064812 --- /dev/null +++ b/game/client/cstrike/VGUI/cstrikespectatorgui.h @@ -0,0 +1,279 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef CSSPECTATORGUI_H +#define CSSPECTATORGUI_H +#ifdef _WIN32 +#pragma once +#endif + +#include "spectatorgui.h" +#include "mapoverview.h" +#include "cs_shareddefs.h" + +extern ConVar mp_playerid; // in cs_gamerules.h +extern ConVar mp_forcecamera; // in gamevars_shared.h +extern ConVar mp_fadetoblack; + + +//----------------------------------------------------------------------------- +// Purpose: Cstrike Spectator UI +//----------------------------------------------------------------------------- +class CCSSpectatorGUI : public CSpectatorGUI +{ +private: + DECLARE_CLASS_SIMPLE( CCSSpectatorGUI, CSpectatorGUI ); + +public: + CCSSpectatorGUI( IViewPort *pViewPort ); + + virtual void ApplySchemeSettings(vgui::IScheme *pScheme); + virtual void UpdateSpectatorPlayerList( void ); + virtual void Update( void ); + virtual bool NeedsUpdate( void ); + //============================================================================= + // HPE_BEGIN: + // [smessick] + //============================================================================= + virtual void ShowPanel( bool bShow ); + //============================================================================= + // HPE_END + //============================================================================= + +protected: + + void UpdateTimer(); + void UpdateAccount(); + + int m_nLastAccount; + int m_nLastTime; + int m_nLastSpecMode; + CBaseEntity *m_nLastSpecTarget; + + void StoreWidths( void ); + void ResizeControls( void ); + bool ControlsPresent( void ) const; + + vgui::Label *m_pCTLabel; + vgui::Label *m_pCTScore; + vgui::Label *m_pTerLabel; + vgui::Label *m_pTerScore; + vgui::Label *m_pTimer; + vgui::Label *m_pTimerLabel; + vgui::Panel *m_pDivider; + vgui::Label *m_pExtraInfo; + + bool m_modifiedWidths; + + int m_scoreWidth; + int m_extraInfoWidth; +}; + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + +#define DESIRED_RADAR_RESOLUTION 450 + +class CCSMapOverview : public CMapOverview +{ + DECLARE_CLASS_SIMPLE( CCSMapOverview, CMapOverview ); + +public: + + enum + { + MAP_ICON_T = 0, + MAP_ICON_CT, + MAP_ICON_HOSTAGE, + MAP_ICON_COUNT + }; + + CCSMapOverview( const char *pElementName ); + virtual ~CCSMapOverview(); + + virtual bool ShouldDraw( void ); + vgui::Panel *GetAsPanel(){ return this; } + virtual bool AllowConCommandsWhileAlive(){return false;} + virtual void SetPlayerPreferredMode( int mode ); + virtual void SetPlayerPreferredViewSize( float viewSize ); + virtual void ApplySchemeSettings( vgui::IScheme *scheme ); + +protected: // private structures & types + + // list of game events the hLTV takes care of + + typedef struct { + int xpos; + int ypos; + } FootStep_t; + + // Extra stuff in a this-level parallel array + typedef struct CSMapPlayer_s { + int overrideIcon; // if not -1, the icon to use instead + int overrideIconOffscreen; // to use with overrideIcon + float overrideFadeTime; // Time to start fading the override icon + float overrideExpirationTime; // Time to not use the override icon any more + Vector overridePosition; // Where the overridden icon will draw + QAngle overrideAngle; // And at what angle + bool isDead; // Death latch, since client can be behind the times on health messages. + float timeLastSeen; // curtime that we last saw this guy. + float timeFirstSeen; // curtime that we started seeing this guy + bool isHostage; // Not a full player, a hostage. Special icon, different death event + float flashUntilTime; + float nextFlashPeakTime; + int currentFlashAlpha; + } CSMapPlayer_t; + + typedef struct CSMapBomb_s + { + Vector position; + + enum BombState + { + BOMB_PLANTED, //planted and ticking down + BOMB_DROPPED, //dropped and lying loose + BOMB_CARRIED, //in the arms of a player + BOMB_GONE, //defused or exploded, but was planted + BOMB_INVALID //no bomb + }; + BombState state; + + float timeLastSeen; + float timeFirstSeen; + float timeFade; + float timeGone; + + float currentRingRadius; + float currentRingAlpha; + float maxRingRadius; + float ringTravelTime; + } CSMapBomb_t; + + typedef struct CSMapGoal_s + { + Vector position; + int iconToUse; + } CSMapGoal_t; + +public: // IViewPortPanel interface: + + virtual void Update(); + virtual void Init( void ); + + // both vgui::Frame and IViewPortPanel define these, so explicitly define them here as passthroughs to vgui + vgui::VPANEL GetVPanel( void ) { return BaseClass::GetVPanel(); } + virtual bool IsVisible() { return BaseClass::IsVisible(); } + virtual void SetParent(vgui::VPANEL parent) { BaseClass::SetParent(parent); } + + // IGameEventListener + + virtual void FireGameEvent( IGameEvent *event); + + // VGUI overrides + + // Player settings: + void SetPlayerSeen( int index ); + void SetBombSeen( bool seen ); + + // general settings: + virtual void SetMap(const char * map); + virtual void SetMode( int mode ); + + // Object settings + virtual void FlashEntity( int entityID ); + + // rules that define if you can see a player on the overview or not + virtual bool CanPlayerBeSeen(MapPlayer_t *player); + + virtual int GetIconNumberFromTeamNumber( int teamNumber ); + +protected: + + virtual void DrawCamera(); + virtual void DrawMapTexture(); + virtual void DrawMapPlayers(); + void DrawHostages(); + void DrawBomb(); + void DrawGoalIcons(); + virtual void ResetRound(); + virtual void InitTeamColorsAndIcons(); + virtual void UpdateSizeAndPosition(); + void UpdateGoalIcons(); + void ClearGoalIcons(); + virtual bool IsRadarLocked(); + Vector2D PanelToMap( const Vector2D &panelPos ); + + bool AdjustPointToPanel(Vector2D *pos); + MapPlayer_t* GetPlayerByEntityID( int entityID ); + MapPlayer_t* GetHostageByEntityID( int entityID ); + virtual void UpdatePlayers(); + void UpdateHostages();///< Update hostages in the MapPlayer list + void UpdateBomb(); + void UpdateFlashes(); + bool CreateRadarImage(const char *mapName, const char *radarFileName); + virtual bool RunHudAnimations(){ return false; } + +private: + bool DrawIconCS( int textureID, + int offscreenTextureID, + Vector pos, + float scale, + float angle, + int alpha, + bool allowRotation = true, + const char *text = NULL, + Color *textColor = NULL, + float status = -1, + Color *statusColor = NULL + ); + + int GetMasterAlpha( void );// The main alpha that the map part should be, determined by using the mode to look at the right convar + int GetBorderSize( void );// How far in from the edge of the panel we draw, based on mode. Let's the background fancy corners show. + CSMapPlayer_t* GetCSInfoForPlayerIndex( int index ); + CSMapPlayer_t* GetCSInfoForPlayer(MapPlayer_t *player); + CSMapPlayer_t* GetCSInfoForHostage(MapPlayer_t *hostage); + bool CanHostageBeSeen(MapPlayer_t *hostage); + + CSMapPlayer_t m_PlayersCSInfo[MAX_PLAYERS]; + CSMapBomb_t m_bomb; + MapPlayer_t m_Hostages[MAX_HOSTAGES]; + CSMapPlayer_t m_HostagesCSInfo[MAX_HOSTAGES]; + + CUtlVector< CSMapGoal_t > m_goalIcons; + bool m_goalIconsLoaded; + + int m_TeamIconsSelf[MAP_ICON_COUNT]; + int m_TeamIconsDead[MAP_ICON_COUNT]; + int m_TeamIconsOffscreen[MAP_ICON_COUNT]; + int m_TeamIconsDeadOffscreen[MAP_ICON_COUNT]; + + int m_bombIconPlanted; + int m_bombIconDropped; + int m_bombIconCarried; + int m_bombRingPlanted; + int m_bombRingDropped; + int m_bombRingCarried; + int m_bombRingCarriedOffscreen; + int m_radioFlash; + int m_radioFlashOffscreen; + int m_radarTint; + int m_hostageFollowing; + int m_hostageFollowingOffscreen; + int m_playerFacing; + int m_cameraIconFirst; + int m_cameraIconThird; + int m_cameraIconFree; + int m_hostageRescueIcon; + int m_bombSiteIconA; + int m_bombSiteIconB; + + int m_nRadarMapTextureID; // texture id for radar version of current overview image + + int m_playerPreferredMode; // The mode the player wants to be in for when we aren't being the radar +}; + +#endif // CSSPECTATORGUI_H |