You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
8.2 KiB
254 lines
8.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef VGUI_AVATARIMAGE_H |
|
#define VGUI_AVATARIMAGE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include <vgui_controls/Image.h> |
|
#include <vgui_controls/ImagePanel.h> |
|
#include "steam/steam_api.h" |
|
#include "c_baseplayer.h" |
|
|
|
// size of the friend background frame (see texture ico_friend_indicator_avatar) |
|
#define FRIEND_ICON_SIZE_X (55) |
|
#define FRIEND_ICON_SIZE_Y (34) |
|
|
|
// offset of avatar within the friend icon |
|
#define FRIEND_ICON_AVATAR_INDENT_X (22) |
|
#define FRIEND_ICON_AVATAR_INDENT_Y (1) |
|
|
|
// size of the standard avatar icon (unless override by SetAvatarSize) |
|
#define DEFAULT_AVATAR_SIZE (32) |
|
|
|
|
|
//============================================================================= |
|
// HPE_CHANGE: |
|
// [pfreese] Refactored these classes so that the CAvatarImage supports a |
|
// default image to be used whenever the Steam avatar is not set or fails to |
|
// be retrieved. |
|
//============================================================================= |
|
|
|
struct AvatarImagePair_t |
|
{ |
|
AvatarImagePair_t() { m_iAvatar = 0; } |
|
AvatarImagePair_t( CSteamID steamID, int av ) { m_SteamID = steamID; m_iAvatar = av; } |
|
bool operator<( const AvatarImagePair_t &rhs ) const |
|
{ |
|
return m_SteamID.ConvertToUint64() < rhs.m_SteamID.ConvertToUint64() || |
|
( m_SteamID.ConvertToUint64() == rhs.m_SteamID.ConvertToUint64() && m_iAvatar < rhs.m_iAvatar ); |
|
} |
|
|
|
CSteamID m_SteamID; |
|
int m_iAvatar; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: avatar sizes, formerly used in ISteamFriends, but now only used in game code |
|
//----------------------------------------------------------------------------- |
|
enum EAvatarSize |
|
{ |
|
k_EAvatarSize32x32 = 0, |
|
k_EAvatarSize64x64 = 1, |
|
k_EAvatarSize184x184 = 2, |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CAvatarImage : public vgui::IImage |
|
{ |
|
public: |
|
CAvatarImage( void ); |
|
|
|
// Call this to set the steam ID associated with the avatar |
|
//============================================================================= |
|
// HPE_BEGIN: |
|
// [tj] Added parameter to specify size. Default is 32x32. |
|
//============================================================================= |
|
bool SetAvatarSteamID( CSteamID steamIDUser, EAvatarSize avatarSize = k_EAvatarSize32x32 ); |
|
//============================================================================= |
|
// HPE_END |
|
//============================================================================= |
|
void UpdateFriendStatus( void ); |
|
void ClearAvatarSteamID( void ); |
|
|
|
// Call to Paint the image |
|
// Image will draw within the current panel context at the specified position |
|
virtual void Paint( void ); |
|
|
|
// Set the position of the image |
|
virtual void SetPos(int x, int y) |
|
{ |
|
m_nX = x; |
|
m_nY = y; |
|
} |
|
|
|
// Gets the size of the content |
|
virtual void GetContentSize(int &wide, int &tall) |
|
{ |
|
wide = m_wide; |
|
tall = m_tall; |
|
} |
|
|
|
// Get the size the image will actually draw in (usually defaults to the content size) |
|
virtual void GetSize(int &wide, int &tall) |
|
{ |
|
GetContentSize( wide, tall ); |
|
} |
|
|
|
// Sets the size of the image |
|
virtual void SetSize(int wide, int tall); |
|
|
|
void SetAvatarSize(int wide, int tall); |
|
|
|
// Set the draw color |
|
virtual void SetColor(Color col) |
|
{ |
|
m_Color = col; |
|
} |
|
|
|
bool IsValid() { return m_bValid; } |
|
int GetWide() { return m_wide; } |
|
int GetTall() { return m_tall; } |
|
int GetAvatarWide() { return m_avatarWide; } |
|
int GetAvatarTall() { return m_avatarTall; } |
|
|
|
//============================================================================= |
|
// HPE_BEGIN: |
|
//============================================================================= |
|
|
|
// [tj] simple setter for drawing friend icon |
|
void SetDrawFriend(bool drawFriend) { m_bDrawFriend = drawFriend; } |
|
|
|
// [pmf] specify the default (fallback) image |
|
void SetDefaultImage(vgui::IImage* pImage) { m_pDefaultImage = pImage; } |
|
|
|
//============================================================================= |
|
// HPE_END |
|
//============================================================================= |
|
|
|
virtual bool Evict(); |
|
virtual int GetNumFrames(); |
|
virtual void SetFrame( int nFrame ); |
|
virtual vgui::HTexture GetID(); |
|
virtual void SetRotation( int iRotation ) { return; } |
|
|
|
protected: |
|
void InitFromRGBA( int iAvatar, const byte *rgba, int width, int height ); |
|
|
|
private: |
|
void LoadAvatarImage(); |
|
|
|
Color m_Color; |
|
int m_iTextureID; |
|
int m_nX, m_nY; |
|
int m_wide, m_tall; |
|
int m_avatarWide, m_avatarTall; |
|
bool m_bValid; |
|
bool m_bFriend; |
|
bool m_bLoadPending; |
|
float m_fNextLoadTime; // used to throttle load attempts |
|
|
|
EAvatarSize m_AvatarSize; |
|
CHudTexture *m_pFriendIcon; |
|
CSteamID m_SteamID; |
|
|
|
//============================================================================= |
|
// HPE_BEGIN: |
|
//============================================================================= |
|
|
|
// [tj] Whether or not we should draw the friend icon |
|
bool m_bDrawFriend; |
|
|
|
// [pmf] image to use as a fallback when get from steam fails (or not called) |
|
vgui::IImage* m_pDefaultImage; |
|
|
|
//============================================================================= |
|
// HPE_END |
|
//============================================================================= |
|
|
|
static CUtlMap< AvatarImagePair_t, int > s_AvatarImageCache; |
|
static bool m_sbInitializedAvatarCache; |
|
|
|
CCallback<CAvatarImage, PersonaStateChange_t, false> m_sPersonaStateChangedCallback; |
|
|
|
void OnPersonaStateChanged( PersonaStateChange_t *info ); |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CAvatarImagePanel : public vgui::Panel |
|
{ |
|
public: |
|
DECLARE_CLASS_SIMPLE( CAvatarImagePanel, vgui::Panel ); |
|
|
|
CAvatarImagePanel( vgui::Panel *parent, const char *name ); |
|
|
|
// Set the player that this Avatar should display for |
|
//============================================================================= |
|
// HPE_BEGIN: |
|
// [menglish] Added default variable of scalable to allow the avatar to be drawn at sizes other than 32, 32 |
|
// [tj] added a parameter for drawing the friend icon. Defaulted to true to maintain backward compatibility. |
|
// [menglish] Added parameter to specify a default avatar |
|
// [menglish] Added a function to set the avatar size of the AvatarImage |
|
//============================================================================= |
|
|
|
// reset the image to its default value, clearing any info retrieved from Steam |
|
void ClearAvatar(); |
|
|
|
void SetPlayer( C_BasePlayer *pPlayer, EAvatarSize avatarSize = k_EAvatarSize32x32 ); |
|
|
|
// [tj] Overloaded function to go straight to entity index |
|
void SetPlayer( int entityIndex, EAvatarSize avatarSize = k_EAvatarSize32x32 ); |
|
|
|
// [tj] lower level function that expects a steam ID instead of a player |
|
void SetPlayer(CSteamID steamIDForPlayer, EAvatarSize avatarSize ); |
|
|
|
// sets whether or not the image should scale to fit the size of the ImagePanel (defaults to false) |
|
void SetShouldScaleImage( bool bScaleImage ); |
|
|
|
// sets whether to automatically draw the friend icon behind the avatar for Steam friends |
|
void SetShouldDrawFriendIcon( bool bDrawFriend ); |
|
|
|
// specify the size of the avatar portion of the image (the actual image may be larger than this |
|
// when it incorporates the friend icon) |
|
void SetAvatarSize( int width, int height); |
|
|
|
// specify a fallback image to use |
|
void SetDefaultAvatar(vgui::IImage* pDefaultAvatar); |
|
|
|
virtual void OnSizeChanged(int newWide, int newTall); |
|
|
|
//============================================================================= |
|
// HPE_END |
|
//============================================================================= |
|
|
|
virtual void OnMousePressed(vgui::MouseCode code); |
|
|
|
virtual void PaintBackground(); |
|
bool IsValid() { return (m_pImage->IsValid()); } |
|
|
|
void SetClickable( bool bClickable ) { m_bClickable = bClickable; } |
|
|
|
protected: |
|
CPanelAnimationVar( Color, m_clrOutline, "color_outline", "Black" ); |
|
virtual void ApplySettings(KeyValues *inResourceData); |
|
|
|
void UpdateSize(); |
|
|
|
private: |
|
CAvatarImage *m_pImage; |
|
bool m_bScaleImage; |
|
bool m_bSizeDirty; |
|
bool m_bClickable; |
|
}; |
|
|
|
#endif // VGUI_AVATARIMAGE_H
|
|
|