예제 #1
0
    private void Shoot(int index)
    {
        Vector3 vectorToTarget = Vector3.zero;

        //En caso de estar usando teclado y ratón dispara hacia el ratón
        if (GameManager.Instance.playerController[0] == Bofias.UsingInput.KEYBOARD)
        {
            vectorToTarget = Bofias.GetMouseWorldPosition(Input.mousePosition) - transform.position;
        }
        else
        {
            //En caso contrario calcula la rotación del joystick para disparar en dicha dirección
            float haxis = Input.GetAxis("Xaxis");
            float vaxis = Input.GetAxis("Yaxis");
            if (haxis != 0 || vaxis != 0)
            {
                vectorToTarget = new Vector3(transform.position.x + haxis, transform.position.y + vaxis) - transform.position;
            }
        }

        //Si el joystick no se esta moviendo se dispara en la misma dirección que el ultimo proyectil
        if (vectorToTarget == Vector3.zero)
        {
            Instantiate(spells[index], projectileSpawn.position, projectileSpawn.rotation);
        }
        else
        {
            float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
            projectileSpawn.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            Instantiate(spells[index], projectileSpawn.position, projectileSpawn.rotation);
        }
    }
예제 #2
0
    //Si aún no ha detectado al player, el demonio va eligiendo un punto de patrulla diferente cada 2 segundos
    //y se mueve por el mapa de forma aleatoria
    private void Move()
    {
        if (!playerDetected)
        {
            if (Vector3.Distance(transform.position, PatrolPoint) < .1 || patrolPoint == null)
            {
                float angle = Random.Range(0f, 360f);

                Vector3 towardsPatrolPoint = Quaternion.AngleAxis(angle, Vector3.forward) * (transform.position + Vector3.up * perceptionRadius);
                PatrolPoint = transform.position + towardsPatrolPoint;
                Invoke("ResetPatrol", 2f);
            }
            Bofias.MoveCharacter(rb2d, PatrolPoint, speed);
        }
        //Cuando ha detectado al player este persigue al player
        else
        {
            Bofias.MoveCharacter(rb2d, GetClosestTarget(), speed);
        }

        if ((GetClosestTarget() - transform.position).sqrMagnitude < perceptionRadius * perceptionRadius)
        {
            playerDetected = true;
        }
    }
예제 #3
0
    //Dispara, funciona igual que la función del SinglePlayer, pero solo detecta el control del ratón
    private void Shoot(int index)
    {
        Vector3 vectorToTarget = Bofias.GetMouseWorldPosition(Input.mousePosition) - transform.position;
        float   angle          = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;

        projectileSpawn.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
        Instantiate(spells[index], projectileSpawn.position, projectileSpawn.rotation);
    }
예제 #4
0
 //Rota al player dependiendo de los controles actuales del player usa el input del joystick o del ratón
 private void Rotate()
 {
     if (GameManager.Instance.playerController[0] == Bofias.UsingInput.KEYBOARD)
     {
         rb2d.transform.rotation = Bofias.RotateCharacter(rb2d.transform, Bofias.GetMouseWorldPosition(Input.mousePosition), false);
     }
     else
     {
         rb2d.transform.rotation = Bofias.RotateCharacter(rb2d.transform, Input.GetAxis("Xaxis"));
     }
 }
예제 #5
0
 //El movimiento por defecto del boss, este solo cambia en la segunda fase
 public virtual void Move()
 {
     if (!isAttacking)
     {
         Bofias.MoveCharacter(boss.RB2D, boss.GetClosestTarget(), boss.speed);
         boss.Animator.SetFloat("Speed", 1);
     }
     else
     {
         boss.Animator.SetFloat("Speed", 0);
     }
 }
