public IEnumerator changeState(myEnums.Estado _edo, float _timetochange) { yield return(new WaitForSeconds(2f)); edoActual = _edo; puedeMoverse = true; }
public void IniciarInvestigacion(Vector3 puntoaInvestigar) { if (!muerto) { Vector3 distance = tr.position - puntoaInvestigar; if (distance.sqrMagnitude < distanciaPersecusion * distanciaPersecusion && edoActual != myEnums.Estado.atacar) { edoActual = myEnums.Estado.investigar; puntoInteres = puntoaInvestigar; puedeMoverse = true; } } }
void trySpotPlayer() { Vector3 playerdirection = tr.position - pltr.position; if (playerdirection.sqrMagnitude < distanciaPersecusion * distanciaPersecusion) {//si esta en rango de persecucion //si esta en angulo de vision de su cono de 90° if (Vector3.SignedAngle(tr.forward, pltr.position, Vector3.up) < 45.0f) {//DETECTADO StopAllCoroutines(); puedeMoverse = true; edoActual = myEnums.Estado.atacar; } } }
public void IniciarHuidaTemporal(Vector3 puntoAHuir) { if (!muerto) { direccion = tr.position - puntoAHuir; if (direccion.sqrMagnitude < distanciaPersecusion * distanciaPersecusion) { anim.SetInteger("state", 1); edoActual = myEnums.Estado.indefinido; puntoInteres = puntoAHuir; direccion.y = 0; direccion.Normalize(); //tr.rotation = Quaternion.LookRotation(direccion, Vector3.up); StartCoroutine(changeState(myEnums.Estado.patrullar, 2.0f)); } } }
public void Daniar(int _danio) { if (edoActual != myEnums.Estado.indefinido) { edoActual = myEnums.Estado.atacar; } if (salud > 0) { salud -= _danio; if (salud < 25 && huye) { edoActual = myEnums.Estado.huir; } } else { if (isStronk) { foreach (var IA in FindObjectsOfType <IA_Enemigo>()) { if (!IA.isStronk) { IA.IniciarHuidaTemporal(pltr.position); } } } puntoInteres = tr.position; edoActual = myEnums.Estado.muerto; anim.SetBool("alive", false); direccion = Vector3.zero; muerto = true; GetComponent <Collider>().enabled = false; rb.isKinematic = true; SoundFX.miSFX.PlaySFX(2); SceneVictoryManager.scInstance.addnMuertos(); //gameObject.SetActive(false); } }