LeaderboardDisplay.cs
using Sandbox;
using System;
using System.Threading.Tasks;
public sealed class LeaderboardDisplay : Component, LeaderboardDisplay.ILeaderboardEvent
{
[Property] TextRenderer boardText;
public interface ILeaderboardEvent : ISceneEvent<ILeaderboardEvent>
{
void OnGlobalHit();
void OnFriendsHit();
void OnCenterMeHit();
}
void ILeaderboardEvent.OnGlobalHit()
{
Sound.Play( "sounds/medikitsound.sound" );
DisplayLeaderboard();
Log.Info( "Displaying global leaderboard..." );
}
void ILeaderboardEvent.OnFriendsHit()
{
Sound.Play( "sounds/medikitsound.sound" );
DisplayLeaderboard( onlyFriends: true );
Log.Info( "Displaying friends leaderboard..." );
}
void ILeaderboardEvent.OnCenterMeHit()
{
Sound.Play( "sounds/medikitsound.sound" );
DisplayLeaderboard( centerMe: true );
Log.Info( "Centering on me..." );
}
protected override void OnStart()
{
DisplayLeaderboard();
}
protected override void OnUpdate()
{
}
public struct ScoreMetadata
{
public double time { get; set; }
}
public async Task DisplayLeaderboard(bool onlyFriends = false, bool centerMe = false)
{
var _scoreBoard = Sandbox.Services.Leaderboards.GetFromStat( "straightgas.graveyard_gunners", "LeaderboardTest" );
_scoreBoard.SetAggregationMax();
_scoreBoard.SetSortDescending();
_scoreBoard.MaxEntries = 13;
if ( onlyFriends ) { _scoreBoard.SetFriendsOnly(onlyFriends); }
if ( centerMe ) { _scoreBoard.CenterOnMe(); }
boardText.Text = "LOADING...";
await _scoreBoard.Refresh();
boardText.Text = "";
foreach ( var entry in _scoreBoard.Entries )
{
/*
DateTimeOffset timeStamp = entry.Timestamp;
var _timeBoard = Sandbox.Services.Leaderboards.GetFromStat( "straightgas.graveyard_gunners", "TimeTest" );
_timeBoard.SetDatePeriod( timeStamp.UtcDateTime );
await _timeBoard.Refresh();
Log.Info( _timeBoard.Entries[0].ToString() );
*/
boardText.Text += $"\n{entry.CountryCode} #{entry.Rank} {entry.DisplayName}: {Math.Round( entry.Value, 0 )}";
// Log.Info( $"#{entry.Rank} {entry.DisplayName}: {entry.Value}" );
}
}
}