//Metodo que se manda llamar cada frame
    public override void UpdateState(AgenteEstatico agent)
    {
        //Si se detecto al agente
        if (agent.targetDetected)
        {
            agent.TransitionToState(agent.attackState); //Hacer la transicion al estado de atacar
        }
        else
        {
            //Sino, realizar el comportamiento de rotar
            //Esta linea es la que permite rotar de forma suave al agente, llendo de su rotación actual hacia el angulo indicado en el
            //arreglo, se le añade la variable de velocidad para la rotación
            agent.transform.rotation = Quaternion.Slerp(agent.transform.rotation, Quaternion.Euler(agent.angles[agent.angleIndex]), Time.deltaTime * agent.speedRotation);


            //Debug.Log(agent.transform.eulerAngles.y); //Mensaje en consola para ver los angulos

            //Si el agente llego a la rotación que se encuentra en el arreglo
            if (agent.transform.eulerAngles.y >= (agent.angles[agent.angleIndex].y - 1))
            {
                agent.angleIndex = (agent.angleIndex + 1) % agent.angles.Length; //Pasar al siguiente angulo, recorriendo el arreglo de angulos, va a recorre siempre de 0 - el tamaño del arreglo
                agent.TransitionToState(agent.idleState);                        //Una vez llegado ahí queremos que espere un momento antes de rotar, por eso se hace la transición al estado Idle
            }
        }
    }
    public override void EnterState(AgenteEstatico agent)
    {
        //Código para cuando entra al estado de atacar
        Debug.Log("Estado de Atacar");
        agent.agentStatus = AgentState.Attacking;

        //agent.FireBullet();
        nextFire = Time.time + rateFire;
    }
 public override void UpdateState(AgenteEstatico agent)
 {
     //necesario preguntar si se ha detectado al jugador
     //agent.StopAllCoroutines();//Esto detiene la corutina de Wait que esta en este código
     //Si es verdad, cambiar al estado de atacar
     if (agent.targetDetected)
     {
         agent.StopAllCoroutines();
         agent.TransitionToState(agent.attackState);
     }
 }
 public override void UpdateState(AgenteEstatico agent)
 {
     if (agent.targetDetected)
     {
         var lookRotation = Quaternion.LookRotation(agent.tarjetObj.transform.position - agent.transform.position);
         agent.transform.rotation = Quaternion.Slerp(agent.transform.rotation, lookRotation, agent.speedRotation * Time.deltaTime);
         if (nextFire < Time.time)
         {
             agent.Firebullet();
             nextFire = Time.time + rateFire;
         }
     }
     else
     {
         agent.TransitionToState(agent.idleState);
     }
 }
    public override void UpdateState(AgenteEstatico agent)
    {
        if (agent.targetDetected) //Si el target sigue detectado
        {
            //Primero hacia que dirección esta el target, hacemos una resta entre las posiciones para obtenerla y guardarla en lookRotation
            var lookRotation = Quaternion.LookRotation(agent.targetObj.transform.position - agent.transform.position);
            //Realizaremos una rotación suave a lo largo de la ejecucion, apuntando siempre al target en base a la dirección guardada de lookrotation
            agent.transform.rotation = Quaternion.Slerp(agent.transform.rotation, lookRotation, agent.speedRotation * Time.deltaTime);

            //Controlamos los disparos, si el tiempo acumulado es menor a Time.time, puede disparar
            // Time.time es una varible de la librería de Unity, es el tiempo que esta transcurriendo en el juego
            if (nextFire < Time.time)
            {
                agent.FireBullet();              //Se manda llamar el metodo de disparar
                nextFire = Time.time + rateFire; //acumulamos el tiempo, para cuando toque disparar nuevamente
            }
        }
        else
        {
            agent.TransitionToState(agent.idleState);
        }
    }
 //Metodo de inicio en el estado Idle
 public override void EnterState(AgenteEstatico agent)
 {
     Debug.Log("Entro a estado Idle");
     agent.agentStatus = AgentState.Idle; //Se cambia la variable para saber el estado en que esta el agente
     agent.Coroutine(Wait(agent));        //Se llama la corutina para iniciar la espera de x segundos
 }
 public override void UpdateState(AgenteEstatico agent)
 {
 }
    //Corutina, nos permite hacer una "pausa" antes de ejecutar cierto código
    IEnumerator Wait(AgenteEstatico agent)
    {
        yield return(new WaitForSeconds(agent.timeIdle)); //Espera x segundos, depende del valor de la variable timeIdle

        agent.TransitionToState(agent.rotateState);       //Cambia al estado de rotación
    }
 public abstract void UpdateState(AgenteEstatico agent);
Exemple #10
0
 public abstract void EnterState(AgenteEstatico agent);
 //Metodo que se manda llamar cuando se entra al estado de Idle
 public override void EnterState(AgenteEstatico agent)
 {
     Debug.Log("Entro a estado rotar");         //Mensaje en consola de Unity
     agent.agentStatus = AgentState.OnMovement; //Se cambia la variable para indicar el estado en que se encuentra el agente
 }
 public override void UpdateState(AgenteEstatico agent)
 {
     //necesario preguntar si se ha detectado al jugador
     //agent.StopAllCoroutines();//Esto detiene la corutina de Wait que esta en este código
     //Si es verdad, cambiar al estado de atacar
 }
Exemple #13
0
 public override void EnterState(AgenteEstatico agent)
 {
     //Código para cuando entra al estado de atacar
 }
Exemple #14
0
 public override void UpdateState(AgenteEstatico agent)
 {
     //Código para cuando no se detecta al jugador
 }