//-------------------------------------------------------- 
 | 
//    [Author]:           玩个游戏 
 | 
//    [  Date ]:           Thursday, August 10, 2017 
 | 
//-------------------------------------------------------- 
 | 
using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.UI; 
 | 
using UnityEngine.Sprites; 
 | 
using System; 
 | 
  
 | 
  
 | 
[DisallowMultipleComponent] 
 | 
[RequireComponent(typeof(Image))] 
 | 
public class CustomImage:BaseMeshEffect { 
 | 
  
 | 
    [SerializeField] 
 | 
    Vector2[] m_Points; 
 | 
    public Vector2[] points { 
 | 
        get { 
 | 
            return this.m_Points; 
 | 
        } 
 | 
        set { 
 | 
            this.m_Points = value; 
 | 
            SetVerticesDirty(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private Image m_Image; 
 | 
    public Image image { 
 | 
        get { 
 | 
            return this.m_Image ?? (this.m_Image = this.AddMissingComponent<Image>()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void SetVerticesDirty() { 
 | 
        this.graphic.SetVerticesDirty(); 
 | 
    } 
 | 
  
 | 
    public override void ModifyMesh(VertexHelper vh) { 
 | 
        vh.Clear(); 
 | 
  
 | 
        if(this.image == null) { 
 | 
            throw new NullReferenceException(); 
 | 
        } 
 | 
  
 | 
        if(this.points == null || this.points.Length < 3) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        var width = this.image.rectTransform.rect.width; 
 | 
        var height = this.image.rectTransform.rect.height; 
 | 
  
 | 
        var uv = this.image.overrideSprite != null ? DataUtility.GetOuterUV(this.image.overrideSprite) : Vector4.zero; 
 | 
        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; 
 | 
  
 | 
        for(var i = 0;i < this.points.Length;i++) { 
 | 
            var point = this.points[i]; 
 | 
  
 | 
            var position = new Vector2(point.x,point.y); 
 | 
            var uv0 = new Vector2(position.x * uvscaleX + uvcenterX,position.y * uvscaleY + uvcenterY); 
 | 
            var vertex = UIUtility.PackageUIVertex(position,uv0,this.image.color); 
 | 
            vh.AddVert(vertex); 
 | 
        } 
 | 
  
 | 
        var vertexCount = this.points.Length; 
 | 
        var index = 0; 
 | 
        for(;index < vertexCount - 2;index++) { 
 | 
            vh.AddTriangle(index,index + 1,index + 2); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |