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;
}
}