Pawn/SkateAnimator.cs
namespace Skateboard;

public sealed class SkateAnimator : PawnAnimator
{
	[Property] public Skateboard.Player.SkatePawn Pawn { get; set; }
	[Property] public SkinnedModelRenderer BoardRenderer { get; set; }

	protected override void OnUpdate()
	{
		var pawn = Pawn ?? Components.Get<Skateboard.Player.SkatePawn>();
		if ( pawn is null )
			return;

		var controller = pawn.Controller;
		SetAnimParameter( "b_grind", controller?.OnGrind ?? false );
		SetAnimParameter( "b_onground", controller?.IsGrounded ?? false );
		SetAnimParameter( "b_crouch", pawn.Crouch );
		SetAnimParameter( "f_left", -pawn.TurnRight );

		if ( BoardRenderer.IsValid() )
			BoardRenderer.Set( "f_left", -pawn.TurnRight );
	}

	public void HandleEvent( string name )
	{
		switch ( name )
		{
			case "jump":
				Trigger( "b_ollie" );
				BoardRenderer?.Set( "b_ollie", true );
				break;
			case "land":
				Trigger( "b_land" );
				break;
			case "front":
				Trigger( "b_hit_front" );
				break;
			case "back":
				Trigger( "b_hit_back" );
				break;
			case "angry":
				Trigger( "b_angry" );
				break;
		}
	}
}