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);
        }
Пример #3
0
        public void OnWeaponEquipped(WeaponItemRuntime weapon)
        {
            currentWeaponType = weapon.weaponItemData.weaponType;
            switch (currentWeaponType)
            {
            case WeaponType.RANGED:
                rangedWeaponItemRuntime = weapon as WeaponItemRuntimeRanged;
                break;

            case WeaponType.MELEE:
                meleeWeaponItemRuntime = weapon as WeaponItemRuntimeMelee;
                break;

            case WeaponType.THROWABLE:
                break;

            case WeaponType.FISTS:
                meleeWeaponItemRuntime = weapon as WeaponItemRuntimeMelee;
                break;
            }

            currentRuntimeWeapon = weapon;
            animController.SetAnimInt(animController.animData.weaponAnimID, weapon.weaponItemData.weaponAnimID);
            animController.PlayAnimationHash(animController.animData.getNewWeaponAnimationClass);
        }
        public void EquipNewWeaponToInventory(WeaponItemRuntime itemRuntime)
        {
            bool canBeDualWielded = false;

            if (itemRuntime.weaponItemData.weaponType == WeaponType.RANGED)
            {
                WeaponItemRuntimeRanged rangedItem = itemRuntime as WeaponItemRuntimeRanged;
                if (rangedItem.rangedData.canBeDualWielded == true)
                {
                    //Check Inventory to see if we have the same item type
                    bool hasExistingWeaponInInventory = false;
                    int  wpnInList = 0;
                    for (int i = 0; i < inventoryWeapons.Count; i++)
                    {
                        if (inventoryWeapons[i].weaponItemData == itemRuntime.weaponItemData)
                        {
                            hasExistingWeaponInInventory = true;
                            wpnInList = i;
                            break;
                        }
                    }

                    if (hasExistingWeaponInInventory == true)
                    {
                        canBeDualWielded = true;
                        //If Reloading During Pickup Cancel
                        if (isPlayerReloading.value)
                        {
                            reloadController.ReloadCancelled();
                        }
                        //Change Our In Hand Weapon To That If We Have Not Got It (But Don't Execute usual logic)
                        if (currentWeaponItemRuntime != itemRuntime)
                        {
                            if (currentWeaponItemRuntime != null)
                            {
                                currentWeaponItemRuntime.gameObject.SetActive(false);
                            }
                            currentWeaponInList = wpnInList;
                            EquipWeaponExistingInInventory(inventoryWeapons[wpnInList]);
                        }
                        SetupDualWieldItem(itemRuntime);
                    }
                }
            }

            if (canBeDualWielded == false) //If Not Dual Wieldable We can pickup weapons normally
            {
                if (inventoryWeapons.Count == playerInventoryData.maxInventoryWeaponsAmount)
                {
                    DropWeaponToGround(false, currentWeaponItemRuntime);
                }
                else
                {
                    DisableInHandWeapon();
                }
                NewWeaponEquipped(itemRuntime.weaponItemData.weaponType, itemRuntime);
            }
        }
        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();
            }
        }
Пример #6
0
 void EquipRangedWeapon()
 {
     //  aimIkComponent.solver.clampWeight = currentInHandItemData.clampIKAimWeight;
     rangedWeaponRuntime = currentWeaponRuntime as WeaponItemRuntimeRanged;
 }