Player/Inventory/PlayerInventory.EquipState.cs
public partial class PlayerInventory
{
	public enum EquippedState
	{
		Deploying,
		Ready,
		Holstering
	}

	public BaseWeapon QueuedWeapon { get; set; }
	public EquippedState EquipState { get; private set; } = EquippedState.Ready;

	public TimeSince TimeSinceDeployed { get; private set; } = 1;
	public TimeSince TimeSinceHolstered { get; private set; } = 1;
	public float EquipTime => 0.25f;

	/// <summary>
	/// Tries to holster the current weapon.
	/// </summary>
	public void Holster()
	{
		TimeSinceHolstered = 0;
		EquipState = EquippedState.Holstering;
	}

	/// <summary>
	/// Tries to deploy the current weapon.
	/// </summary>
	public void Deploy()
	{
		TimeSinceDeployed = 0;
		EquipState = EquippedState.Deploying;
	}

	private void UpdateEquipState()
	{
		if ( EquipState == EquippedState.Ready ) return;

		if ( EquipState == EquippedState.Holstering && TimeSinceHolstered >= EquipTime )
		{
			if ( QueuedWeapon.IsValid() )
			{
				Log.Info( "Holstered" );
				SetCurrent( QueuedWeapon );
				QueuedWeapon = null;
				return;
			}

			EquipState = EquippedState.Ready;
		}

		if ( EquipState == EquippedState.Deploying && TimeSinceDeployed >= EquipTime )
		{
			Log.Info( "Deployed" );
			EquipState = EquippedState.Ready;
		}
	}
}