using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
  
 | 
[DisallowMultipleComponent] 
 | 
[RequireComponent(typeof(Image))] 
 | 
public class FlipImage : BaseMeshEffect 
 | 
{ 
 | 
    [SerializeField] bool m_FlipHorizontal = false; 
 | 
    [SerializeField] bool m_FlipVertical = false; 
 | 
  
 | 
    public bool flipHorizontal 
 | 
    { 
 | 
        get { return m_FlipHorizontal; } 
 | 
        set 
 | 
        { 
 | 
            m_FlipHorizontal = value; 
 | 
            graphic.SetVerticesDirty(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public bool flipVertical 
 | 
    { 
 | 
        get { return m_FlipVertical; } 
 | 
        set 
 | 
        { 
 | 
            m_FlipVertical = value; 
 | 
            graphic.SetVerticesDirty(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public override void ModifyMesh(VertexHelper vh) 
 | 
    { 
 | 
        if (!IsActive() || vh.currentVertCount == 0) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
        var vertexs = new List<UIVertex>(); 
 | 
        vh.GetUIVertexStream(vertexs); 
 | 
        if (flipHorizontal || flipVertical) 
 | 
        { 
 | 
            Flip(vertexs); 
 | 
        } 
 | 
        vh.Clear(); 
 | 
        vh.AddUIVertexTriangleStream(vertexs); 
 | 
    } 
 | 
  
 | 
    void Flip(List<UIVertex> vertexs) 
 | 
    { 
 | 
        var rect = graphic.GetPixelAdjustedRect(); 
 | 
        var count = vertexs.Count; 
 | 
        for (int i = 0; i < count; i++) 
 | 
        { 
 | 
            var vertex = vertexs[i]; 
 | 
            var position = vertex.position; 
 | 
            if (flipHorizontal) 
 | 
            { 
 | 
                position.x = -position.x + rect.max.x + rect.min.x; 
 | 
            } 
 | 
            if (flipVertical) 
 | 
            { 
 | 
                position.y = -position.y + rect.max.y + rect.min.y; 
 | 
            } 
 | 
            vertex.position = position; 
 | 
            vertexs[i] = vertex; 
 | 
        } 
 | 
    } 
 | 
} 
 |