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(); vh.GetUIVertexStream(vertexs); if (flipHorizontal || flipVertical) { Flip(vertexs); } vh.Clear(); vh.AddUIVertexTriangleStream(vertexs); } void Flip(List 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; } } }