//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef MINIMAP_ENTITY_H #define MINIMAP_ENTITY_H #ifdef _WIN32 #pragma once #endif #include "hud_minimap.h" #include "TeamBitmapImage.h" #include "vgui_bitmapimage.h" #include // FIXME: Need to put the team color somewhere... // Get the team color... extern int g_TeamColor[3][3]; //----------------------------------------------------------------------------- // A base minimap panel meant to be attached to an entity. // NOTE: paint() will never be called unless the entity is currently valid //----------------------------------------------------------------------------- class C_BaseEntity; class CMinimapTracePanel : public vgui::Panel { DECLARE_CLASS_GAMEROOT( CMinimapTracePanel, vgui::Panel ); public: CMinimapTracePanel( vgui::Panel *parent, const char *panelName ); virtual ~CMinimapTracePanel(); bool Init( KeyValues* pKeyValues, MinimapInitData_t* pMinimapData ); // Causes the minimap panel to not be visible void SetTraceVisibility( bool bVisible ); // called when we're ticked... virtual void OnTick( void ); protected: // Can be overridden; it's called once a frame and returns true if the // object is visible to the minimap or not. X and Y are the position of the // entity in minimap space virtual bool ComputeVisibility( ); // Computes a panel alpha based on zoom level... float ComputePanelAlpha(); // Called by derived classes before drawing to determine if the entity is visible. // Also sets the vgui surface color based on the team. bool BeginRender( CMinimapPanel* pPanel, float &x, float &y, int &team ) { return false; } // Computes the entity position in minimap panel coordinates bool GetEntityPosition( float &x, float &y ); // Sets the position of the trace in world space void SetPosition( const Vector &vecPosition ); // Entity accessors C_BaseEntity* GetEntity(); void SetEntity( C_BaseEntity* pEntity ); protected: // Bitmap positional offset int m_OffsetX; int m_OffsetY; int m_SizeW; int m_SizeH; // Indicates we should clip to the map bool m_bClipToMap; bool m_bCanScale; private: // Indicates if we're faded out when zoomed in bool m_bVisibleWhenZoomedIn; // Indicates we should always draw, even if we're off the map bool m_bClampToMap; // Are we invisible because the entity wants us invisible? bool m_bVisible; // This is the entity to which we're attached C_BaseEntity *m_pEntity; // This is the location of the panel in world space Vector m_vecPosition; // lifetime of the minimap panel float m_flDeletionTime; }; //----------------------------------------------------------------------------- // A standard minimap panel that displays a bitmap //----------------------------------------------------------------------------- class CMinimapTraceBitmapPanel : public CMinimapTracePanel { DECLARE_CLASS( CMinimapTraceBitmapPanel, CMinimapTracePanel ); public: CMinimapTraceBitmapPanel( vgui::Panel *parent, const char *panelName ) : BaseClass ( parent, panelName ) { } // Sets the bitmap and size virtual bool Init( KeyValues* pKeyValues, MinimapInitData_t* pInitData ); // Performs the rendering... virtual void Paint(); protected: BitmapImage m_Image; }; //----------------------------------------------------------------------------- // A standard minimap panel that displays a bitmap based on entity team //----------------------------------------------------------------------------- class CMinimapTraceTeamBitmapPanel : public CMinimapTracePanel { DECLARE_CLASS( CMinimapTraceTeamBitmapPanel, CMinimapTracePanel ); public: CMinimapTraceTeamBitmapPanel( vgui::Panel *parent, const char *panelName ) : BaseClass ( parent, panelName ) { } // Sets the bitmap and size virtual bool Init( KeyValues* pKeyValues, MinimapInitData_t* pInitData ); // Performs the rendering... virtual void Paint(); protected: CTeamBitmapImage m_TeamImage; }; #endif // MINIMAP_ENTITY_H