| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- using System;
 
- using UnityEngine;
 
- namespace MPUIKIT {
 
-     /// <summary>
 
-     /// N-star polygon shape is equal sided uniform polygon shape with the ability to morph
 
-     /// to a star corresponding to the original shape. ie: an equilateral pentagon will morph
 
-     /// to a five sided star.
 
-     /// </summary>
 
-     [Serializable]
 
-     public struct NStarPolygon: IMPUIComponent {
 
-         [SerializeField] private float m_SideCount;
 
-         [SerializeField] private float m_Inset;
 
-         [SerializeField] private float m_CornerRadius;
 
-         [SerializeField] private Vector2 m_Offset;
 
-         
 
-         /// <summary>
 
-         /// How many sides should there be in the shape. These sides are equal is size.
 
-         /// 3 sides create an equilateral triangle, 6 sides create a hexagon and so on
 
-         /// <para>Value of SideCount should remain between 3 and 10.</para>
 
-         /// </summary>
 
-         public float SideCount {
 
-             get => m_SideCount;
 
-             set {
 
-                 m_SideCount = Mathf.Clamp(value, 3f, 10f);
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetFloat(SpNStarPolygonSideCount, m_SideCount);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-                 Inset = m_Inset;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Inset is the value that determine how much should the sides go inside the shape
 
-         /// and create a concave star shape. Each sides will break into half and their middle
 
-         /// point will go towards the center of the shape
 
-         /// <para>Value of inset should remain between 2 and (SideCount - 0.01). 2 is default
 
-         /// and means no breaking of the sides. </para>
 
-         /// </summary>
 
-         public float Inset {
 
-             get => m_Inset;
 
-             set {
 
-                 m_Inset = Mathf.Clamp(value, 2f, SideCount - 0.01f);
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetFloat(SpNStarPolygonInset, m_Inset);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Corner Radius of all the corners of the shape.
 
-         /// </summary>
 
-         public float CornerRadius {
 
-             get => m_CornerRadius;
 
-             set {
 
-                 m_CornerRadius = Mathf.Max(value, 0);
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetFloat(SpNStarPolygonCornerRadius, m_CornerRadius);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Position offset of the shape from the origin.
 
-         /// </summary>
 
-         public Vector2 Offset {
 
-             get => m_Offset;
 
-             set {
 
-                 m_Offset = value;
 
-                 if (ShouldModifySharedMat) {
 
-                     SharedMat.SetVector(SpNStarPolygonOffset, m_Offset);
 
-                 }
 
-                 OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
 
-             }
 
-         }
 
-         
 
-         private static readonly int SpNStarPolygonSideCount = Shader.PropertyToID("_NStarPolygonSideCount");
 
-         private static readonly int SpNStarPolygonInset = Shader.PropertyToID("_NStarPolygonInset");
 
-         private static readonly int SpNStarPolygonCornerRadius = Shader.PropertyToID("_NStarPolygonCornerRadius");
 
-         private static readonly int SpNStarPolygonOffset = Shader.PropertyToID("_NStarPolygonOffset");
 
-         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;
 
-             
 
-             OnValidate();
 
-         }
 
-         public event EventHandler OnComponentSettingsChanged;
 
-         public void OnValidate() {
 
-             SideCount = m_SideCount;
 
-             Inset = m_Inset;
 
-             CornerRadius = m_CornerRadius;
 
-             Offset = m_Offset;
 
-         }
 
-         public void InitValuesFromMaterial(ref Material material) {
 
-             m_SideCount = material.GetFloat(SpNStarPolygonSideCount);
 
-             m_Inset = material.GetFloat(SpNStarPolygonInset);
 
-             m_CornerRadius = material.GetFloat(SpNStarPolygonCornerRadius);
 
-             m_Offset = material.GetVector(SpNStarPolygonOffset);
 
-         }
 
-         public void ModifyMaterial(ref Material material, params object[] otherProperties) {
 
-             material.SetFloat(SpNStarPolygonSideCount, m_SideCount);
 
-             material.SetFloat(SpNStarPolygonInset, m_Inset);
 
-             material.SetFloat(SpNStarPolygonCornerRadius, m_CornerRadius);
 
-             material.SetVector(SpNStarPolygonOffset, m_Offset);
 
-         }
 
-     }
 
- }
 
 
  |