mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 13:16:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: MiniMap.h: interface for the CMiniMap class.
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#if !defined HLTVPANEL_H
|
||||
#define HLTVPANEL_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <vgui_controls/Panel.h>
|
||||
#include <game/client/iviewport.h>
|
||||
#include "mathlib/vector.h"
|
||||
#include <igameevents.h>
|
||||
#include <shareddefs.h>
|
||||
#include <const.h>
|
||||
#include "hudelement.h"
|
||||
|
||||
class IMapOverviewPanel
|
||||
{
|
||||
public:
|
||||
virtual void SetMode( int mode ) = 0;
|
||||
virtual int GetMode( void ) = 0;
|
||||
virtual void FlashEntity( int entityID ) = 0;
|
||||
virtual void SetPlayerPositions(int index, const Vector &position, const QAngle &angle) = 0;
|
||||
virtual void SetVisible(bool state) = 0;
|
||||
virtual float GetZoom( void ) = 0;
|
||||
virtual vgui::Panel *GetAsPanel() = 0;
|
||||
virtual bool AllowConCommandsWhileAlive() = 0;
|
||||
virtual void SetPlayerPreferredMode( int mode ) = 0;
|
||||
virtual void SetPlayerPreferredViewSize( float viewSize ) = 0;
|
||||
virtual bool IsVisible() = 0;
|
||||
virtual void GetBounds(int &x, int &y, int &wide, int &tall) = 0;
|
||||
virtual float GetFullZoom( void ) = 0;
|
||||
virtual float GetMapScale( void ) = 0;
|
||||
};
|
||||
|
||||
#define MAX_TRAIL_LENGTH 30
|
||||
#define OVERVIEW_MAP_SIZE 1024 // an overview map is 1024x1024 pixels
|
||||
|
||||
typedef bool ( *FnCustomMapOverviewObjectPaint )( int textureID, Vector pos, float scale, float angle, const char *text, Color *textColor, float status, Color *statusColor );
|
||||
|
||||
|
||||
class CMapOverview : public CHudElement, public vgui::Panel, public IMapOverviewPanel
|
||||
{
|
||||
DECLARE_CLASS_SIMPLE( CMapOverview, vgui::Panel );
|
||||
|
||||
public:
|
||||
|
||||
enum
|
||||
{
|
||||
MAP_MODE_OFF = 0, // Totally off
|
||||
MAP_MODE_INSET, // A little map up in a corner
|
||||
MAP_MODE_FULL, // Full screen, full map
|
||||
MAP_MODE_RADAR // In game radar, extra functionality
|
||||
};
|
||||
|
||||
CMapOverview( const char *pElementName );
|
||||
virtual ~CMapOverview();
|
||||
|
||||
virtual bool ShouldDraw( void );
|
||||
vgui::Panel *GetAsPanel(){ return this; }
|
||||
virtual bool AllowConCommandsWhileAlive(){return true;}
|
||||
virtual void SetPlayerPreferredMode( int mode ){}
|
||||
virtual void SetPlayerPreferredViewSize( float viewSize ){};
|
||||
|
||||
protected: // private structures & types
|
||||
|
||||
float GetViewAngle( void ); // The angle that determines the viewport twist from map texture to panel drawing.
|
||||
|
||||
// list of game events the hLTV takes care of
|
||||
|
||||
typedef struct {
|
||||
int xpos;
|
||||
int ypos;
|
||||
} FootStep_t;
|
||||
|
||||
typedef struct MapPlayer_s {
|
||||
int index; // player's index
|
||||
int userid; // user ID on server
|
||||
int icon; // players texture icon ID
|
||||
Color color; // players team color
|
||||
char name[MAX_PLAYER_NAME_LENGTH];
|
||||
int team; // N,T,CT
|
||||
int health; // 0..100, 7 bit
|
||||
Vector position; // current x,y pos
|
||||
QAngle angle; // view origin 0..360
|
||||
Vector2D trail[MAX_TRAIL_LENGTH]; // save 1 footstep each second for 1 minute
|
||||
} MapPlayer_t;
|
||||
|
||||
typedef struct MapObject_s {
|
||||
int objectID; // unique object ID
|
||||
int index; // entity index if any
|
||||
int icon; // players texture icon ID
|
||||
Color color; // players team color
|
||||
char name[MAX_PLAYER_NAME_LENGTH]; // show text under icon
|
||||
Vector position; // current x,y pos
|
||||
QAngle angle; // view origin 0..360
|
||||
float endtime; // time stop showing object
|
||||
float size; // object size
|
||||
float status; // green status bar [0..1], -1 = disabled
|
||||
Color statusColor; // color of status bar
|
||||
int flags; // MAB_OBJECT_*
|
||||
const char *text; // text to draw underneath the icon
|
||||
} MapObject_t;
|
||||
|
||||
#define MAP_OBJECT_ALIGN_TO_MAP (1<<0)
|
||||
|
||||
public: // IViewPortPanel interface:
|
||||
|
||||
virtual const char *GetName( void ) { return PANEL_OVERVIEW; }
|
||||
virtual void SetData(KeyValues *data);
|
||||
virtual void Reset();
|
||||
virtual void OnThink();
|
||||
virtual void Update();
|
||||
virtual bool NeedsUpdate( void );
|
||||
virtual bool HasInputElements( void ) { return false; }
|
||||
virtual void ShowPanel( bool bShow );
|
||||
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 GetBounds(int &x, int &y, int &wide, int &tall) { BaseClass::GetBounds(x, y, wide, tall); }
|
||||
virtual void SetParent(vgui::VPANEL parent) { BaseClass::SetParent(parent); }
|
||||
|
||||
public: // IGameEventListener
|
||||
|
||||
virtual void FireGameEvent( IGameEvent *event);
|
||||
|
||||
public: // VGUI overrides
|
||||
|
||||
virtual void Paint();
|
||||
virtual void OnMousePressed( vgui::MouseCode code );
|
||||
virtual void ApplySchemeSettings(vgui::IScheme *scheme);
|
||||
virtual void SetVisible(bool state){BaseClass::SetVisible(state);}
|
||||
|
||||
public:
|
||||
|
||||
virtual float GetZoom( void );
|
||||
virtual int GetMode( void );
|
||||
virtual float GetFullZoom( void ){ return m_fFullZoom; }
|
||||
virtual float GetMapScale( void ){ return m_fMapScale; }
|
||||
|
||||
// Player settings:
|
||||
virtual void ShowPlayerNames(bool state);
|
||||
virtual void ShowPlayerHealth(bool state);
|
||||
virtual void ShowPlayerTracks(float seconds);
|
||||
virtual void SetPlayerPositions(int index, const Vector &position, const QAngle &angle);
|
||||
|
||||
// general settings:
|
||||
virtual void SetMap(const char * map);
|
||||
virtual void SetTime( float time );
|
||||
virtual void SetMode( int mode );
|
||||
virtual bool SetTeamColor(int team, Color color);
|
||||
virtual void SetFollowAngle(bool state);
|
||||
virtual void SetFollowEntity(int entindex); // 0 = off
|
||||
virtual void SetCenter( const Vector2D &mappos);
|
||||
virtual void SetAngle( float angle);
|
||||
virtual Vector2D WorldToMap( const Vector &worldpos );
|
||||
|
||||
// Object settings
|
||||
virtual int AddObject( const char *icon, int entity, float timeToLive ); // returns object ID, 0 = no entity, -1 = forever
|
||||
virtual void SetObjectIcon( int objectID, const char *icon, float size ); // icon world size
|
||||
virtual void SetObjectText( int objectID, const char *text, Color color ); // text under icon
|
||||
virtual void SetObjectStatus( int objectID, float value, Color statusColor ); // status bar under icon
|
||||
virtual void SetObjectPosition( int objectID, const Vector &position, const QAngle &angle ); // world pos/angles
|
||||
virtual void AddObjectFlags( int objectID, int flags );
|
||||
virtual void SetObjectFlags( int objectID, int flags );
|
||||
virtual void RemoveObject( int objectID );
|
||||
virtual void RemoveObjectByIndex( int index );
|
||||
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);
|
||||
|
||||
/// allows mods to restrict health
|
||||
virtual bool CanPlayerHealthBeSeen(MapPlayer_t *player);
|
||||
|
||||
/// allows mods to restrict names (e.g. CS when mp_playerid is non-zero)
|
||||
virtual bool CanPlayerNameBeSeen(MapPlayer_t *player);
|
||||
|
||||
virtual int GetIconNumberFromTeamNumber( int teamNumber ){return teamNumber;}
|
||||
|
||||
protected:
|
||||
|
||||
virtual void DrawCamera();
|
||||
virtual void DrawObjects();
|
||||
virtual void DrawMapTexture();
|
||||
virtual void DrawMapPlayers();
|
||||
virtual void DrawMapPlayerTrails();
|
||||
virtual void UpdatePlayerTrails();
|
||||
virtual void ResetRound();
|
||||
virtual void InitTeamColorsAndIcons();
|
||||
virtual void UpdateSizeAndPosition();
|
||||
virtual bool RunHudAnimations(){ return true; }
|
||||
|
||||
bool IsInPanel(Vector2D &pos);
|
||||
MapPlayer_t* GetPlayerByUserID( int userID );
|
||||
int AddIconTexture(const char *filename);
|
||||
Vector2D MapToPanel( const Vector2D &mappos );
|
||||
int GetPixelOffset( float height );
|
||||
void UpdateFollowEntity();
|
||||
virtual void UpdatePlayers();
|
||||
void UpdateObjects(); // objects bound to entities
|
||||
MapObject_t* FindObjectByID(int objectID);
|
||||
virtual bool IsRadarLocked() {return false;}
|
||||
|
||||
virtual bool DrawIcon( MapObject_t *obj );
|
||||
|
||||
/*virtual bool DrawIcon( int textureID,
|
||||
int offscreenTextureID,
|
||||
Vector pos,
|
||||
float scale,
|
||||
float angle,
|
||||
int alpha = 255,
|
||||
const char *text = NULL,
|
||||
Color *textColor = NULL,
|
||||
float status = -1,
|
||||
Color *statusColor = NULL,
|
||||
int objectType = OBJECT_TYPE_NORMAL );*/
|
||||
|
||||
int m_nMode;
|
||||
Vector2D m_vPosition;
|
||||
Vector2D m_vSize;
|
||||
float m_flChangeSpeed;
|
||||
float m_flIconSize;
|
||||
|
||||
|
||||
IViewPort * m_pViewPort;
|
||||
MapPlayer_t m_Players[MAX_PLAYERS];
|
||||
CUtlDict< int, int> m_TextureIDs;
|
||||
CUtlVector<MapObject_t> m_Objects;
|
||||
|
||||
Color m_TeamColors[MAX_TEAMS];
|
||||
int m_TeamIcons[MAX_TEAMS];
|
||||
int m_ObjectIcons[64];
|
||||
int m_ObjectCounterID;
|
||||
vgui::HFont m_hIconFont;
|
||||
|
||||
|
||||
bool m_bShowNames;
|
||||
bool m_bShowTrails;
|
||||
bool m_bShowHealth;
|
||||
|
||||
int m_nMapTextureID; // texture id for current overview image
|
||||
|
||||
KeyValues * m_MapKeyValues; // keyvalues describing overview parameters
|
||||
|
||||
Vector m_MapOrigin; // read from KeyValues files
|
||||
float m_fMapScale; // origin and scale used when screenshot was made
|
||||
bool m_bRotateMap; // if true roatate map around 90 degress, so it fits better to 4:3 screen ratio
|
||||
|
||||
int m_nFollowEntity;// entity number to follow, 0 = off
|
||||
CPanelAnimationVar( float, m_fZoom, "zoom", "1.0" ); // current zoom n = overview panel shows 1/n^2 of whole map'
|
||||
float m_fFullZoom; // best zoom factor for full map view (1.0 is map is a square)
|
||||
Vector2D m_ViewOrigin; // map coordinates that are in the center of the pverview panel
|
||||
Vector2D m_MapCenter; // map coordinates that are in the center of the pverview panel
|
||||
|
||||
float m_fNextUpdateTime;
|
||||
float m_fViewAngle; // rotation of overview map
|
||||
float m_fWorldTime; // current world time
|
||||
float m_fNextTrailUpdate; // next time to update player trails
|
||||
float m_fTrailUpdateInterval; // if -1 don't show trails
|
||||
bool m_bFollowAngle; // if true, map rotates with view angle
|
||||
|
||||
|
||||
};
|
||||
|
||||
extern IMapOverviewPanel *g_pMapOverview;
|
||||
|
||||
#endif //
|
||||
Reference in New Issue
Block a user