Exemplo n.º 1
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;
    }
Exemplo n.º 2
0
    public void Atacar()
    {
        if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this)
        {
            if (this.agente.isOnOffMeshLink)
            {
                bocadillos.Nada();
            }
            else
            {
                bocadillos.Atacar();
            }
        }

        // Si el enemigo al que tenia asignado como orden, muere, me quito la orden
        if (enemigoAlQueAtacarPorOrden == null)
        {
            if (hayOrdenDeAtacar)
            {
                hayOrdenDeAtacar = false;
                this.SacarDeOcupadas();
                Task.current.Succeed();
                return;
            }
        }

        // Si no tengo enemigo al que atacar, miro los enemigos cerca
        if (enemigoAlQueAtacar == null)
        {
            if (enemigosCerca.Count > 0)
            {
                enemigoAlQueAtacar = enemigosCerca[0];
                if (!enemigoAlQueAtacar.hormigasAtacandole.Contains(this))
                {
                    enemigoAlQueAtacar.hormigasAtacandole.Add(this);
                }
                Task.current.Succeed();
                return;
            }
            else if (enemigoAlQueAtacarPorOrden == null)
            {
                Task.current.Fail();
                return;
            }
        }

        // Si me encuentro un enemigo por el camino al que atacar
        if (enemigoAlQueAtacar != null)
        {
            // Me encuentro a un enemigo, aunque tenga orden

            // Elimino todo lo que esté haciendo, pero no le quito la orden
            // 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
            }

            // Asigno la posición a la que hay que ir
            agente.SetDestination(enemigoAlQueAtacar.transform.position);

            // En el momento que esté cerca
            if (Vector3.Distance(transform.position, enemigoAlQueAtacar.transform.position) < 1.2f)
            {
                if (tiempoEntreAtaques <= 0)
                {
                    float random = Random.Range(0, 10);
                    if (random < 9f)
                    {
                        enemigoAlQueAtacar.quitarVida(this.daño);
                    }
                    else
                    {
                        //Debug.Log("Ataque fallido");
                    }
                    tiempoEntreAtaques = tiempoEntreAtaquesMax;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 1 + enemigoAlQueAtacar.transform.position;
                    agente.SetDestination(randomDirection);
                    tiempoEntreAtaques -= Time.deltaTime;
                    Task.current.Succeed();
                    return;
                }
            }
            else
            {
                // Te estás acercando al enemigo
                agente.SetDestination(enemigoAlQueAtacar.transform.position);
                Task.current.Succeed();
                return;
            }
        }

        // Si tengo un enemigo mandado por orden
        else if (enemigoAlQueAtacarPorOrden != null)
        {
            // Si tengo orden de atacar a un enemigo
            reina.DesasignarComidaACoger(this);
            reina.DesasignarHormigaACurar(this);
            reina.DesasignarHuevoACurar(this);

            agente.SetDestination(enemigoAlQueAtacarPorOrden.transform.position);

            // En el momento que esté cerca
            if (Vector3.Distance(transform.position, enemigoAlQueAtacarPorOrden.transform.position) < 1.2f)
            {
                if (tiempoEntreAtaques <= 0)
                {
                    float random = Random.Range(0, 10);
                    if (random < 9f)
                    {
                        enemigoAlQueAtacarPorOrden.quitarVida(this.daño);
                    }
                    else
                    {
                        //Debug.Log("Ataque fallido");
                    }
                    tiempoEntreAtaques = tiempoEntreAtaquesMax;
                    Task.current.Succeed();
                    return;
                }
                else
                {
                    Vector3 randomDirection = UnityEngine.Random.insideUnitSphere * 1 + enemigoAlQueAtacarPorOrden.transform.position;
                    agente.SetDestination(randomDirection);
                    tiempoEntreAtaques -= Time.deltaTime;
                    Task.current.Succeed();
                    return;
                }
            }
            else
            {
                // Te estás acercando al enemigo
                agente.SetDestination(enemigoAlQueAtacarPorOrden.transform.position);
                Task.current.Succeed();
                return;
            }
        }
    }