| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | using System;using UnityEngine;namespace MPUIKIT {    /// <summary>    /// Isosceles triangle where two sides of the triangle are equal. Width and height of the shape is    /// the same as the rect-transform    /// </summary>    [Serializable]    public struct Triangle : IMPUIComponent {        [SerializeField] private Vector3 m_CornerRadius;#if UNITY_EDITOR        [SerializeField] private bool m_UniformCornerRadius;#endif        /// <summary>        /// <para>Radius of the three corners. Counter-Clockwise from bottom-left</para>        /// <para>x => bottom-left, y => bottom-right</para>        /// <para>z => top</para>        /// </summary>        public Vector3 CornerRadius {            get => m_CornerRadius;            set {                m_CornerRadius = Vector3.Max(value, Vector3.zero);                if (ShouldModifySharedMat) {                    SharedMat.SetVector(SpTriangleCornerRadius, m_CornerRadius);                }                OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);            }        }                private static readonly int SpTriangleCornerRadius = Shader.PropertyToID("_TriangleCornerRadius");        public Material SharedMat { get; set; }        public bool ShouldModifySharedMat { get; set; }        public RectTransform RectTransform { get; set; }        public void Init(Material sharedMat, Material renderMat, RectTransform rectTransform) {            this.SharedMat = sharedMat;            this.ShouldModifySharedMat = sharedMat == renderMat;            this.RectTransform = rectTransform;        }        public event EventHandler OnComponentSettingsChanged;        public void OnValidate() {            CornerRadius = m_CornerRadius;        }        public void InitValuesFromMaterial(ref Material material) {            m_CornerRadius = material.GetVector(SpTriangleCornerRadius);        }        public void ModifyMaterial(ref Material material, params object[] otherProperties) {            material.SetVector(SpTriangleCornerRadius, m_CornerRadius);        }    }}
 |