Player/PlayerStats.cs
/// <summary>
/// Record stats for the local player
/// </summary>
public sealed class PlayerStats : Component, IPlayerEvent
{
[RequireComponent] public Player Player { get; set; }
float metersTravelled;
Vector3 lastPosition;
protected override void OnFixedUpdate()
{
if ( IsProxy ) return;
var delta = WorldPosition - lastPosition;
lastPosition = WorldPosition;
if ( !Player.Controller.IsOnGround )
{
return;
}
var groundDelta = delta.WithZ( 0 ).Length.InchToMeter();
if ( groundDelta > 10 ) groundDelta = 0;
metersTravelled += groundDelta;
if ( metersTravelled > 10 )
{
Sandbox.Services.Stats.Increment( "meters_walked", metersTravelled );
metersTravelled = 0;
}
}
void IPlayerEvent.OnJump()
{
if ( IsProxy ) return;
Sandbox.Services.Stats.Increment( "jump", 1 );
}
void IPlayerEvent.OnDamage( IPlayerEvent.DamageParams args )
{
if ( IsProxy ) return;
Sandbox.Services.Stats.Increment( "damage_taken", args.Damage );
}
void IPlayerEvent.OnDied( IPlayerEvent.DiedParams args )
{
if ( IsProxy ) return;
Sandbox.Services.Stats.Increment( "deaths", 1 );
}
void IPlayerEvent.OnSuicide()
{
if ( IsProxy ) return;
Sandbox.Services.Stats.Increment( "suicides", 1 );
}
}