Пример #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
            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());
            }
Пример #3
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());
            }