Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
#include "cbase.h"
#include "tf_leaderboardpanel.h"
#include "econ_controls.h"
#include "tf_asyncpanel.h"
#include "tf_mapinfo.h"
#include "vgui_avatarimage.h"
#include "tf_item_inventory.h"
CTFLeaderboardPanel::CTFLeaderboardPanel( Panel *pParent, const char *pszPanelName ) : CBaseASyncPanel( pParent, pszPanelName ) {}
//-----------------------------------------------------------------------------
// Purpose: Create leaderboard panels
//-----------------------------------------------------------------------------
void CTFLeaderboardPanel::ApplySchemeSettings( vgui::IScheme *pScheme ) { BaseClass::ApplySchemeSettings( pScheme );
LoadControlSettings( "Resource/UI/econ/LeaderboardPanel.res" ); }
void CTFLeaderboardPanel::ApplySettings( KeyValues *inResourceData ) { BaseClass::ApplySettings( inResourceData );
IScheme *pScheme = vgui::scheme()->GetIScheme( GetScheme() ); m_EvenTextColor = GetSchemeColor( inResourceData->GetString( "EvenTextColor" ), pScheme); m_OddTextColor = GetSchemeColor( inResourceData->GetString( "OddTextColor" ), pScheme); m_LocalPlayerTextColor = GetSchemeColor( inResourceData->GetString( "LocalPlayerTextColor" ), pScheme);
EditablePanel *pScoresContainer = dynamic_cast< EditablePanel* >( FindChildByName( "ScoresContainer", true ) );
if ( pScoresContainer ) { m_vecLeaderboardEntries.Purge(); for ( int i = 0; i < 7; ++ i ) { vgui::EditablePanel *pEntryUI = new vgui::EditablePanel( pScoresContainer, "LeaderboardEntry" ); pEntryUI->ApplySchemeSettings( pScheme ); pEntryUI->LoadControlSettings( "Resource/UI/LeaderboardSpreadEntry.res" ); m_vecLeaderboardEntries.AddToTail( pEntryUI ); } } }
//-----------------------------------------------------------------------------
// Purpose: Check for leaderboard data
//-----------------------------------------------------------------------------
bool CTFLeaderboardPanel::CheckForData_Internal() { return UpdateLeaderboards(); }
//-----------------------------------------------------------------------------
// Purpose: Checks if we have friends leaderboard data downloaded. If so, sets
// the data into the panels
//-----------------------------------------------------------------------------
bool CTFLeaderboardPanel::UpdateLeaderboards() { CUtlVector< LeaderboardEntry_t* > scores; if ( !GetLeaderboardData( scores ) ) return false; int x=0,y=0; FOR_EACH_VEC( m_vecLeaderboardEntries, i ) { Color colorToUse = i % 2 == 1 ? m_OddTextColor : m_EvenTextColor; EditablePanel *pContainer = dynamic_cast< EditablePanel* >( m_vecLeaderboardEntries[i] ); if ( pContainer ) { bool bIsEntryVisible = i < scores.Count(); pContainer->SetVisible( bIsEntryVisible ); pContainer->SetPos( x, y ); y += m_yEntryStep; if ( bIsEntryVisible ) { const LeaderboardEntry_t* leaderboardEntry = scores[i]; const CSteamID &steamID = leaderboardEntry->m_steamIDUser; bool bIsLocalPlayer = steamapicontext && steamapicontext->SteamUser() && steamapicontext->SteamUser()->GetSteamID() == steamID; pContainer->SetDialogVariable( "rank", leaderboardEntry->m_nGlobalRank ); pContainer->SetDialogVariable( "username", InventoryManager()->PersonaName_Get( steamID.GetAccountID() ) ); pContainer->SetDialogVariable( "score", leaderboardEntry->m_nScore ); CExLabel *pText = dynamic_cast< CExLabel* >( pContainer->FindChildByName( "UserName" ) ); if ( pText ) { pText->SetColorStr( bIsLocalPlayer ? m_LocalPlayerTextColor : colorToUse ); }
CAvatarImagePanel *pAvatar = dynamic_cast< CAvatarImagePanel* >( pContainer->FindChildByName( "AvatarImage" ) ); if ( pAvatar ) { pAvatar->SetShouldDrawFriendIcon( false ); pAvatar->SetPlayer( steamID, k_EAvatarSize32x32 ); } } } }
return true; }
|