// 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; }
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; } } }