BetterLocator.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. #pragma warning disable 0649 // disable "never assigned" warnings
  7. namespace TheraBytes.BetterUi
  8. {
  9. #if UNITY_2018_3_OR_NEWER
  10. [ExecuteAlways]
  11. #else
  12. [ExecuteInEditMode]
  13. #endif
  14. [HelpURL("https://documentation.therabytes.de/better-ui/BetterLocator.html")]
  15. [DisallowMultipleComponent]
  16. [RequireComponent(typeof(RectTransform))]
  17. [AddComponentMenu("Better UI/Layout/Better Locator", 30)]
  18. public class BetterLocator : MonoBehaviour, IResolutionDependency
  19. {
  20. [Serializable]
  21. public class RectTransformDataConfigCollection : SizeConfigCollection<RectTransformData> { }
  22. [SerializeField]
  23. RectTransformData transformFallback;
  24. [SerializeField]
  25. RectTransformDataConfigCollection transformConfigs = new RectTransformDataConfigCollection();
  26. public RectTransformData CurrentTransformData { get { return transformConfigs.GetCurrentItem(transformFallback); } }
  27. RectTransform rectTransform { get { return this.transform as RectTransform; } }
  28. void OnEnable()
  29. {
  30. if (transformFallback == null) // happens when added in editor during play mode
  31. {
  32. InitTransformFallback();
  33. }
  34. CurrentTransformData.PushToTransform(rectTransform);
  35. }
  36. public void OnResolutionChanged()
  37. {
  38. CurrentTransformData.PushToTransform(rectTransform);
  39. }
  40. #if UNITY_EDITOR
  41. public void OnValidate()
  42. {
  43. bool isUnInitialized = transformFallback == null
  44. || (transformConfigs.Items.Count == 0
  45. && transformFallback.Scale == Vector3.zero
  46. && transformFallback.Rotation.eulerAngles == Vector3.zero
  47. && transformFallback.AnchoredPosition == Vector2.zero
  48. && transformFallback.AnchorMin == Vector2.zero
  49. && transformFallback.AnchorMax == Vector2.zero
  50. && transformFallback.Pivot == Vector2.zero
  51. && transformFallback.SizeDelta == Vector2.zero
  52. && transformFallback.LocalPosition == Vector3.zero);
  53. if (isUnInitialized)
  54. {
  55. InitTransformFallback();
  56. }
  57. }
  58. #endif
  59. void InitTransformFallback()
  60. {
  61. if (transformFallback == null)
  62. {
  63. transformFallback = new RectTransformData();
  64. }
  65. transformFallback.PullFromTransform(rectTransform);
  66. }
  67. }
  68. }