Triangle.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using UnityEngine;
  3. namespace MPUIKIT {
  4. /// <summary>
  5. /// Isosceles triangle where two sides of the triangle are equal. Width and height of the shape is
  6. /// the same as the rect-transform
  7. /// </summary>
  8. [Serializable]
  9. public struct Triangle : IMPUIComponent {
  10. [SerializeField] private Vector3 m_CornerRadius;
  11. #if UNITY_EDITOR
  12. [SerializeField] private bool m_UniformCornerRadius;
  13. #endif
  14. /// <summary>
  15. /// <para>Radius of the three corners. Counter-Clockwise from bottom-left</para>
  16. /// <para>x => bottom-left, y => bottom-right</para>
  17. /// <para>z => top</para>
  18. /// </summary>
  19. public Vector3 CornerRadius {
  20. get => m_CornerRadius;
  21. set {
  22. m_CornerRadius = Vector3.Max(value, Vector3.zero);
  23. if (ShouldModifySharedMat) {
  24. SharedMat.SetVector(SpTriangleCornerRadius, m_CornerRadius);
  25. }
  26. OnComponentSettingsChanged?.Invoke(this, EventArgs.Empty);
  27. }
  28. }
  29. private static readonly int SpTriangleCornerRadius = Shader.PropertyToID("_TriangleCornerRadius");
  30. public Material SharedMat { get; set; }
  31. public bool ShouldModifySharedMat { get; set; }
  32. public RectTransform RectTransform { get; set; }
  33. public void Init(Material sharedMat, Material renderMat, RectTransform rectTransform) {
  34. this.SharedMat = sharedMat;
  35. this.ShouldModifySharedMat = sharedMat == renderMat;
  36. this.RectTransform = rectTransform;
  37. }
  38. public event EventHandler OnComponentSettingsChanged;
  39. public void OnValidate() {
  40. CornerRadius = m_CornerRadius;
  41. }
  42. public void InitValuesFromMaterial(ref Material material) {
  43. m_CornerRadius = material.GetVector(SpTriangleCornerRadius);
  44. }
  45. public void ModifyMaterial(ref Material material, params object[] otherProperties) {
  46. material.SetVector(SpTriangleCornerRadius, m_CornerRadius);
  47. }
  48. }
  49. }