public void Fire(Unit damageSource) { IEnumerable <RaycastHit2D> hits = Cast(); var ends = new List <Vector3>(); var damagedUnits = new HashSet <Unit>(); foreach (var hit in hits) { ends.Add(OffsetEndRandomly(hit)); Unit unit = hit.transform.GetComponentInParent <Unit>(); if (unit != null && !damagedUnits.Contains(unit)) { unit.ApplyDamage(singleHitDamage, damageSource); damagedUnits.Add(unit); } } bool noHit = false; if (ends.Count == 0) { noHit = true; Vector3 forwardShift = transform.up * Random.Range(2.1f, 2.8f); Vector3 sideShift = transform.right * Random.Range(-0.2f, 0.2f); ends.Add(transform.position + forwardShift + sideShift); } var ends1 = new List <Vector3>(); var ends2 = new List <Vector3>(); foreach (var end in ends) { if (Random.value < 0.5f) { ends1.Add(end); ends2.Add(end); } else { (Random.value < 0.5f ? ends1 : ends2).Add(end); } } bool noHit1 = noHit || ends1.Count == 0; bool noHit2 = noHit || ends2.Count == 0; lightning.GenerateAsRoot(transform.position, ends1, noHit1); secondLightning.GenerateAsRoot(transform.position, ends2, noHit2); StartCoroutine(Strike(noHit)); dischargeAudio.PlayOneShot(dischargeSounds.GetRandomItem()); if (!noHit) { zapAudio.transform.position = ends[0]; zapAudio.PlayOneShot(zapSounds.GetRandomItem()); } }
protected override void Fire() { base.Fire(); cooldownTimer *= Random.Range(cooldownMultiplier.x, cooldownMultiplier.y); IEnumerable <RaycastHit2D> hits = Cast(); var ends = new List <Vector3>(); var damagedUnits = new HashSet <Unit>(); foreach (var hit in hits) { ends.Add(OffsetEndRandomly(hit)); Unit unit = hit.transform.GetComponentInParent <Unit>(); if (unit != null && !damagedUnits.Contains(unit)) { unit.ApplyDamage(singleHitDamage, owner); damagedUnits.Add(unit); } } Transform lightningTransform = lightning.transform; bool noHit = false; if (ends.Count == 0) { noHit = true; Vector3 forwardShift = lightningTransform.up * Random.Range(1f, 4f); Vector3 sideShift = lightningTransform.right * Random.Range(-2f, 2f); ends.Add(lightningTransform.position + forwardShift + sideShift); } var ends1 = new List <Vector3>(); var ends2 = new List <Vector3>(); foreach (var end in ends) { if (Random.value < 0.5f) { ends1.Add(end); ends2.Add(end); } else { (Random.value < 0.5f ? ends1 : ends2).Add(end); } } bool noHit1 = noHit || ends1.Count == 0; bool noHit2 = noHit || ends2.Count == 0; lightning.GenerateAsRoot(lightningTransform.position, ends1, noHit1); secondLightning.GenerateAsRoot(lightningTransform.position, ends2, noHit2); StartCoroutine(Strike()); bool noAmmo = ammo <= 0; shotAudioSource.mute = noAmmo; clickSoundSource.mute = noAmmo || noHit; dischargeAudioSource.PlayOneShot(dischargeSounds.GetRandomItem()); if (!noHit) { zapSoundSource.transform.position = ends[0]; zapSoundSource.PlayOneShot(zapSounds.GetRandomItem()); } }