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);
         }
     }
 }
示例#2
0
    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));
        }
    }