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); } }
//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; } }
//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); }
//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")); } }
//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); } }
//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))); }
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); } }
//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); }
//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); }
//Mueve al nigromante hacia el punto de patrulla public override void Move() { Bofias.MoveCharacter(enemy.RB2D, enemy.PatrolPoint, enemy.speed); }
//Función de rotación del player 2, usando el joystick private void Rotate() { rb2d.transform.rotation = Bofias.RotateCharacter(rb2d.transform, Input.GetAxis("Xaxis")); }
//Rota al nigromando mirando en dirección contraria al player public override void Rotate() { enemy.transform.rotation = Bofias.RotateCharacter(enemy.transform, enemy.GetClosestTarget(), true); }
//Se mueve huyendo del player mas cercano public override void Move() { Bofias.MoveCharacter(enemy.RB2D, enemy.GetClosestTarget(), -enemy.speed); }
//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); }
//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))); }
//Función que rota hacia la posición del player public virtual void Rotate() { enemy.transform.rotation = Bofias.RotateCharacter(enemy.transform, enemy.GetClosestTarget(), false); }
//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); }