Files
sbox-public/engine/Sandbox.Engine/Game/Services/AchievementOverview.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

49 lines
1.3 KiB
C#

namespace Sandbox.Services;
/// <summary>
/// Activity Feed
/// </summary>
public sealed class AchievementOverview
{
public Package Package { get; set; }
public Achievement[] Achievements { get; set; }
public DateTimeOffset LastSeen { get; set; }
public int Unlocked { get; set; }
public int Score { get; set; }
public int Total { get; set; }
public int TotalScore { get; set; }
// Internal - because exposed through MenuUtility because games don't need to access this
internal static async Task<AchievementOverview[]> GetFeed( int take = 20 )
{
take = take.Clamp( 1, 50 );
try
{
var posts = await Sandbox.Backend.Players.GetAchievementProgress( AccountInformation.SteamId, take );
if ( posts is null ) return Array.Empty<AchievementOverview>();
return posts.Select( x => From( x ) ).ToArray();
}
catch ( Exception )
{
return default;
}
}
internal static AchievementOverview From( PlayerAchievementProgress p )
{
if ( p is null ) return default;
return new AchievementOverview
{
Achievements = p.Achievements.Select( x => new Achievement( x ) ).ToArray(),
LastSeen = p.LastSeen,
Unlocked = p.Unlocked,
Score = p.Score,
Total = p.Total,
TotalScore = p.TotalScore,
Package = RemotePackage.FromDto( p.Package ),
};
}
}