void Swap()
    {
        if (interactTimer >= interactTime && HUDManager.instance.CanInteractWithWeapon())
        {
            WeaponSystem next = HUDManager.instance.GetClosestWeapon();
            switch (curWeapon)
            {
            case 0:
                if (next.data.sidearm && weaponSidearm == null)
                {
                    weaponSidearm = next;
                    weaponSidearm.PickupWeapon(defaultWeaponPos, 2);
                    Switch(weaponPrimary, true);
                    LoadoutManager.instance.UpdateWeapon(weaponSidearm);
                }
                else if (weaponPrimary == null)
                {
                    weaponPrimary = next;
                    weaponPrimary.PickupWeapon(defaultWeaponPos, 0);
                    LoadoutManager.instance.UpdateWeapon(weaponPrimary);
                }
                else if (weaponSecondary == null)
                {
                    weaponSecondary = next;
                    weaponSecondary.PickupWeapon(defaultWeaponPos, 1);
                    Switch(weaponPrimary, false);
                    LoadoutManager.instance.UpdateWeapon(weaponSecondary);
                }
                else
                {
                    weaponPrimary.DropWeapon();
                    weaponPrimary = next;
                    weaponPrimary.PickupWeapon(defaultWeaponPos, 0);
                    nextWeapon  = 0;
                    switching   = true;
                    switchTimer = weaponPrimary.data.switchTime;
                    LoadoutManager.instance.UpdateWeapon(weaponPrimary);
                }
                break;

            case 1:
                if (next.data.sidearm && weaponSidearm == null)
                {
                    weaponSidearm = next;
                    weaponSidearm.PickupWeapon(defaultWeaponPos, 2);
                    Switch(weaponSecondary, true);
                    LoadoutManager.instance.UpdateWeapon(weaponSidearm);
                }
                else if (weaponPrimary == null)
                {
                    weaponPrimary = next;
                    weaponPrimary.PickupWeapon(defaultWeaponPos, 0);
                    Switch(weaponSecondary, false);
                    LoadoutManager.instance.UpdateWeapon(weaponPrimary);
                }
                else
                {
                    weaponSecondary.DropWeapon();
                    weaponSecondary = next;
                    weaponSecondary.PickupWeapon(defaultWeaponPos, 1);
                    nextWeapon  = 1;
                    switching   = true;
                    switchTimer = weaponSecondary.data.switchTime;
                    LoadoutManager.instance.UpdateWeapon(weaponSecondary);
                }
                break;

            case 2:
                if (weaponPrimary == null)
                {
                    weaponPrimary = next;
                    weaponPrimary.PickupWeapon(defaultWeaponPos, 0);
                    Switch(weaponSidearm, false);
                    LoadoutManager.instance.UpdateWeapon(weaponPrimary);
                }
                else if (weaponSecondary == null)
                {
                    weaponSecondary = next;
                    weaponSecondary.PickupWeapon(defaultWeaponPos, 1);

                    nextWeapon  = 1;
                    switching   = true;
                    switchTimer = GetCurWeapon().data.switchTime;
                    GetCurWeapon().SwitchingWeapon(true);
                    LoadoutManager.instance.SwitchWeapon(2, 0);
                    LoadoutManager.instance.SwitchWeapon(0, 1);
                    LoadoutManager.instance.UpdateWeapon(weaponSecondary);
                }
                else if (next.data.sidearm)
                {
                    weaponSidearm.DropWeapon();
                    weaponSidearm = next;
                    weaponSidearm.PickupWeapon(defaultWeaponPos, 2);
                    nextWeapon  = 2;
                    switching   = true;
                    switchTimer = weaponSidearm.data.switchTime;
                    LoadoutManager.instance.UpdateWeapon(weaponSidearm);
                }
                break;
            }

            interactTimer = 0;
            interacting   = false;
        }
        interactTimer += Time.deltaTime;
    }