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

public struct Line
{
    private int _startVertexIndex ;

    /// <summary>
    /// 起点索引
    /// </summary>
    public int StartVertexIndex
    {
        get { return _startVertexIndex; }
    }

    private int _endVertexIndex;

    /// <summary>
    /// 终点索引
    /// </summary>
    public int EndVertexIndex
    {
        get { return _endVertexIndex; }
    }

    private int _vertexCount;

    /// <summary>
    /// 该行占的点数目
    /// </summary>
    public int VertexCount
    {
        get { return _vertexCount; }
    }

    public Line(int startVertexIndex, int length)
    {
        _startVertexIndex = startVertexIndex;
        _endVertexIndex = length * 6 - 1 + startVertexIndex;
        _vertexCount = length * 6;
    }
}


[AddComponentMenu("UI/Effects/UITextSpacing")]
public class UITextSpacing : BaseMeshEffect
{
    public float _textSpacing = 1f;
    private UIVertex vt;
    public override void ModifyMesh(VertexHelper vh)
    {
        if (!IsActive() || vh.currentVertCount == 0)
        {
            return;
        }

        Text text = GetComponent<Text>();
        if (text == null)
        {
            Debug.LogError("Missing Text component");
            return;
        }

        // List<UIVertex> vertexs = new List<UIVertex>();
         // vh.GetUIVertexStream(vertexs);
        int indexCount = vh.currentIndexCount;

        string[] lineTexts = text.text.Split('\n');

        Line[] lines = new Line[lineTexts.Length];

        //根据lines数组中各个元素的长度计算每一行中第一个点的索引，每个字、字母、空母均占6个点
        for (int i = 0; i < lines.Length; i++)
        {
            //除最后一行外，vertexs对于前面几行都有回车符占了6个点
            if (i == 0)
            {
                lines[i] = new Line(0, lineTexts[i].Length + 1);
            }
            else if (i > 0 && i < lines.Length - 1)
            {
                lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length + 1);
            }
            else
            {
                lines[i] = new Line(lines[i - 1].EndVertexIndex + 1, lineTexts[i].Length);
            }
        }

       

        for (int i = 4; i < vh.currentVertCount; i++)
        {
            vh.PopulateUIVertex(ref vt, i);
            vt.position += new Vector3(_textSpacing * (i / 4 + 1), 0, 0);
            vh.SetUIVertex(vt, i);
        }
        // for (int i = 0; i < lines.Length; i++)
        // {
        //     for (int j = lines[i].StartVertexIndex + 6; j <= lines[i].EndVertexIndex; j++)
        //     {
        //         if (j < 0 || j >= vh.currentVertCount)
        //         {
        //             continue;
        //         }
        //
        //         int index = 0;
        //         if (j % 6 <= 2)
        //         {
        //             index = (j / 6) * 4 + j % 6;
        //           
        //         }
        //         if (j % 6 == 4)
        //         {
        //             index = (j / 6) * 4 + j % 6 - 1;
        //        
        //         }
        //         vh.PopulateUIVertex(ref vt,index);
        //         vt.position += new Vector3(_textSpacing * ((j - lines[i].StartVertexIndex) / 6), 0, 0);
        //       
        //         //以下注意点与索引的对应关系
        //         vh.SetUIVertex(vt, index);
        //     }
        // }
    }
}