mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 21:26:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user