// -- adds mark then waits a delay time then shoots private IEnumerator ShootAfterDelay(CrosshairObject crossObject) { crossObject.ShowMark(); yield return(new WaitForSeconds(timeTillShot)); ShootObject(crossObject); }
// -- actual shooting in this function private void ShootObject(CrosshairObject crossObject) { // -- gun animations animator.SetBool("isShooting", true); explosionAnimator.SetBool("isShooting", true); // -- if still there if (crossObject) { crossObject.TakeDamage(damage); } }
void CrosshairReleaseAction(Collider2D[] colliders) { // -- array of enemies that is in overlap circle of crosshair //List<Enemy> enemies = new List<Enemy>(); CrosshairObject firstObjectFound = null; for (int i = 0; i < colliders.Length; i++) { CrosshairObject crossObject = colliders[i].gameObject.GetComponent <CrosshairObject>(); // -- if it is a crosshair object if (crossObject) { BreakableShield shield = crossObject.GetComponent <BreakableShield>(); if (shield) { // -- override first object with shield then break loop firstObjectFound = shield; break; } } // -- if you haven't got a first object set it to this one if (!firstObjectFound) { firstObjectFound = crossObject; } } if (firstObjectFound) { // -- if it is targetable and it's not already marked and you have enough shots left if (firstObjectFound.isTargetable() && !firstObjectFound.isMarked() && shotsLeft > 0) { StartCoroutine(ShootAfterDelay(firstObjectFound)); shotsLeft -= 1; bulletCounter.SetBulletNumber(shotsLeft); } } // -- if shots are now zero then start timer if (shotsLeft == 0) { timer.StartTimer(reloadTime); } // -- move it back to start position crosshair.transform.position = crosshairStartPos; }