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.
104 lines
3.7 KiB
104 lines
3.7 KiB
5 years ago
|
#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;
|
||
|
}
|