private void OnTriggerEnter(Collider other) { if (!agente.isOnOffMeshLink) { // Si encuentras un enemigo y no está en la lista de enemigos if (other.tag == "Enemigo") { EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>(); // Actualizas al enemigo de que hay hormiga cerca if (!aux.hormigasCerca.Contains(this)) { aux.hormigasCerca.Add(this); } // Actualizas a la hormiga y avisas a la reina de este enemigo if (!enemigosCerca.Contains(aux)) { if (aux.hormigasAtacandole.Count < 2) { if (aux.hormigasAtacandole.Count == 0) { reina.RecibirAlertaEnemigo(aux); } else if (aux.hormigasAtacandole[0] == this) { reina.RecibirAlertaEnemigo(aux); } } enemigosCerca.Add(aux); } } else if (other.tag == "Trigo") { Comida aux = other.gameObject.GetComponent <Comida>(); if (!aux.hormigasCerca.Contains(this)) { aux.hormigasCerca.Add(this); } if (!aux.haSidoCogida && !aux.laEstanLLevando && aux.hormigaQueLlevaLaComida == null) { reina.RecibirAlertaComida(aux); } } else if (other.tag == "Huevo") { Huevo aux = other.GetComponent <Huevo>(); // Actualizas al huevo de las hormigas que tiene cerca if (!aux.hormigasCerca.Contains(this)) { aux.hormigasCerca.Add(this); } // Actualizas la lista de huevos cerca if (!huevosCerca.Contains(aux)) { huevosCerca.Add(aux); } } } }
public void ReinaEnPeligro() { if (reina.enemigosCerca.Count != 0 && reinaCerca == true) { enemigoAlQueAtacar = reina.enemigosCerca[0]; Task.current.Succeed(); } else { enemigoAlQueAtacar = null; Task.current.Fail(); } }
private void OnTriggerExit(Collider other) { // Si un enemigo sale de nuestro collider, y estabamos luchando con el actualizar la lista if (other.tag == "Enemigo") { EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>(); aux.hormigasCerca.Remove(this); enemigosCerca.Remove(aux); } else if (other.tag == "Trigo") { Comida aux = other.gameObject.GetComponent <Comida>(); comidaQueHayCerca.Remove(aux); aux.hormigasCerca.Remove(this); } else if (other.tag == "Reina") { reinaCerca = false; //Debug.Log("Reina cerca"); } }
private void OnTriggerExit(Collider other) { // Si un enemigo sale de nuestro collider, y estabamos luchando con el actualizar la lista if (other.tag == "Enemigo") { EnemigoGenerico aux = other.GetComponent <EnemigoGenerico>(); aux.hormigasCerca.Remove(this); enemigosCerca.Remove(aux); } else if (other.tag == "Trigo") { Comida aux = other.gameObject.GetComponent <Comida>(); aux.hormigasCerca.Remove(this); } else if (other.tag == "Huevo") { Huevo aux = other.GetComponent <Huevo>(); huevosCerca.Remove(aux); aux.hormigasCerca.Remove(this); } }
public void HaySoldadosCerca() { foreach (HormigaGenerica h in hormigasCerca) { if (h != null) { Soldado hormigaSoldado = h.transform.gameObject.GetComponent(typeof(Soldado)) as Soldado; Obrera hormigaObrera = h.transform.gameObject.GetComponent(typeof(Obrera)) as Obrera; if (hormigaObrera != null) { if (hormigaObrera.enemigoAlQueAtacar == null) { if (enemigosCerca.Count > 0) { EnemigoGenerico enem = this.enemigosCerca[Random.Range(0, this.enemigosCerca.Count)]; // Si no lo tiene ya asignado por orden if (hormigaObrera.enemigoAlQueAtacarPorOrden != enem) { hormigaObrera.enemigoAlQueAtacar = enem; if (!hormigaObrera.enemigoAlQueAtacar.hormigasAtacandole.Contains(hormigaObrera)) { hormigaObrera.enemigoAlQueAtacar.hormigasAtacandole.Add(hormigaObrera); } } } } } else if (hormigaSoldado != null) { if (hormigaSoldado.enemigoAlQueAtacar == null) { if (enemigosCerca.Count > 0) { EnemigoGenerico enem = this.enemigosCerca[Random.Range(0, this.enemigosCerca.Count)]; // Si no lo tiene ya asignado por orden if (hormigaSoldado.enemigoAlQueAtacarPorOrden != enem) { hormigaSoldado.enemigoAlQueAtacar = enem; if (!hormigaSoldado.enemigoAlQueAtacar.hormigasAtacandole.Contains(hormigaSoldado)) { hormigaSoldado.enemigoAlQueAtacar.hormigasAtacandole.Add(hormigaSoldado); } } } } } } } bool haySoldadosEnTodas = false; int cont = 0; foreach (EnemigoGenerico enem in enemigosCerca) { cont = 0; foreach (HormigaGenerica hormiga in enem.hormigasAtacandole) { if (hormiga != null) { Soldado hormigaSoldado2 = hormiga.transform.gameObject.GetComponent(typeof(Soldado)) as Soldado; if (hormigaSoldado2 != null) { haySoldadosEnTodas = true; break; } else if (cont == enem.hormigasAtacandole.Count - 1) { haySoldadosEnTodas = false; break; } } cont++; } if (haySoldadosEnTodas == false) { break; } } if (haySoldadosEnTodas) { Task.current.Succeed(); enemigoAlQueAtacar = null; } else { Task.current.Fail(); } }
public void Huir() { if (bocadillos.hormigaSeleccionada != null && bocadillos.hormigaSeleccionada == this) { if (this.agente.isOnOffMeshLink) { bocadillos.Nada(); } else { bocadillos.Huir(); } } if (enemigosCerca.Count > 0) { EnemigoGenerico enemigoCerca = enemigosCerca[0]; if (enemigoCerca != null) { // 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 } // Si estoy huyendo de él, me saco de hormigas atacandole enemigoCerca.hormigasAtacandole.Remove(this); // Corro en direccion contraria al enemigo Vector3 direccionEnemigo = Vector3.Normalize(enemigoCerca.transform.position - this.transform.position); Vector3 direccionContraria = direccionEnemigo * -1f * 3; posHuida = this.transform.position + direccionContraria; NavMeshPath path = new NavMeshPath(); NavMesh.CalculatePath(transform.position, posHuida, NavMesh.AllAreas, path); agente.SetDestination(posHuida); if (path.status == NavMeshPathStatus.PathComplete) { agente.SetDestination(posHuida); } else { posHuida = posHuida - 2 * direccionContraria; agente.SetDestination(posHuida); } } } if (posHuida != Vector3.zero) { if (Vector3.Distance(this.transform.position, posHuida) < 0.6f) { posHuida = Vector3.zero; Task.current.Succeed(); return; } } else { Task.current.Succeed(); return; } }
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; } } }