/// <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() { survivors = GameObject.FindGameObjectsWithTag("Zombie"); foreach (GameObject citizen in survivors) { zom.Zombie referentezombie = citizen.GetComponent <zom.Zombie>(); if (referentezombie != null) { distancia = Mathf.Sqrt(Mathf.Pow((citizen.transform.position.x - transform.position.x), 2) + Mathf.Pow((citizen.transform.position.y - transform.position.y), 2) + Mathf.Pow((citizen.transform.position.z - transform.position.z), 2)); if (!velocidadEstado) { if (distancia < 5f) { estadoVillager = Estado.Running; Target = citizen; velocidadEstado = true; } } } } if (velocidadEstado) { if (distancia > 5f) { velocidadEstado = false; } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(buscaZombies()); }
/// <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()); }
/// <summary> /// se crea la corutina encargada de medir las distancias entre el heroe y los npcs para y entregar la informacion al usuario /// dentro de la corutina se pregunta primero si los objetos poseen el el tag de zombie o villager /// se define la distanciaA y la distciaB /// las cuales pertenecen a las instacias de citizen y zombie estas son llevadas a cabo cada que finaliza el frame /// luego en los dos condicionales siguientes se calcula la distancia y en base a si esta mas cerca /// o lejos se entrega un texto sin embargo en esta parte solo se de escribe el mensaje pero no se entrega /// esta corutina se ejecuta cada 0.1 segundos /// </summary> /// <returns></returns> IEnumerator BuscaEntidades() { zombies = GameObject.FindGameObjectsWithTag("Zombie"); citizens = GameObject.FindGameObjectsWithTag("Villager"); // Informacion sobre el villager foreach (GameObject item in citizens) { yield return(new WaitForEndOfFrame()); civbody.Citizen componenteAldeano = item.GetComponent <civbody.Citizen>(); if (componenteAldeano != null) { distanciaA = Mathf.Sqrt(Mathf.Pow((item.transform.position.x - transform.position.x), 2) + Mathf.Pow((item.transform.position.y - transform.position.y), 2) + Mathf.Pow((item.transform.position.z - transform.position.z), 2)); if (distanciaA < 5f) { tempus = 0; civinfo = item.GetComponent <civbody.Citizen>().citizenstats; TextVillager.text = "Hola, soy " + civinfo.nombre + " y tengo " + civinfo.edad.ToString() + " años"; } if (tempus > 3) { TextVillager.text = " "; } } } // Informacion sobre el zombie foreach (GameObject itemZ in zombies) { yield return(new WaitForEndOfFrame()); zom.Zombie componenteZombie = itemZ.GetComponent <zom.Zombie>(); if (componenteZombie != null) { distanciaB = Mathf.Sqrt(Mathf.Pow((itemZ.transform.position.x - transform.position.x), 2) + Mathf.Pow((itemZ.transform.position.y - transform.position.y), 2) + Mathf.Pow((itemZ.transform.position.z - transform.position.z), 2)); if (distanciaB < 5f) { tempus = 0; zombieinfo = itemZ.GetComponent <zom.Zombie>().zombiestats; TextZombie.text = "Waaaarrrr quiero comer " + zombieinfo.antojo; } if (tempus > 3) { TextZombie.text = " "; } } } yield return(new WaitForSeconds(0.1f)); StartCoroutine(BuscaEntidades()); }