// --------
    void SelectWeapon(int idx)
    {
        if (!LocalPlayer.CanChangeWeapon())
        {
            return;
        }

        if (Weapons[idx] != LocalPlayer.Owner.WeaponComponent.CurrentWeapon)
        {
            LocalPlayer.Controls.ChangeWeaponDelegate(Weapons[idx]);
        }
    }
    // --------
    void CycleWeapons()
    {
        if (!LocalPlayer.CanChangeWeapon())
        {
            return;
        }

        int idx  = Weapons.FindIndex(obj => obj == CurrentWeapon);
        int last = Weapons.Count - 1;
        int ammo = 0;

        do
        {
            idx += 1;
            idx  = idx == last ? 0 : idx;

            var weapon = LocalPlayer.Owner.WeaponComponent.GetWeapon(Weapons[idx]);

            ammo = weapon != null ? weapon.WeaponAmmo + weapon.ClipAmmo : 0;
        } while (Weapons[idx] != CurrentWeapon && ammo == 0);

        SelectWeapon(idx);
    }