public void ResurrectEnemies() { Collider[] collidersInRange = Physics.OverlapSphere(transform.parent.position, radius, 1 << 11); foreach (Collider resurrecteeCollider in collidersInRange) { Transform parent = resurrecteeCollider.transform.parent; MeleeAIEnemy enemyAI = parent.gameObject.GetComponent <MeleeAIEnemy>(); if (enemyAI != null && enemyAI.IsDead()) { MeleeAIAlly allyAI = (MeleeAIAlly)Instantiate(Resources.Load("Prefabs/Ally", typeof(MeleeAIAlly))); allyAI.transform.position = parent.position; allyAI.transform.rotation = parent.rotation; allyAI.master = transform.parent; allyAI.target = transform.parent; Destroy(parent.gameObject); } } }
IEnumerator UpdateNearbyEnemies() { while (true) { nearbyEnemies = new List <MeleeAIEnemy>(); Collider[] collidersInRange = Physics.OverlapSphere(transform.position, 15.0f, 1 << 9); foreach (Collider enemyCollider in collidersInRange) { MeleeAIEnemy enemyAI = enemyCollider.gameObject.GetComponent <MeleeAIEnemy>(); if (!enemyAI.IsDead()) { nearbyEnemies.Add(enemyAI); } } if (nearbyEnemies.Count == 0) { state = AIState.Patrolling; target = wanderingTransform; } else { //TODO: make enemies that are already surrounded by allies less desirable Transform closestAgent = nearbyEnemies[0].transform; float minDistance = Vector3.Distance(closestAgent.position, transform.position); for (int i = 1; i < nearbyEnemies.Count; i++) { float dist = Vector3.Distance(nearbyEnemies[i].transform.position, transform.position); if (dist < minDistance) { closestAgent = nearbyEnemies[i].transform; minDistance = dist; } } state = AIState.AttackingEnemy; target = closestAgent; } yield return(new WaitForSeconds(0.1f)); } }