private void SetupDualWieldItem(WeaponItemRuntime item)
        {
            //Place Weapon In Left Hand
            item.transform.SetParent(playerLeftHand);
            item.transform.localPosition = Vector3.zero;
            item.transform.localRotation = Quaternion.identity;

            //Get Ranged Component To Setup Left Hand Pivot
            WeaponItemRuntimeRanged leftHandRangedComponent = item as WeaponItemRuntimeRanged;

            leftHandRangedComponent.pivot.localPosition = leftHandRangedComponent.rangedData.leftHandPivotPosition;
            leftHandRangedComponent.pivot.localRotation = Quaternion.Euler(leftHandRangedComponent.rangedData.leftHandPivotRotation);
            leftHandRangedComponent.PickupWeaponPlayer();

            WeaponItemRuntimeRanged rightHandRangedComponent = inventoryWeapons[currentWeaponInList] as WeaponItemRuntimeRanged;


            //Add Dual Wield Component To It
            WeaponItemRuntimeRangedDualWielded dualWieldComponent = item.gameObject.AddComponent <WeaponItemRuntimeRangedDualWielded>();
            WeaponItemRanged_DualWielded       dualData           = leftHandRangedComponent.rangedData.dualWieldParentData;

            dualWieldComponent.SetupDualWield(dualData, leftHandRangedComponent, rightHandRangedComponent);

            //Swap Inventory To The Dual Wield Component
            inventoryWeapons[currentWeaponInList] = dualWieldComponent;
            currentWeaponItem        = dualData;
            currentWeaponItemRuntime = dualWieldComponent;
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
        private void SpawnDualWieldItem(WeaponItemRanged_DualWielded item)
        {
            //Spawn Right Hand Weapon
            GameObject rightHandGeo = Instantiate(item.weaponPrefab, playerRightHand);

            rightHandGeo.transform.localPosition = Vector3.zero;
            rightHandGeo.transform.localRotation = Quaternion.identity;
            WeaponItemRuntimeRanged rightHandRangedComponent = rightHandGeo.GetComponent <WeaponItemRuntimeRanged>();

            rightHandRangedComponent.FreshSpawnWeapon();
            rightHandRangedComponent.PickupWeaponPlayer();
            rightHandRangedComponent.Init();
            rightHandGeo.SetActive(false);

            //Spawn Left Hand Weapon
            GameObject leftHandGeo = Instantiate(item.weaponPrefab, playerLeftHand);

            leftHandGeo.transform.localPosition = Vector3.zero;
            leftHandGeo.transform.localRotation = Quaternion.identity;
            WeaponItemRuntimeRanged leftHandRangedComponent = leftHandGeo.GetComponent <WeaponItemRuntimeRanged>();

            leftHandRangedComponent.FreshSpawnWeapon();
            leftHandRangedComponent.PickupWeaponPlayer();
            leftHandRangedComponent.Init();
            leftHandRangedComponent.pivot.localPosition = leftHandRangedComponent.rangedData.leftHandPivotPosition;
            leftHandRangedComponent.pivot.localRotation = Quaternion.Euler(leftHandRangedComponent.rangedData.leftHandPivotRotation);
            leftHandGeo.SetActive(false);

            //Setup Dual Wield Component
            WeaponItemRuntimeRangedDualWielded dualWieldComponent = leftHandGeo.AddComponent <WeaponItemRuntimeRangedDualWielded>();
            WeaponItemRanged_DualWielded       dualData           = leftHandRangedComponent.rangedData.dualWieldParentData;

            dualWieldComponent.SetupDualWield(dualData, leftHandRangedComponent, rightHandRangedComponent);
            inventoryWeapons.Add(dualWieldComponent);
        }
        void EquipWeaponExistingInInventory(WeaponItemRuntime weapon)
        {
            currentWeaponItemRuntime = weapon;
            currentWeaponItem        = weapon.weaponItemData;
            WeaponItemRuntimeRangedDualWielded dualWield = weapon as WeaponItemRuntimeRangedDualWielded;

            if (dualWield == null)
            {
                weapon.gameObject.SetActive(true);
            }
            else
            {
                dualWield.OnWeaponEquipped();
            }
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
        public void ChangeCurrentInHandWeapon(WeaponItemRuntime itemRuntime)
        {
            DisableInHandWeapon();

            currentWeaponItemRuntime = itemRuntime;
            currentWeaponItem        = itemRuntime.weaponItemData;

            WeaponItemRuntimeRangedDualWielded dualWield = itemRuntime as WeaponItemRuntimeRangedDualWielded;

            if (dualWield == null)
            {
                itemRuntime.gameObject.SetActive(true);
            }
            else
            {
                dualWield.OnWeaponEquipped();
            }
            weaponController.OnWeaponEquipped(currentWeaponItemRuntime);
        }
        public void DropWeaponToGround(bool throwWeaponForce, WeaponItemRuntime weaponToDrop)
        {
            bool isDualWielded = false;

            if (weaponToDrop.weaponItemData.weaponType == WeaponType.RANGED)
            {
                WeaponItemRuntimeRanged rangedComponent = weaponToDrop as WeaponItemRuntimeRanged;
                if (rangedComponent.isDualWielded == true)
                {
                    isDualWielded = true;
                }
            }

            if (isDualWielded == false)
            {
                if (throwWeaponForce)
                {
                    WorldInteractionEvent_PickupWeaponRuntime pickupWeaponInteraction = WeaponStaticUtils.DropWeaponToGround(weaponToDrop, worldInteractionParentGroup, searcherController.controllerData.worldInteractionPrefab);
                    currentWeaponItemRuntime.OnDropWeaponToGround();
                    WeaponStaticUtils.ThrowWeaponWithForce(pickupWeaponInteraction, weaponToDrop.weaponItemData.throwDistanceForce, transform.forward);
                }
            }
            else
            {
                WeaponItemRuntimeRangedDualWielded dualWieldComponent = weaponToDrop as WeaponItemRuntimeRangedDualWielded;
                dualWieldComponent.DestroyDualWield();
            }

            inventoryWeapons.Remove(weaponToDrop);

            currentWeaponItemRuntime = null;
            currentWeaponItem        = null;

            if (playerHealthController.isDead == false)
            {
                WeaponToggle();
            }
        }