public void SacarDeOcupadas() { Nurse hormigaNurse = this.transform.gameObject.GetComponent(typeof(Nurse)) as Nurse; Obrera hormigaObrera = this.transform.gameObject.GetComponent(typeof(Obrera)) as Obrera; Soldado hormigaSoldado = this.transform.gameObject.GetComponent(typeof(Soldado)) as Soldado; if (hormigaNurse != null) { if (reina.nursesOcupadas.Remove(hormigaNurse)) { reina.nursesDesocupadas.Add(hormigaNurse); } } else if (hormigaObrera != null) { if (reina.obrerasOcupadas.Remove(hormigaObrera)) { reina.obrerasDesocupadas.Add(hormigaObrera); } } else if (hormigaSoldado != null) { if (reina.soldadosOcupadas.Remove(hormigaSoldado)) { reina.soldadosDesocupadas.Add(hormigaSoldado); } } }
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(); } }
// Para detección de las hormigas (lista hormigasCerca) public void SistemaDeVision() { hormigasCerca = new List <HormigaGenerica>(); obrerasCerca = false; soldadosCerca = false; reinaCerca = false; RaycastHit hit; Vector3 dir = Vector3.zero; // Rayos fijos for (int i = 0; i < numRayosFijos; i++) { switch (i) { case 0: // delante dir = transform.TransformDirection(Vector3.forward); break; case 1: // detras dir = transform.TransformDirection(Vector3.back); break; case 2: // izq dir = transform.TransformDirection(Vector3.left); break; case 3: //der dir = transform.TransformDirection(Vector3.right); break; } if (Physics.Raycast(transform.position, dir, out hit, RayDistance)) { GameObject objetoColision = hit.collider.gameObject; if (objetoColision.transform.parent != null) { if (objetoColision.transform.parent.gameObject != this.gameObject) { Obrera hormigaObrera = objetoColision.transform.parent.gameObject.GetComponent <Obrera>(); Soldado hormigaSoldado = objetoColision.transform.parent.gameObject.GetComponent <Soldado>(); Reina hormigaReina = objetoColision.transform.parent.gameObject.GetComponent <Reina>(); if (hormigaObrera != null) { obrerasCerca = true; } if (hormigaSoldado != null) { soldadosCerca = true; } if (hormigaReina != null) { reinaCerca = true; } if (!hormigasCerca.Contains(objetoColision.transform.parent.gameObject.GetComponent <HormigaGenerica>())) { hormigasCerca.Add(objetoColision.transform.parent.gameObject.GetComponent <HormigaGenerica>()); } } else { //Debug.Log("Chocandote contigo mismo"); } } } } // Rayos Móviles for (int j = 0; j < numRayosExtra; j++) { dir = new Vector3(Random.Range(-100, 101), 0, Random.Range(-100, 101)); dir = dir.normalized; if (Physics.Raycast(transform.position, dir, out hit, RayDistance)) { GameObject objetoColision = hit.collider.gameObject; if (objetoColision.transform.parent != null) { if (objetoColision.transform.parent.gameObject != this.gameObject) { Obrera hormigaObrera = objetoColision.transform.parent.gameObject.GetComponent <Obrera>(); Soldado hormigaSoldado = objetoColision.transform.parent.gameObject.GetComponent <Soldado>(); Reina hormigaReina = objetoColision.transform.parent.gameObject.GetComponent <Reina>(); if (hormigaObrera != null) { obrerasCerca = true; } if (hormigaSoldado != null) { soldadosCerca = true; } if (hormigaReina != null) { reinaCerca = true; } if (!hormigasCerca.Contains(objetoColision.transform.parent.gameObject.GetComponent <HormigaGenerica>())) { hormigasCerca.Add(objetoColision.transform.parent.gameObject.GetComponent <HormigaGenerica>()); } //Debug.Log(hit.collider.gameObject.transform.parent.gameObject.tag); } else { //Debug.Log("Chocandote contigo mismo"); } } //Debug.DrawRay(transform.position, dir * RayDistance, Color.magenta); } } }