Пример #1
0
            /// <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());
            }
Пример #2
0
            // 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());
            }
Пример #3
0
    /// <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 Buscarnpcs()
    {
        zombies  = GameObject.FindGameObjectsWithTag("Zombie");
        Demons   = GameObject.FindGameObjectsWithTag("Demon");
        citizens = GameObject.FindGameObjectsWithTag("Citizen");

        // 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;
                    Textcitizen.text = "Hola, soy " + civinfo.nombre + " y tengo " + civinfo.edad.ToString() + " años";
                }
                if (tempus > 3)
                {
                    Textcitizen.text = " ";
                }
            }
        }

        // Informacion sobre el zombie
        foreach (GameObject Elementoz in zombies)
        {
            yield return(new WaitForEndOfFrame());

            zom.Zombie componenteZombie = Elementoz.GetComponent <zom.Zombie>();
            if (componenteZombie != null)
            {
                distanciaB = Mathf.Sqrt(Mathf.Pow((Elementoz.transform.position.x - transform.position.x), 2) + Mathf.Pow((Elementoz.transform.position.y - transform.position.y), 2) + Mathf.Pow((Elementoz.transform.position.z - transform.position.z), 2));
                if (distanciaB < 5f)
                {
                    tempus          = 0;
                    zombieinfo      = Elementoz.GetComponent <zom.Zombie>().zombiestats;
                    TextZombie.text = "Waaaarrrr quiero comer " + zombieinfo.antojo;
                }
                if (tempus > 3)
                {
                    TextZombie.text = " ";
                }
            }
        }

        foreach (GameObject ElementoD in Demons)
        {
            yield return(new WaitForEndOfFrame());

            DEMON.Zombieesp Referenciazombesp = ElementoD.GetComponent <DEMON.Zombieesp>();
            if (Referenciazombesp != null)
            {
                distanciaA = Mathf.Sqrt(Mathf.Pow((ElementoD.transform.position.x - transform.position.x), 2) + Mathf.Pow((ElementoD.transform.position.y - transform.position.y), 2) + Mathf.Pow((ElementoD.transform.position.z - transform.position.z), 2));
                if (distanciaA < 5f)
                {
                    tempus          = 0;
                    zombieinfo      = ElementoD.GetComponent <DEMON.Zombieesp>().zombiestats;
                    TextZombie.text = "Waarr quiero comer" + zombieinfo.antojo;
                }
                if (tempus > 3)
                {
                    TextZombie.text = " ";
                }
            }
        }
        yield return(new WaitForSeconds(0.1f));

        StartCoroutine(Buscarnpcs());
    }