Exemple #1
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 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());
    }
Exemple #2
0
 private void OnCollisionEnter(Collision collision)
 {
     if (collision.collider.GetComponent <zombies.Zombies>())                                                //con esto se pregunta si el objeto con el que collisiono posee el componente zombies el cual accede al namespace npc,especificamente a la clase zombies
     {
         zombies.Zombies zombie = collision.collider.GetComponent <zombies.Zombies>();                       //se crea una variable la cual se iguala a la colision para almacenarla
         Debug.Log("Wrrrr soy un Zombie y quiero comer" + " " + zombie.GetZombiestats().partes);             //con esto se imprime un mensaje en la consola que lleva tambian las estadisticas del zombie y sus gustos
     }
     if (collision.collider.GetComponent <citizen.Citizen>())                                                // con esto se asegura de preguntar si el objeto con el que colisiona posee el componente citizen el cual accede a la clase citizen contenida en el namespace ally
     {
         citizen.Citizen civil = collision.collider.GetComponent <citizen.Citizen>();                        //se crea una variable que almacena la colision
         Debug.Log("Hola soy" + " " + civil.statsciv().nombre + " Tengo " + civil.statsciv().edad + "Años"); //se impirime en la consola un mensaje con los datos del ciudadano que accede a la estructura con los datso del ciudadano
     }
 }
Exemple #3
0
            /// <summary>
            /// se crea un coruttina cuya funcion es buscar entre las instancias generadas cuales poseen los tags de heroe o ciudadano
            /// este a su vez  barre las posiciones del array de gameobjects
            /// y espera hasta el que termine el frame para volver a ejecutar la corrutina
            /// se crea una varible local referenciada con el script de citizen para acceder al rigidbody de este
            /// se crean dos variables locales las cuales representan las distancias del citizen y del heroe
            /// luego se crea un condicional manejado por uno de los booleanos declarados en la clase
            /// y dentro de ese condicional se gneneran otros dos los cuales calculan las distancias y en base a cual sea mayor o menor se fija un objetivo
            /// despues dentro de otro condicional se calculan las distancias nuevamente en caso de que ambas sean menores a las del anterior condiconal el objetivo pasa
            /// a ser el person es decir el ciudadano en caso tal de que ambas distancias sean mayores a las ya citas entonces el booleano encargado de esta funcion sera falso
            /// la corrutina espera 0.1 segundos para volver a ser ejecutada
            /// </summary>
            /// <returns></returns>
            IEnumerator seekingvictims()
            {
                heroe    = GameObject.FindGameObjectWithTag("Hero");
                Citizens = GameObject.FindGameObjectsWithTag("Citizen");
                foreach (GameObject person in Citizens)
                {
                    yield return(new WaitForEndOfFrame());

                    zombie.Citizen referenciaciv = person.GetComponent <zombie.Citizen>();
                    if (referenciaciv != null)
                    {
                        PuntoB = Mathf.Sqrt(Mathf.Pow((heroe.transform.position.x - transform.position.x), 2) + Mathf.Pow((heroe.transform.position.y - transform.position.y), 2) + Mathf.Pow((heroe.transform.position.z - transform.position.z), 2));
                        PuntoA = Mathf.Sqrt(Mathf.Pow((person.transform.position.x - transform.position.x), 2) + Mathf.Pow((person.transform.position.y - transform.position.y), 2) + Mathf.Pow((person.transform.position.z - transform.position.z), 2));
                        if (!persigue)
                        {
                            if (PuntoA < 5f)
                            {
                                Zombiestate = State.Pursuing;
                                objetivo    = person;
                                persigue    = true;
                            }
                            else if (PuntoB < 5f)
                            {
                                Zombiestate = State.Pursuing;
                                objetivo    = heroe;
                                persigue    = true;
                            }
                        }
                        if (PuntoA < 5f && PuntoB < 5f)
                        {
                            objetivo = person;
                        }
                    }
                }

                if (persigue)
                {
                    if (PuntoA > 5f && PuntoB > 5f)
                    {
                        persigue = false;
                    }
                }

                yield return(new WaitForSeconds(0.1f));

                StartCoroutine(seekingvictims());
            }