Units/Animator.cs
using Sandbox.Citizen;

namespace PlanetMeat;

[Group( "Planet Meat - Units" ), Title( "Animator" ), Icon( "emoji_people" )]
public sealed class Animator : Component
{
	[RequireComponent] public CitizenAnimationHelper AnimHelper { get; set; }
	public SkinnedModelRenderer SkinnedModel => AnimHelper.Target;

	[Property] public CitizenAnimationHelper.HoldTypes StartingHold { get; set; }
	[Property] public CitizenAnimationHelper.Hand StartingHandedness { get; set; }

	protected override void OnStart()
	{
		base.OnStart();
		AnimHelper.HoldType = StartingHold;
		AnimHelper.Handedness = StartingHandedness;
	}

	public void Move( Vector3 velocity, Vector3 look )
	{
		AnimHelper.WithVelocity( velocity / SkinnedModel.WorldScale.x );
		AnimHelper.WithLook( look - WorldPosition );
	}
	public void Move( Vector3 velocity ) => Move( velocity, SkinnedModel.WorldTransform.Forward );
	public void StopMoving() => Move( Vector3.Zero );

	public void Attack()
	{
		AnimHelper.Target.Set( "b_attack", true );
	}

	public void TurnTo( Rotation worldRotation )
	{
		SkinnedModel.WorldRotation = worldRotation;
	}
	public void TurnTo( Vector3 direction ) => TurnTo( Rotation.LookAt( direction ) );
}