| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 
							- using System;
 
- using UnityEngine;
 
- namespace MPUIKIT {
 
-     /// <summary>
 
-     /// Hexagon shape with two opposite parallel equal sides. It is basically a rectangle where two
 
-     /// of it's sides are broken into halves and pulled out of the shape that creates two triangle tips
 
-     /// left and right of the shape.
 
-     /// </summary>
 
-     [Serializable]
 
-     public struct Hexagon: IMPUIComponent {
 
-         [SerializeField] private Vector4 m_CornerRadius;
 
-         [SerializeField] private bool m_UniformCornerRadius;
 
-         [SerializeField] private Vector2 m_TipSize;
 
-         [SerializeField] private bool m_UniformTipSize;
 
-         [SerializeField] private Vector2 m_TipRadius;
 
-         [SerializeField] private bool m_UniformTipRadius;
 
-         
 
-         /// <summary>
 
-         /// Sizes of the two tips (the triangular part sticking out of the rectangular part of the shape)
 
-         /// <para>x => left tip, y => right tip</para>
 
-         /// </summary>
 
-         public Vector2 TipSize {
 
-             get => m_TipSize;
 
-             set {
 
-                 m_TipSize = Vector2.Max(value, Vector2.one);
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetVector(SpHexagonTipSizes, m_TipSize);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Radius of the corner of the tips.
 
-         /// <para>x => left tip's corner, y => right tip's corner</para>
 
-         /// </summary>
 
-         public Vector2 TipRadius {
 
-             get => m_TipRadius;
 
-             set {
 
-                 m_TipRadius = Vector2.Max(value, Vector2.one); 
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetVector(SpHexagonTipRadius, m_TipRadius);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// <para>Radius of the four corners of the rectangular part of the shape.
 
-         /// Counter-Clockwise from bottom-left</para>
 
-         /// <para>x => bottom-left, y => bottom-right</para>
 
-         /// <para>z => top-right, w => top-left</para>
 
-         /// </summary>
 
-         public Vector4 CornerRadius {
 
-             get => m_CornerRadius;
 
-             set {
 
-                 m_CornerRadius = Vector4.Max(value, Vector4.one);
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetVector(SpHexagonRectCornerRadius, m_CornerRadius);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         
 
-         private static readonly int SpHexagonTipSizes = Shader.PropertyToID("_HexagonTipSize");
 
-         private static readonly int SpHexagonTipRadius = Shader.PropertyToID("_HexagonTipRadius");
 
-         private static readonly int SpHexagonRectCornerRadius = Shader.PropertyToID("_HexagonCornerRadius");
 
-         public Material SharedMat { get; set; }
 
-         public bool ShouldModifySharedMat { get; set; }
 
-         public RectTransform RectTransform { get; set; }
 
-         
 
-         public void Init(Material sharedMat, Material renderMat, RectTransform rectTransform) {
 
-             SharedMat = sharedMat;
 
-             ShouldModifySharedMat = sharedMat == renderMat;
 
-             RectTransform = rectTransform;
 
-             TipRadius = m_TipRadius;
 
-             TipSize = m_TipSize;
 
-         }
 
-         public event EventHandler OnComponentSettingsChanged;
 
-         public void OnValidate() {
 
-             CornerRadius = m_CornerRadius;
 
-             TipSize = m_TipSize;
 
-             TipRadius = m_TipRadius;
 
-         }
 
-         public void InitValuesFromMaterial(ref Material material) {
 
-             m_CornerRadius = material.GetVector(SpHexagonRectCornerRadius);
 
-             m_TipRadius = material.GetVector(SpHexagonTipRadius);
 
-             m_TipSize = material.GetVector(SpHexagonTipSizes);
 
-         }
 
-         public void ModifyMaterial(ref Material material, params object[] otherProperties) {
 
-             material.SetVector(SpHexagonTipSizes, m_TipSize);
 
-             material.SetVector(SpHexagonTipRadius, m_TipRadius);
 
-             material.SetVector(SpHexagonRectCornerRadius, m_CornerRadius);
 
-         }
 
-     }
 
- }
 
 
  |