SizeDeltaSizer.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. using UnityEngine.Serialization;
  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/SizeDeltaSizer.html")]
  15. [RequireComponent(typeof(RectTransform))]
  16. [AddComponentMenu("Better UI/Layout/Size Delta Sizer", 30)]
  17. public class SizeDeltaSizer : ResolutionSizer<Vector2>
  18. {
  19. [Serializable]
  20. public class Settings : IScreenConfigConnection
  21. {
  22. public bool ApplyWidth { get { return applyWidth; } set { applyWidth = value; } }
  23. public bool ApplyHeight { get { return applyHeight; } set { applyHeight = value; } }
  24. [SerializeField]
  25. bool applyWidth, applyHeight;
  26. [SerializeField]
  27. string screenConfigName;
  28. public string ScreenConfigName { get { return screenConfigName; } set { screenConfigName = value; } }
  29. }
  30. [Serializable]
  31. public class SettingsConfigCollection : SizeConfigCollection<Settings> { }
  32. public Settings CurrentSettings { get { return customSettings.GetCurrentItem(settingsFallback); } }
  33. [SerializeField]
  34. Settings settingsFallback = new Settings();
  35. [SerializeField]
  36. SettingsConfigCollection customSettings = new SettingsConfigCollection();
  37. public Vector2SizeModifier DeltaSizer { get { return customDeltaSizers.GetCurrentItem(deltaSizerFallback); } }
  38. protected override ScreenDependentSize<Vector2> sizer { get { return customDeltaSizers.GetCurrentItem(deltaSizerFallback); } }
  39. [SerializeField]
  40. Vector2SizeModifier deltaSizerFallback = new Vector2SizeModifier(100 * Vector2.one, Vector2.zero, 1000 * Vector2.one);
  41. [SerializeField]
  42. Vector2SizeConfigCollection customDeltaSizers = new Vector2SizeConfigCollection();
  43. DrivenRectTransformTracker rectTransformTracker = new DrivenRectTransformTracker();
  44. protected override void OnDisable()
  45. {
  46. base.OnDisable();
  47. rectTransformTracker.Clear();
  48. }
  49. protected override void ApplySize(Vector2 newSize)
  50. {
  51. RectTransform rt = (this.transform as RectTransform);
  52. Vector2 size = rt.sizeDelta;
  53. Settings settings = CurrentSettings;
  54. rectTransformTracker.Clear();
  55. if(settings.ApplyWidth)
  56. {
  57. size.x = newSize.x;
  58. rectTransformTracker.Add(this, this.transform as RectTransform, DrivenTransformProperties.SizeDeltaX);
  59. }
  60. if (settings.ApplyHeight)
  61. {
  62. size.y = newSize.y;
  63. rectTransformTracker.Add(this, this.transform as RectTransform, DrivenTransformProperties.SizeDeltaY);
  64. }
  65. rt.sizeDelta = size;
  66. }
  67. }
  68. }