using System; using System.Collections.Generic; using UnityEngine; public class ArtistController : MonoBehaviour { public int range = 50; public int projectileSpeed = 5; public GameObject projectile; private Queue enemyQueue; void Start() { InvokeRepeating(nameof(fireAttack), 0, 1); } public void setEnemyQueue(Queue enemyQueueIn) { enemyQueue = enemyQueueIn; } // Look through all of the queue, and find the distance between each enemy and the artist. // Keep track of the enemy with the lowest distance, and after you have looped through the entire queue, // Initiate a new instance of the projectile game object, from the artists position, in the direction of the enemy. private void fireAttack() { if (enemyQueue.Count == 0) return; // If there are no enemies in the queue, return. if (enemyQueue.Peek() == null) return; // If the first enemy in the queue is null, return. float lowestDistance = range; GameObject enemyTarget = null; foreach (var enemy in enemyQueue) { var distance = Vector3.Distance(enemy.transform.position, transform.position); if (distance < lowestDistance) { lowestDistance = distance; enemyTarget = enemy; } } if (enemyTarget == null) return; // If there are no enemies in range, return. //Find the vector that points from the artist to the enemy. var heading = enemyTarget.transform.position - transform.position; //Find the angle between the artist and the enemy. var angle = Mathf.Atan2(heading.y, heading.x) * Mathf.Rad2Deg; //Create a quaternion (rotation) based on the angle. var q = Quaternion.Euler(0,0,angle); var projectileInstance = Instantiate(projectile, transform.position, q); projectileInstance.GetComponent().setSpeed(projectileSpeed); } }