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); }
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(); } }
void EquipRangedWeapon() { // aimIkComponent.solver.clampWeight = currentInHandItemData.clampIKAimWeight; rangedWeaponRuntime = currentWeaponRuntime as WeaponItemRuntimeRanged; }