예제 #6
0
 //Controla el movimiento para evitar que se salga de los limites de la pantalla
 //frenando al player si se sale de la cámara
 private void Move()
 {
     if ((cam.transform.position.x + cam.orthographicSize * cam.aspect > transform.position.x) && (cam.transform.position.x - cam.orthographicSize * cam.aspect < transform.position.x) && (cam.transform.position.y + cam.orthographicSize > transform.position.y) && (cam.transform.position.y - cam.orthographicSize < transform.position.y))
     {
         Bofias.MoveCharacter(rb2d, h, v, speed);
     }
     else if (((cam.transform.position.x + cam.orthographicSize * cam.aspect <= transform.position.x) && h > 0) || ((cam.transform.position.x - cam.orthographicSize * cam.aspect >= transform.position.x) && h < 0))
     {
         Bofias.MoveCharacter(rb2d, 0, v, speed);
     }
     else if (((cam.transform.position.y + cam.orthographicSize <= transform.position.y) && v > 0) || ((cam.transform.position.y - cam.orthographicSize <= transform.position.y) && v < 0))
     {
         Bofias.MoveCharacter(rb2d, h, 0, speed);
     }
     animator.SetFloat("speed", Mathf.Max(Mathf.Abs(h), Mathf.Abs(v)));
 }
예제 #7
0
    public override void Move()
    {
        // El movimiento del boss en esta fase, vigila no acercarse demasiado a las paredes, para no invocar nigromantes fuera del mapa.
        if (!isAttacking)
        {
            RaycastHit2D left  = Physics2D.Raycast(boss.transform.position, Vector3.left, 1.5f, LayerMask.GetMask("Walls"));
            RaycastHit2D right = Physics2D.Raycast(boss.transform.position, Vector3.right, 1.5f, LayerMask.GetMask("Walls"));

            if ((right && boss.GetClosestTarget().x < boss.transform.position.x) || (left && boss.GetClosestTarget().x > boss.transform.position.x))
            {
                Bofias.MoveCharacter(boss.RB2D, new Vector3(boss.transform.position.x, boss.GetClosestTarget().y, 0), -boss.speed);
            }
            else
            {
                Bofias.MoveCharacter(boss.RB2D, boss.GetClosestTarget(), -boss.speed);
            }

            boss.Animator.SetFloat("Speed", 1);
        }
        else
        {
            boss.Animator.SetFloat("Speed", 0);
        }
    }
예제 #8
0
 //Función que mueve el personaje, en este caso el esqueleto se mueve hacia el jugador mas cercano a su invocador
 //para proteger al nigromante
 private void Move()
 {
     Bofias.MoveCharacter(rb2d, owner.GetClosestTarget(), speed);
 }
예제 #9
0
 //Función de rotación del player 1, usando el ratón
 private void Rotate()
 {
     rb2d.transform.rotation = Bofias.RotateCharacter(rb2d.transform, Bofias.GetMouseWorldPosition(Input.mousePosition), false);
 }
예제 #10
0
 //Mueve al nigromante hacia el punto de patrulla
 public override void Move()
 {
     Bofias.MoveCharacter(enemy.RB2D, enemy.PatrolPoint, enemy.speed);
 }
예제 #11
0
 //Función de rotación del player 2, usando el joystick
 private void Rotate()
 {
     rb2d.transform.rotation = Bofias.RotateCharacter(rb2d.transform, Input.GetAxis("Xaxis"));
 }
예제 #12
0
 //Rota al nigromando mirando en dirección contraria al player
 public override void Rotate()
 {
     enemy.transform.rotation = Bofias.RotateCharacter(enemy.transform, enemy.GetClosestTarget(), true);
 }
예제 #13
0
 //Se mueve huyendo del player mas cercano
 public override void Move()
 {
     Bofias.MoveCharacter(enemy.RB2D, enemy.GetClosestTarget(), -enemy.speed);
 }
예제 #14
0
 //Función para rotar al boss, es virtual porque una de las fases del boss este gira huyendo del jugador.
 public virtual void Rotate()
 {
     boss.transform.rotation = Bofias.RotateCharacter(boss.transform, boss.GetClosestTarget(), false);
 }
예제 #15
0
 //Mueve al player y modifica la variable de movimiento del animator
 private void Move()
 {
     Bofias.MoveCharacter(rb2d, h, v, speed);
     animator.SetFloat("speed", Mathf.Max(Mathf.Abs(h), Mathf.Abs(v)));
 }
예제 #16
0
 //Función que rota hacia la posición del player
 public virtual void Rotate()
 {
     enemy.transform.rotation = Bofias.RotateCharacter(enemy.transform, enemy.GetClosestTarget(), false);
 }
예제 #17
0
 //En esta fase el boss rota en dirección contraria al player, ya que huye del mismo
 public override void Rotate()
 {
     boss.transform.rotation = Bofias.RotateCharacter(boss.transform, -boss.GetClosestTarget(), true);
 }