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

public class TarczaStrzelnicza : MonoBehaviour
{
    public Transform[] Kola;
    public WheelCollider[] KolaKolider;
    public GameObject sciezka;
    private float maxKatSkretu = 55.0f;
    [SerializeField] float maxMomentObrotowy = 1000;
    [SerializeField] float maxPredkosc = 25;
    int idAktualny = 0;

    void ObracajKola()
    {
        for (int i = 0; i < Kola.Length; i++)
        {
            var pos = Vector3.zero;
            var rot = Quaternion.identity;
            KolaKolider[i].GetWorldPose(out pos, out rot);
            Kola[i].position = pos;
            Kola[i].rotation = rot*Quaternion.Euler(0,-90,90);
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }
    void UaktualnijSkret()
    {

        Vector3 dir = transform.InverseTransformPoint(
                       new Vector3(
                           sciezka.GetComponent<Sciezka>().Punkt[idAktualny].position.x,
                           transform.position.y,
                           sciezka.GetComponent<Sciezka>().Punkt[idAktualny].position.z
                           )
                       );
        float skret=dir.x/dir.magnitude*maxKatSkretu;
        //przednia para
        KolaKolider[0].steerAngle = skret;
        KolaKolider[2].steerAngle = skret;
        //tylna para
        KolaKolider[1].steerAngle = -skret;
        KolaKolider[3].steerAngle = -skret;
    }
    void Jazda()
    {
        float predkosc = 2 * Mathf.PI * KolaKolider[0].radius * KolaKolider[0].rpm * 60 / 1000;
        if (predkosc < maxPredkosc)
        {
            for (int i = 0; i < KolaKolider.Length; i++)
                KolaKolider[i].motorTorque = maxMomentObrotowy;
        }
        else
        {
            for (int i = 0; i < KolaKolider.Length; i++)
                KolaKolider[i].motorTorque = 0;
        }

    }
    void ZmianaPunktu()
    {
        Vector3 cel = new Vector3(sciezka.GetComponent<Sciezka>().Punkt[idAktualny].position.x,
                        transform.position.y,
                        sciezka.GetComponent<Sciezka>().Punkt[idAktualny].position.z);
        //zbliaj sie do odlegoci do 5 metrw
        if (Vector3.Distance(transform.position, cel) < 5.0f)
        {
            if (idAktualny == sciezka.GetComponent<Sciezka>().Punkt.Length - 1)
                idAktualny = 0;
            else
                idAktualny++;
        }
    }
    // Update is called once per frame
    void Update()
    {
        ObracajKola();
        UaktualnijSkret();
        Jazda();
        ZmianaPunktu();
    }
   
}
