public virtual void LoadAllAmmo(vShooterWeapon weapon, bool secundaryWeapon = false) { if (!weapon) { return; } UpdateTotalAmmo(); if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo(secundaryWeapon))) { var needAmmo = weapon.clipSize - weapon.ammoCount; if (weapon.isInfinityAmmo) { weapon.AddAmmo(needAmmo); } else { if (WeaponAmmo(weapon).count < needAmmo) { needAmmo = WeaponAmmo(weapon).count; } weapon.AddAmmo(needAmmo); WeaponAmmo(weapon).Use(needAmmo); } weapon.onReload.Invoke(); } }
void Start() { weapon = GetComponent <vShooterWeapon>(); if (weapon) { weapon.onChangerPowerCharger.AddListener(OnChangerPower); } }
public virtual void SetRightWeapon(GameObject weapon) { if (weapon != null) { var w = weapon.GetComponent <vShooterWeapon>(); SetRightWeapon(w); } else { rWeapon = null; } }
public vAmmo WeaponAmmo(vShooterWeapon weapon) { if (!weapon) { return(null); } var ammo = new vAmmo(); if (ammoManager && ammoManager.ammos != null && ammoManager.ammos.Count > 0) { ammo = ammoManager.GetAmmo(weapon.ammoID); } return(ammo); }
protected virtual void UpdateTotalAmmo(vShooterWeapon weapon, ref int targetTotalAmmo, int displayId) { if (!weapon) { return; } var ammoCount = 0; var ammo = WeaponAmmo(weapon); if (ammo != null) { ammoCount += ammo.count; } targetTotalAmmo = ammoCount; UpdateAmmoDisplay(displayId); }
private void SetRightWeapon(vShooterWeapon weapon) { rWeapon = weapon; if (rWeapon) { rWeapon.inHolder = false; rWeapon.ignoreTags = ignoreTags; rWeapon.hitLayer = damageLayer; rWeapon.root = transform; rWeapon.onDisable.RemoveListener(HideRightAmmoDisplay); rWeapon.onDisable.AddListener(HideRightAmmoDisplay); rWeapon.onDestroy.RemoveListener(OnDestroyWeapon); rWeapon.onDestroy.AddListener(OnDestroyWeapon); if (rWeapon.dontUseReload) { LoadAllAmmo(rWeapon, false); } if (rWeapon.secundaryWeapon) { rWeapon.secundaryWeapon.ignoreTags = ignoreTags; rWeapon.secundaryWeapon.hitLayer = damageLayer; rWeapon.secundaryWeapon.root = transform; rWeapon.secundaryWeapon.isSecundaryWeapon = true; if (rWeapon.secundaryWeapon.dontUseReload) { LoadAllAmmo(rWeapon.secundaryWeapon, true); } } if (usingThirdPersonController) { if (useAmmoDisplay && !ammoDisplayR) { GetAmmoDisplays(); } if (useAmmoDisplay && ammoDisplayR) { ammoDisplayR.Show(); } UpdateRightAmmo(); } LoadIKAdjust(rWeapon.weaponCategory); onEquipWeapon.Invoke(weapon.gameObject, false); } }
protected virtual void HandleShot(vShooterWeapon weapon, GenericInput weaponInput, bool secundaryShot = false) { if (weapon.chargeWeapon) { if (weapon.ammoCount > 0 && weapon.powerCharge < 1 && weaponInput.GetButton()) { weapon.powerCharge += Time.deltaTime * weapon.chargeSpeed; } else if ((weapon.powerCharge >= 1 && weapon.autoShotOnFinishCharge) || weaponInput.GetButtonUp() || (!weaponInput.GetButton() && isAiming && weapon.powerCharge > 0)) { if (shooterManager.hipfireShot) { aimTimming = 3f; } shooterManager.Shoot(aimPosition, !isAiming, secundaryShot); weapon.powerCharge = 0; } animator.SetFloat("PowerCharger", weapon.powerCharge); } else if (weapon.automaticWeapon ? weaponInput.GetButton() : weaponInput.GetButtonDown()) { if (shooterManager.hipfireShot) { aimTimming = 3f; } shooterManager.Shoot(aimPosition, !isAiming, secundaryShot); } else if (weaponInput.GetButtonDown()) { if (allowAttack == false) { if (shooterManager.hipfireShot) { aimTimming = 1f; } shooterManager.Shoot(aimPosition, !isAiming, secundaryShot); allowAttack = true; } } else { allowAttack = false; } }
public virtual void SetRightWeapon(GameObject weapon) { if (weapon != null) { var w = weapon.GetComponent <vShooterWeapon>(); rWeapon = w; if (rWeapon) { rWeapon.ignoreTags = ignoreTags; rWeapon.hitLayer = damageLayer; rWeapon.root = transform; rWeapon.onDestroy.AddListener(OnDestroyWeapon); if (rWeapon.dontUseReload) { LoadAllAmmo(rWeapon, false); } if (rWeapon.secundaryWeapon) { rWeapon.secundaryWeapon.ignoreTags = ignoreTags; rWeapon.secundaryWeapon.hitLayer = damageLayer; rWeapon.secundaryWeapon.root = transform; rWeapon.secundaryWeapon.isSecundaryWeapon = true; if (rWeapon.secundaryWeapon.dontUseReload) { LoadAllAmmo(rWeapon.secundaryWeapon, true); } } if (usingThirdPersonController) { if (useAmmoDisplay && !ammoDisplayR) { GetAmmoDisplays(); } if (useAmmoDisplay && ammoDisplayR) { ammoDisplayR.Show(); } UpdateRightAmmo(); } currentShotTime = 0; LoadIKAdjust(rWeapon.weaponCategory); } } }
public void SetRightWeapon(GameObject weapon) { if (weapon != null) { var w = weapon.GetComponent <vShooterWeapon>(); rWeapon = w; if (rWeapon) { rWeapon.ignoreTags = ignoreTags; rWeapon.hitLayer = damageLayer; rWeapon.root = transform; rWeapon.onDestroy.AddListener(OnDestroyWeapon); if (rWeapon.autoReload && isServer) { CmdReloadWeaponAuto(rWeapon.gameObject, false, false); } if (rWeapon.secundaryWeapon) { rWeapon.secundaryWeapon.ignoreTags = ignoreTags; rWeapon.secundaryWeapon.hitLayer = damageLayer; rWeapon.secundaryWeapon.root = transform; rWeapon.secundaryWeapon.isSecundaryWeapon = true; if (rWeapon.secundaryWeapon.autoReload && isServer) { CmdReloadWeaponAuto(rWeapon.secundaryWeapon.gameObject, false, true); } } if (usingThirdPersonController && isLocalPlayer) { if (useAmmoDisplay && !ammoDisplayR) { GetAmmoDisplays(); } if (useAmmoDisplay && ammoDisplayR) { ammoDisplayR.Show(); } UpdateRightAmmo(); } currentShotTime = 0; } } }
protected void ReloadWeaponAuto(vShooterWeapon weapon, bool ignoreAmmo, bool secundaryWeapon = false) { if (!weapon) { return; } UpdateTotalAmmo(); if (!(!ignoreAmmo && (weapon.ammoCount >= weapon.clipSize || !WeaponHasAmmo(secundaryWeapon)))) { var needAmmo = weapon.clipSize - weapon.ammoCount; if (!ignoreAmmo && WeaponAmmo(weapon).count < needAmmo) { needAmmo = WeaponAmmo(weapon).count; } weapon.AddAmmo(needAmmo); if (!ignoreAmmo) { WeaponAmmo(weapon).Use(needAmmo); } } }
void Start() { weapon = GetComponent <vShooterWeapon>(); animator = GetComponent <Animator>(); }
protected virtual IEnumerator AddAmmoToWeapon(vShooterWeapon weapon, float delayTime, bool ignoreEffects = false) { isReloading = true; if (weapon.ammoCount < weapon.clipSize && (weapon.isInfinityAmmo || WeaponHasUnloadedAmmo()) && !weapon.dontUseReload && !cancelReload) { if (!ignoreEffects) { weapon.ReloadEffect(); } yield return(new WaitForSeconds(delayTime)); if (!cancelReload) { var needAmmo = weapon.reloadOneByOne ? 1 : weapon.clipSize - weapon.ammoCount; if (weapon.isInfinityAmmo) { weapon.AddAmmo(needAmmo); } else { if (WeaponAmmo(weapon).count < needAmmo) { needAmmo = WeaponAmmo(weapon).count; } weapon.AddAmmo(needAmmo); WeaponAmmo(weapon).Use(needAmmo); } if (weapon.reloadOneByOne && weapon.ammoCount < weapon.clipSize && WeaponHasUnloadedAmmo()) { if (WeaponAmmo(weapon).count == 0) { if (!ignoreEffects) { weapon.FinishReloadEffect(); } if (!ignoreEffects) { isReloadingWeapon = false; } if (!ignoreEffects) { onFinishReloadWeapon.Invoke(weapon); } } else { if (!ignoreEffects) { isReloadingWeapon = true; } if (!cancelReload) { if (!ignoreEffects) { animator.SetInteger(ReloadID, weapon.reloadID); animator.SetTrigger(Reload); } StartCoroutine(AddAmmoToWeapon(weapon, delayTime, ignoreEffects)); } } } else { if (!ignoreEffects) { weapon.FinishReloadEffect(); } if (!ignoreEffects) { isReloadingWeapon = false; } if (!ignoreEffects) { onFinishReloadWeapon.Invoke(weapon); } } } UpdateTotalAmmo(); } isReloading = false; }