| //-------------------------------------------------------- | 
| //    [Author]:           第二世界 | 
| //    [  Date ]:           Thursday, August 10, 2017 | 
| //-------------------------------------------------------- | 
|   | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
|   | 
| namespace vnxbqy.UI { | 
|   | 
|     /// <summary> | 
|     /// 这个组件接收一些顶点,绘制出水平和垂直的线。 | 
|     /// </summary> | 
|     public class PolylineImage:Graphic { | 
|   | 
|         [SerializeField] | 
|         float m_Width; | 
|         public float width { | 
|             get { | 
|                 return this.m_Width; | 
|             } | 
|             set { | 
|                 this.m_Width = value; | 
|                 base.SetVerticesDirty(); | 
|             } | 
|         } | 
|   | 
|         [SerializeField] | 
|         Vector2[] m_Points; | 
|         public Vector2[] points { | 
|             get { | 
|                 return this.m_Points; | 
|             } | 
|             set { | 
|                 this.m_Points = value; | 
|                 base.SetVerticesDirty(); | 
|             } | 
|         } | 
|   | 
|         protected override void OnPopulateMesh(VertexHelper vh) { | 
|             vh.Clear(); | 
|             if(this.points == null || this.points.Length < 2) { | 
|                 return; | 
|             } | 
|   | 
|             var hw = this.width * 0.5f; | 
|   | 
|             for(var i = 0;i < this.points.Length - 1;i++) { | 
|                 var point = this.points[i]; | 
|                 var nextPoint = this.points[i + 1]; | 
|   | 
|                 var xReversal = point.x > nextPoint.x; | 
|                 var yReversal = point.y > nextPoint.y; | 
|   | 
|                 var positions = new Vector3[4]; | 
|                 positions[0] = new Vector2(xReversal ? point.x + hw : point.x - hw,yReversal ? point.y + hw : point.y - hw); | 
|                 positions[1] = new Vector2(xReversal ? nextPoint.x - hw : nextPoint.x + hw,yReversal ? point.y + hw : point.y - hw); | 
|                 positions[2] = new Vector2(xReversal ? nextPoint.x - hw : nextPoint.x + hw,yReversal ? nextPoint.y - hw : nextPoint.y + hw); | 
|                 positions[3] = new Vector2(xReversal ? point.x + hw : point.x - hw,yReversal ? nextPoint.y - hw : nextPoint.y + hw); | 
|   | 
|                 UIUtility.AddQuad(vh,positions,color,new Vector2[4] { Vector2.one,Vector2.one,Vector2.one,Vector2.one }); | 
|             } | 
|   | 
|         } | 
|   | 
|     } | 
|   | 
| } |