Files
sbox-public/engine/Sandbox.Engine/Game/Services/Stats/Stats.Map.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

68 lines
2.1 KiB
C#

namespace Sandbox.Services;
/// <summary>
/// Allows access to stats for the current game. Stats are defined by the game's author
/// and can be used to track anything from player actions to performance metrics. They are
/// how you submit data to leaderboards.
/// </summary>
public static partial class Stats
{
/// <summary>
/// Stats for the current map
/// </summary>
public static class Map
{
/// <summary>
/// Get the stats for the local player
/// </summary>
public static PlayerStats Local => Stats.GetLocalPlayerStats( Application.MapPackage?.GetIdent( false, false ) ?? "local.map" );
/// <summary>
/// Get the global stats
/// </summary>
[Title( "Get Global Map Stats" )]
[Category( "Services/Stats" )]
[Icon( "emoji_events" )]
[ActionGraphNode( "services.stats.map.getglobal" )]
public static GlobalStats Global => Stats.GetGlobalStats( Application.MapPackage?.GetIdent( false, false ) ?? "local.map" );
/// <summary>
/// Add a stat value for this package
/// </summary>
[Title( "Set Map Stat" )]
[Category( "Services/Stats" )]
[Icon( "emoji_events" )]
[ActionGraphNode( "services.stats.map.set" )]
public static void SetValue( string name, double amount, Dictionary<string, object> data = default )
{
var package = Application.MapPackage;
if ( package is not null )
{
var ident = package.GetIdent( false, false );
Api.Stats.AddIncrement( ident, name, amount, GetObjectDictionary( data ) );
}
Local?.Predict( name, amount );
}
/// <summary>
/// Get a stat for the local player
/// </summary>
[Title( "Get Local" )]
[Category( "Services/Stats" )]
[Icon( "emoji_events" )]
[ActionGraphNode( "services.stats.map.getlocal" ), Pure]
public static PlayerStat GetLocal( string name ) => Local.Get( name );
/// <summary>
/// Get a stat for the local player
/// </summary>
[Title( "Get Local" )]
[Category( "Services/Stats" )]
[Icon( "emoji_events" )]
[ActionGraphNode( "services.stats.map.getglobal" ), Pure]
public static GlobalStat GetGlobal( string name ) => Global.Get( name );
}
}