/// <summary>
        /// Replace the current weapon for the target weapon and drop it.
        /// </summary>
        /// <param name="current">The current weapon.</param>
        /// <param name="target">The desired weapon.</param>
        /// <param name="drop">The current weapon Prefab.</param>
        private IEnumerator DropAndChange(IWeapon current, IWeapon target, GunPickup drop)
        {
            current.Deselect();
            if (!m_FastChangeWeapons)
            {
                yield return(new WaitForSeconds(((Gun)current).HideAnimationLength));
            }

            if (((Gun)current).DroppablePrefab)
            {
                // ReSharper disable once Unity.InefficientPropertyAccess
                Instantiate(((Gun)current).DroppablePrefab, drop.transform.position, drop.transform.rotation);
            }
            Destroy(drop.transform.gameObject);

            current.Viewmodel.SetActive(false);
            Select(target);
        }
        /// <summary>
        /// Checks the target object to analyze if it is a weapon.
        /// </summary>
        private void SearchForWeapons()
        {
            if (Target)
            {
                // Try to convert the target for a gun pickup.
                GunPickup target = Target.GetComponent <GunPickup>();

                // If the gun pickup is not null means that the target is actually a weapon.
                if (target)
                {
                    IWeapon weapon = GetWeaponByID(target.ID);

                    if (weapon == null)
                    {
                        return;
                    }

                    if (m_CurrentWeapon != null)
                    {
                        if (!m_CurrentWeapon.CanSwitch)
                        {
                            return;
                        }

                        if (IsEquipped(weapon))
                        {
                            return;
                        }

                        if (HasFreeSlot)
                        {
                            if (InputManager.GetButtonDown(m_UseButton))
                            {
                                EquipWeapon(GetWeaponIndexOnList(weapon.Identifier));
                                Destroy(target.transform.gameObject);
                                StartCoroutine(Change(m_CurrentWeapon, weapon));

                                m_PlayerBodySource.ForcePlay(m_ItemPickupSound, m_ItemPickupVolume);
                                CalculateWeight();
                            }
                        }
                        else
                        {
                            if (InputManager.GetButtonDown(m_UseButton))
                            {
                                UnequipWeapon(GetEquippedWeaponIndexOnList(m_CurrentWeapon.Identifier));
                                EquipWeapon(GetWeaponIndexOnList(weapon.Identifier));
                                StartCoroutine(DropAndChange(m_CurrentWeapon, weapon, target));

                                if (m_FastChangeWeapons)
                                {
                                    m_PlayerBodySource.ForcePlay(m_ItemPickupSound, m_ItemPickupVolume);
                                }

                                CalculateWeight();
                            }
                        }
                    }
                    else
                    {
                        if (HasFreeSlot)
                        {
                            if (InputManager.GetButtonDown(m_UseButton))
                            {
                                EquipWeapon(GetWeaponIndexOnList(weapon.Identifier));
                                Destroy(target.transform.gameObject);
                                Select(weapon);
                                CalculateWeight();
                            }
                        }
                    }
                }
            }
        }