/// <summary> /// se crea la corutina que controla la huida de los ciudadanos /// primero barre las posiciones del array y busca los objetos que poosean el tag de zombie /// luego se asegura que de obtener el componente zombie es decir el script que contiene todo lo referente al zombie /// se crea un condicional para que en caso de que no se tenga el componente zombie /// se establece una distancia propia /// se crean dos condicionales manejados por el boolenao encargado censar la huida del ciudadano /// estos trabajan en base a la distancia establecida segun sea mayor o menor activa el estado runing /// y esta se ejecuta cada 0.1 segundos /// </summary> /// <returns></returns> IEnumerator buscaZombies() { Demon = GameObject.FindGameObjectsWithTag("Demon"); Zombie = GameObject.FindGameObjectsWithTag("Zombie"); foreach (GameObject Elemento in Zombie) { zom.Zombie referentezombie = Elemento.GetComponent <zom.Zombie>(); if (referentezombie != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { citizenstate = Estado.Running; Objetivo = Elemento; Huida = true; } } } } foreach (GameObject Elemento2 in Demon) { Deemon.Zombieesp referentezombieesp = Elemento2.GetComponent <Deemon.Zombieesp>(); if (referentezombieesp != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento2.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento2.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento2.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { citizenstate = Estado.Running; Objetivo = Elemento2; Huida = true; } } } } if (Huida) { if (distancia > 5f) { Huida = false; } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(buscaZombies()); }
IEnumerator localizar_Zomb() { Otro_Zombie = GameObject.FindGameObjectsWithTag("Zombie2"); Zombie = GameObject.FindGameObjectsWithTag("Zombie"); foreach (GameObject Elemento in Zombie) { infeccioso.Zombie referentezombie = Elemento.GetComponent <infeccioso.Zombie>(); if (referentezombie != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { estado_Ald = Estado.escape; Objetivo = Elemento; Huida = true; } } } } foreach (GameObject Elemento2 in Otro_Zombie) { zombie2.Zombie2 referentezombieesp = Elemento2.GetComponent <zombie2.Zombie2>(); if (referentezombieesp != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento2.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento2.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento2.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { estado_Ald = Estado.escape; Objetivo = Elemento2; Huida = true; } } } } if (Huida) { if (distancia > 5f) { Huida = false; } } yield return(new WaitForSeconds(0.2f)); StartCoroutine(localizar_Zomb()); }
// Corrotina que hace correr a los aldeanos al estar en menos de 5 unidades de un zombie y lo hace en sentido contrario al zombie IEnumerator buscaZombies() { Demon = GameObject.FindGameObjectsWithTag("Demon"); Zombie = GameObject.FindGameObjectsWithTag("Zombie"); foreach (GameObject Elemento in Zombie) { zom.Zombie referentezombie = Elemento.GetComponent <zom.Zombie>(); if (referentezombie != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { estadovillager = Estado.Running; Objetivo = Elemento; Huida = true; } } } } foreach (GameObject Elemento2 in Demon) { Deemon.Zombieesp referentezombieesp = Elemento2.GetComponent <Deemon.Zombieesp>(); if (referentezombieesp != null) { distancia = Mathf.Sqrt(Mathf.Pow((Elemento2.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elemento2.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elemento2.transform.position.z - transform.position.z), 2)); if (!Huida) { if (distancia < 5f) { estadovillager = Estado.Running; Objetivo = Elemento2; Huida = true; } } } } // si el ciudadano esta a mas de 5 unidades del zombie vuelve otra vez a estos aleatorios if (Huida) { if (distancia > 5f) { Huida = false; } } yield return(new WaitForSeconds(0.2f)); StartCoroutine(buscaZombies()); }