private void TryHit() { Collider[] colliders = Physics.OverlapSphere(this.transform.position, this.projectile.damageRadius); foreach (Collider collider in colliders) { EnemyBehavior enemy = collider.GetComponent <EnemyBehavior>(); if (null != enemy) { Debug.Log("Damaging enemy."); enemy.DamageMe(this.projectile.damage); Destroy(this.gameObject); } } }
private void FireAtTargets(EnemyBehavior[] enemies) { this.fireCooldown -= Time.deltaTime; EnemyBehavior[] enemiesInRange = enemies .Where(enemy => Vector3.Distance(this.muzzleTransform.position, enemy.transform.position).IsBetweenInclusive(3.5f, this.maxRange)) .OrderBy(enemy => Vector3.Distance(this.muzzleTransform.position, enemy.transform.position)) .ToArray(); if (false == enemiesInRange.Any()) { return; } // current target is closest enemy in range (3.5, 6.5) EnemyBehavior currentTarget = enemiesInRange.FirstOrDefault(); // look at current target Vector3 lookDirection = currentTarget.transform.position - this.turretTransform.position; Quaternion lookRotation = Quaternion.LookRotation(lookDirection * -1); this.turretTransform.rotation = Quaternion.Euler( lookRotation.eulerAngles.x, lookRotation.eulerAngles.y, this.turretTransform.localRotation.eulerAngles.z); // fire at current target if (this.fireCooldown <= 0 && this.currentEnergy >= this.towerProjectile.costToFire) { GameObject shellGameObject = (GameObject)Instantiate( this.shellPrefab, this.muzzleTransform.position, this.muzzleTransform.rotation); Projectile firedProjectile = shellGameObject.GetComponent <ShellBehavior>().projectile; firedProjectile.targetPosition = currentTarget.transform.position; this.currentEnergy -= this.towerProjectile.costToFire; this.fireCooldown = this.towerProjectile.rateOfFire; } }