﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
/*
 * 
 * TO BE DONE
 * CAN NOT USE
*/
public class WheelHelper : MonoBehaviour
{
    public float radius;
    int currentI;
    RaycastHit hitInfo;
    Vector3 hp;
    GameObject helper;
    float deltHest;
    float lostCount;
    // Start is called before the first frame update
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.green;
        float deg;
        for (int i = 0; i < 32; i++)
        {
            deg = Mathf.PI * i / 16;
            Gizmos.DrawLine
                (transform.position,transform.position + 
                (Vector3)
                (
                transform.localToWorldMatrix*
                new Vector3
                (0,
                -Mathf.Sin(deg),
                Mathf.Cos(deg )
                )
                *radius
                )
                );
        }
        Gizmos.color = Color.red;
        Gizmos.DrawSphere(hp,0.05f);
    }
    void Start()
    {
        helper = new GameObject("WheelHelper",typeof(BoxCollider));
        helper.GetComponent<BoxCollider>().size = new Vector3(1f, 0.1f, 1f);
        helper.GetComponent<BoxCollider>().center = new Vector3(0,-0.05f,0);
        //helper.GetComponent<BoxCollider>().isTrigger = true; ;
        helper.transform.parent = GameObject.Find("WheelHelpers").transform;
        //helper.SetActive(false);
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        //helper.SetActive(false);
        deltHest = radius;
        float distance = 99999;
        Vector3 target = transform.position - new Vector3(0,radius*1.2f,0);
        lostCount++;
        if (lostCount > 4)
        {
            helper.SetActive(false);
        }
        for (int i = 0; i < 32; i++)
        {
            float deg = Mathf.PI * i / 16;
            Vector3 direction = new Vector3(0, -Mathf.Sin(deg), Mathf.Cos(deg));
            direction = (transform.localToWorldMatrix) * direction;
            //hp = Vector3.zero;
            if (Physics.Raycast(new Ray(transform.position, direction), out hitInfo, radius))
            {
                Vector2 t, h;
                t.x = transform.position.x;
                t.y = transform.position.z;
                h.x = hitInfo.point.x;
                h.y = hitInfo.point.z;
                if ((h - t).sqrMagnitude > 0.01f)
                {
                    Vector3 v = hitInfo.point;
                    v.x = transform.position.x;
                    v.z = transform.position.z;
                    //v.y = v.y;
                    if (hitInfo.distance < distance)
                    {
                        distance = hitInfo.distance;
                        deltHest = transform.position.y - v.y;
                        hp = hitInfo.point;
                        target = v;
                        lostCount = 0;
                        helper.SetActive(true);
                    }
                }
            }
        }
        float tar = hp.y;
        Vector3 pos = helper.transform.position;
        helper.transform.position = new Vector3(target.x, pos.y, target.z);
        pos = helper.transform.position;
        helper.transform.position = target;//pos + (target-pos)*0.03f;
        //helper.transform.position = new Vector3(transform.position.x, transform.position.y + (tar- transform.position.y)*0.005f, transform.position.z);
    }
}
