Code/MoveModes/Handcuffed.cs
namespace Sandbox.Movement;

[Icon( "person_search" ), Group( "Movement" ), Title( "MoveMode - Handcuffed" )]
public class MoveModeHandcuffed : MoveModeWalk
{
	[Property] public int Priority { get; set; } = 100;
	[Property] [Range(0,1), Step(0.05f)] public float SpeedReductionFactor { get; set; } = 0.7f;
	public bool IsHandcuffed { get; set; }
	
	private float _oldRunSpeed;
	
	public override int Score(PlayerController controller) => IsHandcuffed ? Priority : -100;
	
	public override void AddVelocity()
	{
		Controller.WishVelocity = Controller.WishVelocity.WithX(Controller.WishVelocity.x * SpeedReductionFactor)
			.WithY(Controller.WishVelocity.y * SpeedReductionFactor);
		base.AddVelocity();
	}

	public override void OnModeBegin()
	{
		Controller.Renderer.Set( "holdtype", 4 );
		_oldRunSpeed = Controller.RunSpeed;
		Controller.RunSpeed = 0;
	}
	public override void OnModeEnd( MoveMode next )
	{
		Controller.Renderer.Set( "holdtype", 0 );
		Controller.RunSpeed = _oldRunSpeed;
	}
}