Пример #1
0
    public void HayHormigaQueCurarCerca()
    {
        if (hayOrdenCurarHormiga == false)
        {
            // Si no tengo ninguna hormiga asignada para curar, miro las que hay alrededor
            if (hormigaACurar == null)
            {
                // Recorremos la lista de hormigas cercanas
                foreach (HormigaGenerica h in hormigasCerca)
                {
                    // Si alguna hormiga PUEDE ser curada y no tiene a nadie asignado, se lo asigno e indico a la hormiga quien lo cura
                    if (h.siendoCuradaPor == null && h.puedeSerCurada)
                    {
                        // Suelto la comida y demás, pero no la desasigno

                        // reina.DesasignarComidaACoger(this);
                        // Suelto la comida, pero no la desasigno
                        if (comida != null && comida.laEstanLLevando)
                        {
                            comida.transform.SetParent(null);
                            comida.laEstanLLevando = false;
                            posComida      = Vector3.zero;
                            posDejarComida = Vector3.zero;
                        }

                        //reina.DesasignarHormigaACurar(this);
                        // Dejo de curar a la hormgia pero no la desasigno
                        if (hormigaACurar != null)
                        {
                            // No hace falta hacer nada
                        }

                        //reina.DesasignarHuevoACurar(this);
                        // Dejo de cuidar un huevo pero no lo desasigno
                        if (huevoACuidar != null)
                        {
                            // No hace falta hacer nada
                        }

                        hormigaACurar     = h;
                        h.siendoCuradaPor = this;
                        // Si la reina lo tiene en su lista de hormigas heridas, lo borro
                        reina.hormigasHeridas.Remove(hormigaACurar);
                        Task.current.Succeed();
                        return;
                    }
                }
            }
            else
            {
                // Si tenemos una hormiga a curar asignada
                Task.current.Succeed();
                return;
            }
        }
        // Si no encuentra hormiga, o tiene orden
        Task.current.Fail();
    }
Пример #2
0
    public void Explorar()
    {
        //Debug.Log("Explorar");
        hormigaAAtacar = null;

        // si esta dentro
        if (zonaDondeEsta == 0)
        {
            // sale
            siguientePosicionExplorar = Vector3.zero;
            Vector3    randomDirection;
            NavMeshHit aux;
            bool       aux2;
            do
            {
                randomDirection = UnityEngine.Random.insideUnitSphere * 10 + reina.afueras.centro;
                aux2            = NavMesh.SamplePosition(randomDirection, out aux, 1.0f, NavMesh.AllAreas);
            } while (!aux2);
            siguientePosicionExplorar = new Vector3(aux.position.x, 0, aux.position.z);
            //Debug.Log("Posicion a la que va: " + siguientePosicionExplorar);
            agente.SetDestination(siguientePosicionExplorar);
        }
        else
        {
            if (siguientePosicionExplorar == Vector3.zero)
            {
                Vector3    randomDirection;
                NavMeshHit aux;
                bool       aux2;
                do
                {
                    randomDirection = UnityEngine.Random.insideUnitSphere * (10) + this.transform.position;
                    aux2            = NavMesh.SamplePosition(randomDirection, out aux, 4.0f, NavMesh.AllAreas);
                } while (!aux2);
                siguientePosicionExplorar = new Vector3(aux.position.x, 0, aux.position.z);
                //Debug.Log("Posicion a la que va: " + siguientePosicionExplorar);
                agente.SetDestination(siguientePosicionExplorar);
            }
            else if (Vector3.Distance(this.transform.position, siguientePosicionExplorar) < 0.5f)
            {
                siguientePosicionExplorar = Vector3.zero;
            }
            else
            {
                agente.SetDestination(siguientePosicionExplorar);
            }
        }
        Task.current.Succeed();
    }
