Beispiel #1
0
    IEnumerator UpdateNearbyAllies()
    {
        while (true)
        {
            nearbyAllies = new List <MeleeAIAlly>();
            Collider[] collidersInRange = Physics.OverlapSphere(transform.position, 5.0f, 1 << 8);
            foreach (Collider enemyCollider in collidersInRange)
            {
                MeleeAIAlly allyAI = enemyCollider.gameObject.GetComponent <MeleeAIAlly>();
                if (allyAI)
                {
                    nearbyAllies.Add(allyAI);
                }
            }


            Transform closestAgent = playerTrans;
            float     minDistance  = Vector3.Distance(closestAgent.position, transform.position);
            for (int i = 0; i < nearbyAllies.Count; i++)
            {
                float dist = Vector3.Distance(nearbyAllies[i].transform.position, transform.position);
                if (dist < minDistance)
                {
                    closestAgent = nearbyAllies[i].transform;
                    minDistance  = dist;
                }
            }
            target = closestAgent;

            yield return(new WaitForSeconds(0.1f));
        }
    }
Beispiel #2
0
 //This gets called before Update functions.
 private void OnTriggerStay(Collider other)
 {
     if (other.gameObject.GetComponent <MeleeAIAlly>() && Time.time > nextAttackTime)
     {
         //Attack ally AI
         MeleeAIAlly allyAI = other.gameObject.GetComponent <MeleeAIAlly>();
         nextAttackTime = Time.time + Random.Range(0.5f, 1.0f);
         //nextAttackTime = Time.time + 0.5f;
         Vector3 temp         = allyAI.transform.position - this.transform.position;
         Vector3 knockbackDir = (new Vector3(temp.x, 0.0f, temp.z)).normalized;
         allyAI.TakeDamage(1, HIT_STRENGTH * knockbackDir);
     }
 }
 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);
         }
     }
 }