IEnumerator Reload() { if (reloading || primaryWeapon.ammo >= primaryWeapon.maxAmmo && weaponEquip == 0 || secondaryWeapon.ammo >= secondaryWeapon.maxAmmo && weaponEquip == 1 || spareAmmo <= 0) { yield break; } reloading = true; float wait = 0; PlayerMecanimAnimation mecanim = GetComponent <PlayerMecanimAnimation>(); if (weaponEquip == 0) //Primary Weapon { if (primaryWeapon.reloadSound) { GetComponent <AudioSource>().PlayOneShot(primaryWeapon.reloadSound); } if (useMecanim) { //Mecanim mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 1); mecanim.AttackAnimation(primaryWeapon.reloadAnimation.name); wait = mecanim.animator.GetCurrentAnimatorClipInfo(0).Length; } else { //Legacy mainModel.GetComponent <Animation>()[primaryWeapon.reloadAnimation.name].layer = 6; mainModel.GetComponent <Animation>().Play(primaryWeapon.reloadAnimation.name); wait = mainModel.GetComponent <Animation>()[primaryWeapon.reloadAnimation.name].length; } yield return(new WaitForSeconds(wait)); } else { if (secondaryWeapon.reloadSound) { GetComponent <AudioSource>().PlayOneShot(secondaryWeapon.reloadSound); } if (useMecanim) { //Mecanim mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 1); mecanim.AttackAnimation(secondaryWeapon.reloadAnimation.name); wait = mecanim.animator.GetCurrentAnimatorClipInfo(0).Length; } else { //Legacy mainModel.GetComponent <Animation>()[secondaryWeapon.reloadAnimation.name].layer = 6; mainModel.GetComponent <Animation>().Play(secondaryWeapon.reloadAnimation.name); wait = mainModel.GetComponent <Animation>()[secondaryWeapon.reloadAnimation.name].length; } yield return(new WaitForSeconds(wait)); } if (useMecanim) { mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 0); } ResetAmmo(); reloading = false; }
IEnumerator SwapWeapon() { /*if(reloading){ * return; * }*/ StopCoroutine("Reload"); if (onAiming) { Camera.main.fieldOfView = 60; onAiming = false; } PlayerMecanimAnimation mecanim = GetComponent <PlayerMecanimAnimation>(); if (weaponEquip == 0) { //Swap from Primary to Secondary if (!secondaryWeapon.bulletPrefab) { yield break; //Do Nothing If you don't have Secondary Weapon's Bullet } if (primaryWeaponModel) { primaryWeaponModel.SetActive(false); } if (secondaryWeaponModel) { secondaryWeaponModel.SetActive(true); } weaponEquip = 1; if (!useMecanim && secondaryWeapon.equipAnimation) { //For Legacy Animation mainModel.GetComponent <Animation>()[secondaryWeapon.equipAnimation.name].layer = 10; mainModel.GetComponent <Animation>().Play(secondaryWeapon.equipAnimation.name); freeze = true; float wait = mainModel.GetComponent <Animation>()[secondaryWeapon.equipAnimation.name].length; yield return(new WaitForSeconds(wait)); freeze = false; } else { //For Mecanim Animation mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 1); GetComponent <PlayerMecanimAnimation>().PlayAnim(secondaryWeapon.equipAnimation.name); freeze = true; float wait = GetComponent <PlayerMecanimAnimation>().animator.GetCurrentAnimatorClipInfo(0).Length - 0.4f; yield return(new WaitForSeconds(wait)); mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 0); freeze = false; } } else { //Swap from Secondary to Primary if (!primaryWeapon.bulletPrefab) { yield break; //Do Nothing If you don't have Primary Weapon's Bullet } if (primaryWeaponModel) { primaryWeaponModel.SetActive(true); } if (secondaryWeaponModel) { secondaryWeaponModel.SetActive(false); } weaponEquip = 0; if (!useMecanim && primaryWeapon.equipAnimation) { //For Legacy Animation mainModel.GetComponent <Animation>()[primaryWeapon.equipAnimation.name].layer = 10; mainModel.GetComponent <Animation>().Play(primaryWeapon.equipAnimation.name); freeze = true; float wait = mainModel.GetComponent <Animation>()[primaryWeapon.equipAnimation.name].length; yield return(new WaitForSeconds(wait)); freeze = false; } else { //For Mecanim Animation mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 1); GetComponent <PlayerMecanimAnimation>().PlayAnim(primaryWeapon.equipAnimation.name); freeze = true; float wait = GetComponent <PlayerMecanimAnimation>().animator.GetCurrentAnimatorClipInfo(0).Length - 0.4f; yield return(new WaitForSeconds(wait)); mecanim.animator.SetLayerWeight(mecanim.upperBodyLayer, 0); freeze = false; } } if (!useMecanim) { GetComponent <PlayerLegacyAnimation>().SetAnimation(); } else { GetComponent <PlayerMecanimAnimation>().SetAnimation(); GetComponent <PlayerMecanimAnimation>().SetIdle(); } SettingWeapon(); }