Пример #3
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray;
            RaycastHit hit;
            ray = cam.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit))
            {
                //Debug.Log("raycast");
                HormigaGenerica h = hit.transform.gameObject.GetComponent(typeof(HormigaGenerica)) as HormigaGenerica;
                if (h != null || hit.transform.gameObject.tag == "Reina")
                {
                    //Debug.Log("Es hormiga");
                    free   = false;
                    target = h.gameObject;
                    bc.hormigaSeleccionada = h;
                }
                else
                {
                    free   = true;
                    target = null;
                    bc.hormigaSeleccionada = null;
                    bc.Nada();
                }
            }
        }
        if (Input.GetKeyDown("2"))
        {
            free   = true;
            target = null;
            bc.hormigaSeleccionada = null;
            bc.Nada();
            this.transform.position = dentroPos;
        }
        else if (Input.GetKeyDown("1"))
        {
            free   = true;
            target = null;
            bc.hormigaSeleccionada = null;
            bc.Nada();
            this.transform.position = fueraPos;
        }
        if (free)
        {
            if (Input.GetKey("w"))
            {
                this.transform.Translate(0, vel * Time.deltaTime, 0);
                if (this.transform.position.z > 50)
                {
                    this.transform.position = new Vector3(this.transform.position.x, this.transform.position.y, 50);
                }
            }
            if (Input.GetKey("a"))
            {
                this.transform.Translate(-vel * Time.deltaTime, 0, 0);
                if (this.transform.position.x < 0)
                {
                    this.transform.position = new Vector3(0, this.transform.position.y, this.transform.position.z);
                }
            }
            if (Input.GetKey("s"))
            {
                this.transform.Translate(0, -vel * Time.deltaTime, 0);
                if (this.transform.position.z < 0)
                {
                    this.transform.position = new Vector3(this.transform.position.x, this.transform.position.y, 0);
                }
            }
            if (Input.GetKey("d"))
            {
                this.transform.Translate(vel * Time.deltaTime, 0, 0);
                if (this.transform.position.x > 110)
                {
                    this.transform.position = new Vector3(110, this.transform.position.y, this.transform.position.z);
                }
            }
        }
        else if (target != null)
        {
            this.transform.position = new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z);
        }
        float fov = cam.fieldOfView;

        fov            -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 300;
        fov             = Mathf.Clamp(fov, 15, 60);
        cam.fieldOfView = fov;
    }
Пример #4
0
    public void CurarHormiga()
    {
        if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this)
        {
            if (!this.agente.isOnOffMeshLink)
            {
                bocadillos.Curar();
            }
            else
            {
                bocadillos.Nada();
            }
        }
        if (hormigaACurar != null)
        {
            // Si es la primera vez, no tengo asignada la posicion de la hormiga a curar
            if (posHerida == Vector3.zero)
            {
                //Debug.Log("Se asigna la posicion de la hormiga a curar");
                TiempoActual = tiempoParaCurar;
                posHerida    = hormigaACurar.transform.position;
                agente.SetDestination(hormigaACurar.transform.position);
                Task.current.Succeed();
                return;
            }

            if (Vector3.Distance(this.transform.position, hormigaACurar.transform.position) < 3.8f && this.zonaDondeEsta == hormigaACurar.zonaDondeEsta)
            {
                if (Vector3.Distance(this.transform.position, hormigaACurar.transform.position) < 2.5f)
                {
                    agente.SetDestination(this.transform.position);
                }
                TiempoActual -= Time.deltaTime;
                // Si ha pasado el tiempo de cura
                if (TiempoActual <= 0)
                {
                    hormigaACurar.SumarVida();
                    //Debug.Log("Hormiga Curada");
                    // Reseteas todos los valores
                    TiempoActual = tiempoParaCurar;
                    posHerida    = Vector3.zero;
                    hormigaACurar.siendoCuradaPor = null;
                    hormigaACurar = null;
                    // Si se trataba de una orden de curar hormiga
                    if (hayOrdenCurarHormiga == true)
                    {
                        hayOrdenCurarHormiga = false;
                        SacarDeOcupadas();
                    }
                    Task.current.Succeed();
                    return;
                }
                Task.current.Succeed();
                return;
            }
            else
            {
                TiempoActual = tiempoParaCurar;
                agente.SetDestination(hormigaACurar.transform.position);
            }
            Task.current.Succeed();
            return;
        }
        // Si la hormiga ha muerto, se devuelve Fail para que siga con el BT
        else
        {
            TiempoActual  = tiempoParaCurar;
            hormigaACurar = null;
            posHerida     = Vector3.zero;
            if (hayOrdenCurarHormiga == true)
            {
                hayOrdenCurarHormiga = false;
                SacarDeOcupadas();
            }
            Task.current.Fail();
            return;
        }
    }
