void SpawnDrop(WeaponNames weaponDrop, Transform spawn, Vector2Int ammo)
    {
        GameObject drop = PlayerWeaponLoader.GetWeapon(weaponDrop).dropPrefab;

        drop = Instantiate(drop, spawn.position, spawn.rotation);
        drop.GetComponent <WeaponPickup>().SetAmmo(ammo);
    }
    public bool SwapWeapon(WeaponNames newWeapon, Transform pickup, int totalAmmo, int clipAmmo = -1)
    {
        WeaponPrefab newPrefab = PlayerWeaponLoader.GetWeapon(newWeapon);
        Weapon       old       = weapons[currentWeapon];
        int          slot      = (currentWeapon == 0) ? 1 : 0;

        if (!old.Ready || !old.gameObject.activeSelf || switchingWeapons || newPrefab.weaponPrefab == null || old.gunLocked)
        {
            return(false);
        }

        if (weapons[1] != null)
        {
            if (weapons[slot] != null)
            {
                slot = currentWeapon;
            }

            old = weapons[slot];
            switchingWeapons = true;

            Vector2Int dropAmmo = new Vector2Int();
            dropAmmo.x = old.GetAmmo();
            dropAmmo.y = old.ammunition.AmmoLeft();

            if (dropAmmo.magnitude > 0)
            {
                SpawnDrop(old.thisWeapon, pickup, dropAmmo);
            }

            StartCoroutine(SwapWeaponSequence(newPrefab, old, (slot == currentWeapon), slot, clipAmmo, totalAmmo));
        }
        else
        {
            Weapon instance = Instantiate(newPrefab.weaponPrefab, transform.position, transform.rotation, transform);
            weapons[1] = instance;
            instance.SetAmmo(clipAmmo);
            instance.ammunition.SetAmmo(totalAmmo);
            instance.gameObject.SetActive(false);
            SwitchWeapon();
        }

        if (OnPickedUpWeapon != null)
        {
            OnPickedUpWeapon();
        }
        return(true);
    }