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