Пример #5
0
    // Update is called once per frame
    void Update()
    {
        if (agent.isOnOffMeshLink)
        {
            if (!haEntradoAlCamino)
            {
                PersonajeGenerico a = agent.gameObject.GetComponent <PersonajeGenerico>();
                HormigaGenerica   h = this.gameObject.GetComponent <HormigaGenerica>();

                foreach (EnemigoGenerico enem in h.enemigosCerca)
                {
                    enem.hormigasCerca.Remove(h);
                }
                h.enemigosCerca = new List <EnemigoGenerico>();

                foreach (Comida c in h.comidaQueHayCerca)
                {
                    c.hormigasCerca.Remove(h);
                }
                h.comidaQueHayCerca = new List <Comida>();

                haEntradoAlCamino = true;
                if (a.zonaDondeEsta == 0)
                {
                    //a.GetComponent<NavMeshAgent>().autoTraverseOffMeshLink = false;
                    //a.GetComponent<NavMeshAgent>().updatePosition = false;
                    //a.transform.position =  link.startPoint;
                    a.zonaDondeEsta = 3;
                }
                else if (a.zonaDondeEsta == 1)
                {
                    //a.GetComponent<NavMeshAgent>().autoTraverseOffMeshLink = false;
                    //a.GetComponent<NavMeshAgent>().updatePosition = false;
                    //a.transform.position =  link.endPoint;
                    a.zonaDondeEsta = 2;
                }
                //Debug.Log(a.zonaDondeEsta);
            }
            hormiga_sprite.enabled     = false;
            hormiga_colisiones.enabled = false;
            Comida aux = agent.gameObject.GetComponentInChildren <Comida>();
            if (aux != null)
            {
                aux.gameObject.GetComponentInChildren <SpriteRenderer>().enabled = false;
            }
            agent.avoidancePriority = 99;
            agent.speed             = speed * linkMultiplayer;
        }
        else
        {
            if (haEntradoAlCamino)
            {
                haEntradoAlCamino = false;
                PersonajeGenerico a = agent.gameObject.GetComponent <PersonajeGenerico>();
                if (a.zonaDondeEsta == 3)
                {
                    a.zonaDondeEsta = 1;
                }
                else
                {
                    a.zonaDondeEsta = 0;
                }
                //Debug.Log(a.zonaDondeEsta);
            }
            hormiga_sprite.enabled     = true;
            hormiga_colisiones.enabled = true;
            Comida aux = agent.gameObject.GetComponentInChildren <Comida>();
            if (aux != null)
            {
                aux.gameObject.GetComponentInChildren <SpriteRenderer>().enabled = true;
            }
            agent.avoidancePriority = agent.gameObject.GetComponent <HormigaGenerica>().priority;
            agent.speed             = speed;
        }
    }
Пример #6
0
    public void Atacar()
    {
        if (hormigasCerca.Count > 0)
        {
            if (hormigaAAtacar == null)
            {
                hormigaAAtacar = hormigasCerca[Random.Range(0, hormigasCerca.Count)];
            }
            //HormigaGenerica hormigaCerca = hormigasCerca[Random.Range(0, hormigasCerca.Count)];
            if (hormigaAAtacar != null)
            {
                agente.SetDestination(hormigaAAtacar.transform.position);
                float distanceToTarget = Vector3.Distance(transform.position, hormigaAAtacar.transform.position);
                if (distanceToTarget < 1.2f)
                {
                    if (tiempoEntreAtaques <= 0)
                    {
                        float random = Random.Range(0, 10);
                        if (random < 9f)
                        {
                            hormigaAAtacar.QuitarVida(this.daño);
                            //hormigaAAtacar = null;
                        }
                        else
                        {
                            //Debug.Log("Ataque fallido");
                        }
                        tiempoEntreAtaques = tiempoEntreAtaquesMax;
                    }
                    else
                    {
                        Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 1 + hormigaAAtacar.transform.position;
                        agente.SetDestination(randomDirection);
                        tiempoEntreAtaques -= Time.deltaTime;
                    }
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    if (!hormigasCerca.Contains(hormigaAAtacar))
                    {
                        hormigaAAtacar = null;
                    }
                    else
                    {
                        agente.SetDestination(hormigaAAtacar.transform.position);
                    }
                    Task.current.Succeed();
                    return;
                }
            }
            else
            {
                //hormigasCerca.RemoveAt(0);
                Task.current.Fail();
                return;
            }

            /*if (hormigasCerca.Count == 0)
             * {
             *  siguientePosicion = this.transform.position;
             *  Task.current.Succeed();
             * }*/
        }
        else
        {
            Task.current.Fail();
            return;
        }
    }