using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControlNave : MonoBehaviour {

    public static ControlNave instancia;
    public float rotacion = 0;
    private float rotFinal = 0;
    public float[] velocidades;
    private int indiceVelocidad;
    public float velocidad;

    [HideInInspector()]
    public InputTeclas teclas;
    [HideInInspector()]
    public InputBinario binario;

    private void Awake()
    {
        instancia = this;
        teclas = GetComponent<InputTeclas>();
        binario = GetComponent<InputBinario>();
        indiceVelocidadActual = 0;
    }

   //---------------------TORMENTA-----------------------------------------------------
    // variables Tormenta
    public bool tormenta;
    public float girosuma;
    public Transform NaveEnTormenta;
    // Fin variables Tormenta

    public void Update()
    {
        
        //Condicion para detectar entrada y salida de tormenta
        if (tormenta != true)
        {

            transform.Translate(0, velocidad * Time.deltaTime, 0);
            //Anulación de rotación para que no interfiera con la rotación final luego de la tormenta
            rotacion = Mathf.LerpAngle(rotacion, rotFinal, .01f);
           
            //Esto se debería ejectuar SOLO CUANDO SE PRESIONA UN COMANDO  
            transform.rotation = Quaternion.Euler(0, 0, rotacion); 
        }
        else {
            
            //comportamiento de la nave en la tormenta
            girosuma++;
            transform.Translate(0, 0.27f * Time.deltaTime  , 0);
            rotacion = Mathf.LerpAngle(rotacion, rotFinal, .01f);
            rotFinal = girosuma + 90;
            transform.rotation = Quaternion.Euler(0, 0, girosuma);
        //    NaveEnTormenta = this.transform;
        }
    }
    //--------------------------------------------------------------------------
    public void Acelerar()
    {
        indiceVelocidadActual++;
    }

    public void Frenar()
    {
        indiceVelocidadActual--;
    }

    public int indiceVelocidadActual
    {
        get
        {
            return indiceVelocidad;
        }
        set
        {
            if(value < velocidades.Length && value >= 0)
            {
                indiceVelocidad = value;
                velocidad = velocidades[value];
            }
        }
    }

	public void Girar(float grados)
    {
        rotFinal += grados;
    }

    public void Enfilar(Vector3 destino)
    {
        Vector2 direccion = destino - transform.position;
        var angulo = Mathf.Rad2Deg * Mathf.Atan2(direccion.y, direccion.x) - 90f;
        rotFinal = angulo;
    }

    public void Detener()
    {
        indiceVelocidadActual = 0;
    }

    public void IniciarVelocidadCrucero()
    {
        indiceVelocidadActual = velocidades.Length - 1;
    }
}
