using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[AddComponentMenu("UI/Effects/FontBeatOne")]
public class FontBeatOne : BaseMeshEffect
{
const int count = 6;
[SerializeField]
public float StartIndex;
[SerializeField]
public float EndIndex;
[Tooltip("速度")]
[SerializeField]
public float Speed;
[Tooltip("幅度")]
[SerializeField]
public float Magnitude;
protected Text m_text;
protected List<UIVertex> vertices = new List<UIVertex>();
protected List<UIVertex> newVerts = new List<UIVertex>();
protected override void Start()
{
m_text = GetComponent<Text>();
base.Start();
}
public override void ModifyMesh(VertexHelper vh)
{
vertices.Clear();
newVerts.Clear();
vh.GetUIVertexStream(vertices);
for (int i = 0; i < (vertices.Count / count); i++)
{
if (i >= StartIndex && i < EndIndex)
{
newVerts.AddRange(Characters(vertices.GetRange(i * count, count)));
}
else
{
newVerts.AddRange(vertices.GetRange(i * count, count));
}
}
StartIndex += (Speed / 10);
vh.Clear();
vh.AddUIVertexTriangleStream(newVerts);
}
protected List<UIVertex> Characters(List<UIVertex> verts)
{
for (int i = 0; i < verts.Count; i++)
{
UIVertex c = verts[i];
c.position = c.position + new Vector3(1, Magnitude * Mathf.Sin((Time.timeSinceLevelLoad * Speed)), 1);
verts[i] = c;
}
return verts;
}
void Update()
{
UpdateBeat();
}
public void UpdateBeat()
{
m_text.SetVerticesDirty();
}
}