//Script para aplicar la rotación al player usando el acelerómetro.
//Enums y Clases Globales comentadas, estarán en el Script correspondiente.
//Creamos un enum con las posibles caidas con las que se encontrará el Player.
//enum TiposCaida
//{
// Ninguna = 0,
// Fisica = 1,
// Virtual = 2
//}
//Variable para la velocidad de la rotación.
public var velocidadRotacion : float = 0f;
//Cuerda sobre la que rotar.
private var cuerda : Transform;
//Ángulo límite para que el personaje se caiga.
public var anguloMaximo : float = 0f;
//Variable para aplicar el cambio random del ángulo del Player. Para añadirle dificultad.
private var anguloRandom : float = 0f;
//Variables para calcular el tiempo que debe tardar en hacerse el random del ángulo.
private var tiempoCambio : float = 0f;
public var tiempoRandom : float = 0f;
//Ángulo máximo del random.
public var maxAnguloRandom : float = 0f;
//Script de movimiento del Player, para controlar cuando usarlo o no.
private var scriptMovimiento : MovimientoPlayer;
function Awake (){
//Capturamos el script de movimiento del Player.
scriptMovimiento = this.GetComponent("MovimientoPlayer");
}
function FixedUpdate (){
//Si el ángulo en el eje Z está en el intervalo de caida.
if(this.transform.eulerAngles.z > anguloMaximo && this.transform.eulerAngles.z < 360 - anguloMaximo){
//Activamos la gravedad para que caiga el Player.
this.rigidbody.useGravity = true;
//Cambiamos el estado del Player a caida Física para que el movimiento del Player no influya y permitir una muerte limpia.
scriptMovimiento.SetCaida(TiposCaida.Fisica);
//Desactivamos este script para que no podamos seguir rotando.
this.enabled = false;
}
//Si no hemos caido.
else{
//Si el tiempo actual es mayor que el tiempo de cambio, realizamos el random en el ángulo.
if(Time.time > tiempoCambio){
//Calculamos el ángulo random que añadirá dificultad al juego.
anguloRandom = Random.Range(maxAnguloRandom * -1 , maxAnguloRandom);
//Calculamos el nuevo tiempo para realizar el cambio del random.
tiempoCambio = Time.time + tiempoRandom;
}
//Debug.Log(anguloRandom);
//Si estamos saltando limitamos el ángulo de rotación para no poder caernos en el aire.
if(
scriptMovimiento.GetEstado() == EstadosPlayer.EmpezandoSaltoDerecha ||
scriptMovimiento.GetEstado() == EstadosPlayer.EmpezandoSaltoIzquierda ||
scriptMovimiento.GetEstado() == EstadosPlayer.SaltandoDerecha ||
scriptMovimiento.GetEstado() == EstadosPlayer.SaltandoIzquierda ||
scriptMovimiento.GetEstado() == EstadosPlayer.AcabandoSaltoDerecha ||
scriptMovimiento.GetEstado() == EstadosPlayer.AcabandoSaltoIzquierda
){
//Declaramos una variable auxiliar para guardar el ángulo que aplicaremos.
var anguloFinal : float = this.transform.eulerAngles.z;
//Si estamos inclinados a la izquierda marcamos el límite desde la izquierda.
if(anguloFinal < anguloMaximo){
anguloFinal = Mathf.Clamp(
anguloFinal + (anguloRandom + (Input.acceleration.y * velocidadRotacion)) * Time.deltaTime,
1 - anguloMaximo, //En caso de 45º : 1 - 45 = -44 = 314 (Ángulo de caida 315)
anguloMaximo - 1 //En caso de 45º : 45 - 1 = 44 (Ángulo de caida 45)
);
}
//Si no, marcamos el limite desde la derecha.
else{
anguloFinal = Mathf.Clamp(
anguloFinal + (anguloRandom + (Input.acceleration.y * velocidadRotacion)) * Time.deltaTime,
360 - (anguloMaximo + 1), //En caso de 45º : 360 - 46 = 314 (Ángulo de caida 315)
360 + (anguloMaximo - 1) //En caso de 45º : 360 + 44 = 404 = 44 (Ángulo de caida 45)
);
}
//Aplicamos la rotación del Player.
this.transform.eulerAngles.z = anguloFinal;
}
//Si no estamos saltando usamos los calculos de rotación normales.
else{
//Aplicamos la rotación del Player, alrededor de un punto, usando el acelerómetro.
this.transform.RotateAround(
//Punto sobre el que rotar (Será la cuerda en la que estemos).
cuerda.position,
//Vector sobre el que rotar (Posición frontal del Player).
this.transform.forward,
//Angulo de rotación.
(anguloRandom + (Input.acceleration.y * velocidadRotacion)) * Time.deltaTime
);
}
}
}
//----- Sets ------
//Cambiamos la cuerda sobre la que rotar.
public function setCuerda(nuevaCuerda : Transform){
cuerda = nuevaCuerda;
}
//---- Gets ------
//Devolvemos el valor del angulo máximo.
public function GetAnguloMaximo() : float
{
return anguloMaximo;
}