using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
using UnityEngine.Sprites; 
 | 
  
 | 
public class TextImage : TextEx 
 | 
{ 
 | 
    [SerializeField] Sprite m_Sprite; 
 | 
  
 | 
    public Sprite sprite { 
 | 
        get { return m_Sprite; } 
 | 
        set { 
 | 
            m_Sprite = value; 
 | 
            SetVerticesDirty(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    protected override void Awake() 
 | 
    { 
 | 
        base.Awake(); 
 | 
        base.font = FontUtility.preferred; 
 | 
        // base.material = MaterialUtility.hudMaterial; 
 | 
  
 | 
        if (sprite != null) 
 | 
        { 
 | 
            base.material.SetTexture("_Tex2", sprite.texture); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    protected override void OnPopulateMesh(VertexHelper vh) 
 | 
    { 
 | 
        if (sprite != null) 
 | 
        { 
 | 
            vh.Clear(); 
 | 
        } 
 | 
  
 | 
        base.OnPopulateMesh(vh); 
 | 
  
 | 
        if (sprite != null) 
 | 
        { 
 | 
            var size = new Vector2(rectTransform.rect.width, rectTransform.rect.height); 
 | 
            var positions = new Vector3[4]; 
 | 
            var uvs = new Vector2[4]; 
 | 
  
 | 
            var uv = sprite != null ? DataUtility.GetOuterUV(sprite) : Vector4.zero; 
 | 
            var width = rectTransform.rect.width; 
 | 
            var height = rectTransform.rect.height; 
 | 
  
 | 
            var uvCenterX = (uv.x + uv.z) * 0.5f; 
 | 
            var uvCenterY = (uv.y + uv.w) * 0.5f; 
 | 
            var uvScaleX = (uv.z - uv.x) / width; 
 | 
            var uvScaleY = (uv.w - uv.y) / height; 
 | 
  
 | 
            var position = positions[0] = new Vector2(-size.x * 0.5f, -size.y * 0.5f); 
 | 
            uvs[0] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); 
 | 
  
 | 
            position = positions[1] = new Vector2(size.x * 0.5f, -size.y * 0.5f); 
 | 
            uvs[1] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); 
 | 
  
 | 
            position = positions[2] = new Vector2(size.x * 0.5f, size.y * 0.5f); 
 | 
            uvs[2] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); 
 | 
  
 | 
            position = positions[3] = new Vector2(-size.x * 0.5f, size.y * 0.5f); 
 | 
            uvs[3] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); 
 | 
  
 | 
            for (var i = 0; i < 4; i++) 
 | 
            { 
 | 
                vh.AddVert(positions[i], color, uvs[i], uvs[i], new Vector3(1, 0, -1), new Vector4(1, 0, 0, -1)); 
 | 
            } 
 | 
  
 | 
            vh.AddTriangle(0, 1, 2); 
 | 
            vh.AddTriangle(2, 3, 0); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |