using System.Collections;
using UnityEngine;
using UnityEngine.Events;
/// 
/// 车皮肤
/// 
public class SkinCar : MonoBehaviour
{
    /// 
    /// 惊险超车射线
    /// 
    [HideInInspector] public Transform judgmentOvertakingRay;
    /// 
    /// 左前转向灯
    /// 
    [HideInInspector] public GameObject leftFrontIndicator;
    /// 
    /// 右前转向灯
    /// 
    [HideInInspector] public GameObject rightFrontIndicator;
    /// 
    /// 左后转向灯
    /// 
    [HideInInspector] public GameObject leftQueenIndicator;
    /// 
    /// 右后转向灯
    /// 
    [HideInInspector] public GameObject rightQueenIndicator;
    /// 
    /// 右轮
    /// 
    [HideInInspector] public GameObject rightWheel;
    /// 
    /// 大小类型
    /// 
    [HideInInspector]public E_CarSizeType carSizeType;
    /// 
    /// 闪烁协程
    /// 
    private Coroutine flashingCoroutine;
    private void Awake()
    {
        leftQueenIndicator = transform.Find("LeftQueenIndicator").gameObject;
        rightQueenIndicator = transform.Find("RightQueenIndicator").gameObject;
        leftFrontIndicator = transform.Find("LeftFrontIndicator").gameObject;
        rightFrontIndicator = transform.Find("RightFrontIndicator").gameObject;
        rightWheel = transform.Find("Wheels/Meshes/FrontRightWheel").gameObject;
        judgmentOvertakingRay = transform.Find("JudgmentOvertakingRay").transform;
        SetAllLight(false);
    }
    /// 
    /// 关闭灯
    /// 
    public void SetAllLight(bool isTrue)
    {
        leftQueenIndicator.gameObject.SetActive(isTrue);
        rightQueenIndicator.gameObject.SetActive(isTrue);
        leftFrontIndicator.gameObject.SetActive(isTrue);
        rightFrontIndicator.gameObject.SetActive(isTrue);
    }
    /// 
    /// 打开前灯
    /// 
    public void OpenFrontLight()
    {
        leftFrontIndicator.gameObject.SetActive(true);
        rightFrontIndicator.gameObject.SetActive(true);
    }
    /// 
    /// 停止闪烁
    /// 
    public void StopFlashing()
    {
        if(flashingCoroutine!=null)
        {
            StopCoroutine(flashingCoroutine);
            MeshRenderer[] meshRenderers = GetComponentsInChildren();
            for (int j = 0; j < meshRenderers.Length; j++)
            {
                meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, "ColorVar1_Material");
            }
        }
    }
    /// 
    /// 车身透明
    /// 
    public void BodyTransparency()
    {
        MeshRenderer[] meshRenderer = GetComponentsInChildren();
        for (int i = 0; i < meshRenderer.Length; i++)
        {
            meshRenderer[i].material = YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, "ghost");
        }
    }
    /// 
    /// 车身恢复
    /// 
    public void BodyRecovery()
    {
        MeshRenderer[] meshRenderer = GetComponentsInChildren();
        for (int i = 0; i < meshRenderer.Length; i++)
        {
            meshRenderer[i].material = YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, "ColorVar1_Material");
        }
    }
    /// 
    /// 闪烁
    /// 
    public void Flashing(string materialName,UnityAction unityAction)
    {
        flashingCoroutine=StartCoroutine(IE_Flashing(materialName,unityAction));
    }
    /// 
    /// 闪烁协程
    /// 
    /// 
    private IEnumerator IE_Flashing(string materialName, UnityAction callBack)
    {
        UIManager.Instance.GetUI().SetShimmerCountDownSetActive(true);
        MeshRenderer[] meshRenderers = GetComponentsInChildren();
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < meshRenderers.Length; j++)
            {
                meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, materialName); 
            }
            yield return new WaitForSeconds(0.2f);
            for (int j = 0; j < meshRenderers.Length; j++)
            {
                meshRenderers[j].material = YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, "ColorVar1_Material"); 
            }
            yield return new WaitForSeconds(0.2f);
        }
        callBack?.Invoke();
    }
    /// 
    /// 使用闪灯
    /// 
    public void USE()
    {
        StartCoroutine(IE_USE());
    }
    /// 
    /// 使用车协程
    /// 
    /// 
    private IEnumerator IE_USE()
    {
        for (int i = 0; i < 2; i++)
        {
            leftFrontIndicator.gameObject.SetActive(false);
            rightFrontIndicator.gameObject.SetActive(false);
            yield return new WaitForSeconds(0.1f);
            leftFrontIndicator.gameObject.SetActive(true);
            rightFrontIndicator.gameObject.SetActive(true);
            yield return new WaitForSeconds(0.1f);
        }
    }
    private void OnEnable()
    {
        if (leftQueenIndicator != null)
        {
            leftQueenIndicator.gameObject.SetActive(false);
        }
        if (rightQueenIndicator != null)
        {
            rightQueenIndicator.gameObject.SetActive(false);
        }
    }
    /// 
    /// 右轮旋转
    /// 
    public void RightWheelSpin()
    {
        if (Scenes.Instance.e_GameState == E_GameState.GameVictory)
        {
            rightWheel.transform.Rotate(Vector3.right * 800 * Time.deltaTime);
        }
    }
}