|
|
//========= Copyright � 1996-2008, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=====================================================================================//
#include "cbase.h"
#include "uigamedata.h"
#include "uiavatarimage.h"
#include "engineinterface.h"
#include "vgui/ISurface.h"
#ifndef _GAMECONSOLE
#include "steam/steam_api.h"
#endif
#ifndef _GAMECONSOLE
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
CGameUiAvatarImage::CGameUiAvatarImage( void ) { m_bValid = false; m_flFetchedTime = 0.0f; m_iTextureID = ( -1 ); }
void CGameUiAvatarImage::ClearAvatarSteamID( void ) { m_bValid = false; m_flFetchedTime = 0.0f; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CGameUiAvatarImage::SetAvatarSteamID( CSteamID steamIDUser ) { ClearAvatarSteamID();
if ( steamapicontext->SteamFriends() && steamapicontext->SteamUtils() ) { int iAvatar = steamapicontext->SteamFriends()->GetMediumFriendAvatar( steamIDUser );
/*
// See if it's in our list already
*/
uint32 wide, tall; if ( steamapicontext->SteamUtils()->GetImageSize( iAvatar, &wide, &tall ) ) { bool bUseSteamImage = true; if ( wide == 0 || tall == 0 ) { // attempt to handle rare data integrity issue, avatar got lost
bUseSteamImage = false; // mock up solid white as 64x64
wide = tall = 64; }
int cubImage = wide * tall * 4; byte *rgubDest = (byte*)_alloca( cubImage ); if ( bUseSteamImage ) { steamapicontext->SteamUtils()->GetImageRGBA( iAvatar, rgubDest, cubImage ); } else { // solid white, avoids any issue with where the alpha channel is
memset( rgubDest, 0xFF, cubImage ); } InitFromRGBA( rgubDest, wide, tall );
m_flFetchedTime = Plat_FloatTime(); } }
return m_bValid; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CGameUiAvatarImage::InitFromRGBA( const byte *rgba, int width, int height ) { if ( m_iTextureID == -1 ) { m_iTextureID = vgui::surface()->CreateNewTextureID( true ); }
vgui::surface()->DrawSetTextureRGBA( m_iTextureID, rgba, width, height );
int screenWide, screenTall; vgui::surface()->GetScreenSize( screenWide, screenTall ); m_nWide = width * ( ( (float) screenWide ) / 640.0f ); m_nTall = height * ( ( (float) screenTall ) / 480.0f ); m_Color = Color( 255, 255, 255, 255 );
m_bValid = true; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CGameUiAvatarImage::Paint( void ) { if ( m_bValid ) { vgui::surface()->DrawSetColor( m_Color ); vgui::surface()->DrawSetTexture( m_iTextureID ); vgui::surface()->DrawTexturedRect( m_nX, m_nY, m_nX + m_nWide, m_nY + m_nTall ); } }
#endif // !_GAMECONSOLE
|