Helper/GrindAudioHelper.cs
namespace Skateboard.Player;
public sealed class GrindAudioHelper : Component
{
[Property] public SkatePawn Pawn { get; set; }
[Property] private SoundEvent GrindSound { get; set; }
private SoundHandle grindSound;
private bool PreviouslyGrinding;
protected override void OnUpdate()
{
var pawn = Pawn ?? Components.Get<SkatePawn>();
if ( pawn is null )
return;
if ( !IsLocallyControlled( pawn ) )
return;
var pawnVelocity = pawn.Velocity.Length;
if ( !pawn.Grinding )
{
if ( grindSound.IsValid() )
grindSound.Stop();
PreviouslyGrinding = false;
return;
}
if ( !PreviouslyGrinding || !grindSound.IsValid() )
{
if ( grindSound.IsValid() )
grindSound.Stop();
grindSound = pawn.GameObject.PlaySound( GrindSound );
}
if ( grindSound.IsValid() )
{
grindSound.Volume = pawnVelocity * 0.01f;
grindSound.Pitch = pawnVelocity * 0.005f;
}
PreviouslyGrinding = true;
}
private static bool IsLocallyControlled( SkatePawn pawn )
{
if ( !Networking.IsActive )
return true;
if ( pawn.GameObject.Network.IsOwner )
return true;
return pawn.OwningConnectionId == Connection.Local.Id;
}
}