diff --git a/Runtime/Scripts/Controls/Accordion/AccordionElement.cs b/Runtime/Scripts/Controls/Accordion/AccordionElement.cs index deae701..de2a8de 100644 --- a/Runtime/Scripts/Controls/Accordion/AccordionElement.cs +++ b/Runtime/Scripts/Controls/Accordion/AccordionElement.cs @@ -2,217 +2,225 @@ ///Sourced from - http://forum.unity3d.com/threads/accordion-type-layout.271818/ using System; +using System.Collections; using UnityEngine.UI.Extensions.Tweens; namespace UnityEngine.UI.Extensions { [RequireComponent(typeof(RectTransform), typeof(LayoutElement))] - [AddComponentMenu("UI/Extensions/Accordion/Accordion Element")] - public class AccordionElement : Toggle - { + [AddComponentMenu("UI/Extensions/Accordion/Accordion Element")] + public class AccordionElement : Toggle + { - [SerializeField] private float m_MinHeight = 18f; + [SerializeField] private float m_MinHeight = 18f; - public float MinHeight => m_MinHeight; + public float MinHeight => m_MinHeight; - [SerializeField] private float m_MinWidth = 40f; + [SerializeField] private float m_MinWidth = 40f; - public float MinWidth => m_MinWidth; + public float MinWidth => m_MinWidth; - private Accordion m_Accordion; - private RectTransform m_RectTransform; - private LayoutElement m_LayoutElement; - - [NonSerialized] - private readonly TweenRunner m_FloatTweenRunner; - - protected AccordionElement() - { - if (this.m_FloatTweenRunner == null) - this.m_FloatTweenRunner = new TweenRunner(); - - this.m_FloatTweenRunner.Init(this); - } - - protected override void Awake() - { - base.Awake(); - base.transition = Transition.None; - base.toggleTransition = ToggleTransition.None; - this.m_Accordion = this.gameObject.GetComponentInParent(); - this.m_RectTransform = this.transform as RectTransform; - this.m_LayoutElement = this.gameObject.GetComponent(); - this.onValueChanged.AddListener(OnValueChanged); - } + private Accordion m_Accordion; + private RectTransform m_RectTransform; + private LayoutElement m_LayoutElement; + + [NonSerialized] + private readonly TweenRunner m_FloatTweenRunner; + + protected AccordionElement() + { + if (this.m_FloatTweenRunner == null) + this.m_FloatTweenRunner = new TweenRunner(); + + this.m_FloatTweenRunner.Init(this); + } + + protected override void Awake() + { + base.Awake(); + base.transition = Transition.None; + base.toggleTransition = ToggleTransition.None; + this.m_Accordion = this.gameObject.GetComponentInParent(); + this.m_RectTransform = this.transform as RectTransform; + this.m_LayoutElement = this.gameObject.GetComponent(); + this.onValueChanged.AddListener(OnValueChanged); + } + + private new IEnumerator Start() + { + base.Start(); + yield return new WaitForEndOfFrame(); // Wait for the first frame + OnValueChanged(this.isOn); + } #if UNITY_EDITOR - protected override void OnValidate() - { - base.OnValidate(); - this.m_Accordion = this.gameObject.GetComponentInParent(); + protected override void OnValidate() + { + base.OnValidate(); + this.m_Accordion = this.gameObject.GetComponentInParent(); - if (this.group == null) - { - ToggleGroup tg = this.GetComponentInParent(); - - if (tg != null) - { - this.group = tg; - } - } - - LayoutElement le = this.gameObject.GetComponent(); + if (this.group == null) + { + ToggleGroup tg = this.GetComponentInParent(); - if (le != null && m_Accordion != null) - { - if (this.isOn) - { + if (tg != null) + { + this.group = tg; + } + } + + LayoutElement le = this.gameObject.GetComponent(); + + if (le != null && m_Accordion != null) + { + if (this.isOn) + { if (m_Accordion.ExpandVerticval) { - le.preferredHeight = -1f; - } - else - { - le.preferredWidth = -1f; + le.preferredHeight = -1f; } - } - else - { - if (m_Accordion.ExpandVerticval) - { - le.preferredHeight = this.m_MinHeight; - } else { - le.preferredWidth = this.m_MinWidth; + le.preferredWidth = -1f; + } + } + else + { + if (m_Accordion.ExpandVerticval) + { + le.preferredHeight = this.m_MinHeight; + } + else + { + le.preferredWidth = this.m_MinWidth; - } - } - } - } + } + } + } + } #endif - public void OnValueChanged(bool state) - { - if (this.m_LayoutElement == null) - return; - - Accordion.Transition transition = (this.m_Accordion != null) ? this.m_Accordion.transition : Accordion.Transition.Instant; + public void OnValueChanged(bool state) + { + if (this.m_LayoutElement == null) + return; - if (transition == Accordion.Transition.Instant && m_Accordion != null) - { - if (state) - { - if (m_Accordion.ExpandVerticval) - { - this.m_LayoutElement.preferredHeight = -1f; - } + Accordion.Transition transition = (this.m_Accordion != null) ? this.m_Accordion.transition : Accordion.Transition.Instant; + + if (transition == Accordion.Transition.Instant && m_Accordion != null) + { + if (state) + { + if (m_Accordion.ExpandVerticval) + { + this.m_LayoutElement.preferredHeight = -1f; + } else { - this.m_LayoutElement.preferredWidth = -1f; - } - } - else - { - if (m_Accordion.ExpandVerticval) - { - this.m_LayoutElement.preferredHeight = this.m_MinHeight; - } + this.m_LayoutElement.preferredWidth = -1f; + } + } + else + { + if (m_Accordion.ExpandVerticval) + { + this.m_LayoutElement.preferredHeight = this.m_MinHeight; + } else { - this.m_LayoutElement.preferredWidth = this.m_MinWidth; - } - } - } - else if (transition == Accordion.Transition.Tween) - { - if (state) - { - if (m_Accordion.ExpandVerticval) - { - this.StartTween(this.m_MinHeight, this.GetExpandedHeight()); - } + this.m_LayoutElement.preferredWidth = this.m_MinWidth; + } + } + } + else if (transition == Accordion.Transition.Tween) + { + if (state) + { + if (m_Accordion.ExpandVerticval) + { + this.StartTween(this.m_MinHeight, this.GetExpandedHeight()); + } else { - this.StartTween(this.m_MinWidth, this.GetExpandedWidth()); - } - } - else - { - if (m_Accordion.ExpandVerticval) - { - this.StartTween(this.m_RectTransform.rect.height, this.m_MinHeight); - } + this.StartTween(this.m_MinWidth, this.GetExpandedWidth()); + } + } + else + { + if (m_Accordion.ExpandVerticval) + { + this.StartTween(this.m_RectTransform.rect.height, this.m_MinHeight); + } else { - this.StartTween(this.m_RectTransform.rect.width, this.m_MinWidth); - } - } - } - } - - protected float GetExpandedHeight() - { - if (this.m_LayoutElement == null) - return this.m_MinHeight; - - float originalPrefH = this.m_LayoutElement.preferredHeight; - this.m_LayoutElement.preferredHeight = -1f; - float h = LayoutUtility.GetPreferredHeight(this.m_RectTransform); - this.m_LayoutElement.preferredHeight = originalPrefH; - - return h; - } + this.StartTween(this.m_RectTransform.rect.width, this.m_MinWidth); + } + } + } + } - protected float GetExpandedWidth() - { - if (this.m_LayoutElement == null) - return this.m_MinWidth; + protected float GetExpandedHeight() + { + if (this.m_LayoutElement == null) + return this.m_MinHeight; - float originalPrefW = this.m_LayoutElement.preferredWidth; - this.m_LayoutElement.preferredWidth = -1f; - float w = LayoutUtility.GetPreferredWidth(this.m_RectTransform); - this.m_LayoutElement.preferredWidth = originalPrefW; + float originalPrefH = this.m_LayoutElement.preferredHeight; + this.m_LayoutElement.preferredHeight = -1f; + float h = LayoutUtility.GetPreferredHeight(this.m_RectTransform); + this.m_LayoutElement.preferredHeight = originalPrefH; - return w; - } + return h; + } - protected void StartTween(float startFloat, float targetFloat) - { - float duration = (this.m_Accordion != null) ? this.m_Accordion.transitionDuration : 0.3f; - - FloatTween info = new FloatTween - { - duration = duration, - startFloat = startFloat, - targetFloat = targetFloat - }; - if (m_Accordion.ExpandVerticval) - { - info.AddOnChangedCallback(SetHeight); - } + protected float GetExpandedWidth() + { + if (this.m_LayoutElement == null) + return this.m_MinWidth; + + float originalPrefW = this.m_LayoutElement.preferredWidth; + this.m_LayoutElement.preferredWidth = -1f; + float w = LayoutUtility.GetPreferredWidth(this.m_RectTransform); + this.m_LayoutElement.preferredWidth = originalPrefW; + + return w; + } + + protected void StartTween(float startFloat, float targetFloat) + { + float duration = (this.m_Accordion != null) ? this.m_Accordion.transitionDuration : 0.3f; + + FloatTween info = new FloatTween + { + duration = duration, + startFloat = startFloat, + targetFloat = targetFloat + }; + if (m_Accordion.ExpandVerticval) + { + info.AddOnChangedCallback(SetHeight); + } else { - info.AddOnChangedCallback(SetWidth); - } - info.ignoreTimeScale = true; - this.m_FloatTweenRunner.StartTween(info); - } - - protected void SetHeight(float height) - { - if (this.m_LayoutElement == null) - return; - - this.m_LayoutElement.preferredHeight = height; - } + info.AddOnChangedCallback(SetWidth); + } + info.ignoreTimeScale = true; + this.m_FloatTweenRunner.StartTween(info); + } - protected void SetWidth(float width) - { - if (this.m_LayoutElement == null) - return; + protected void SetHeight(float height) + { + if (this.m_LayoutElement == null) + return; - this.m_LayoutElement.preferredWidth = width; - } - } + this.m_LayoutElement.preferredHeight = height; + } + + protected void SetWidth(float width) + { + if (this.m_LayoutElement == null) + return; + + this.m_LayoutElement.preferredWidth = width; + } + } } \ No newline at end of file diff --git a/Runtime/Scripts/Controls/ComboBox/AutoCompleteComboBox.cs b/Runtime/Scripts/Controls/ComboBox/AutoCompleteComboBox.cs index f329b97..684c323 100644 --- a/Runtime/Scripts/Controls/ComboBox/AutoCompleteComboBox.cs +++ b/Runtime/Scripts/Controls/ComboBox/AutoCompleteComboBox.cs @@ -1,7 +1,6 @@ ///Credit perchik ///Sourced from - http://forum.unity3d.com/threads/receive-onclick-event-and-pass-it-on-to-lower-ui-elements.293642/ -using System; using System.Collections.Generic; using System.Linq; @@ -132,6 +131,9 @@ namespace UnityEngine.UI.Extensions [System.Serializable] public class SelectionValidityChangedEvent : Events.UnityEvent { } + [System.Serializable] + public class ItemSelectedEvent : Events.UnityEvent { } + [System.Serializable] public class ControlDisabledEvent : Events.UnityEvent { } @@ -142,6 +144,8 @@ namespace UnityEngine.UI.Extensions public SelectionValidityChangedEvent OnSelectionValidityChanged; // fires in both cases public SelectionChangedEvent OnSelectionChanged; + // fires when an item is clicked + public ItemSelectedEvent OnItemSelected; // fires when item is changed; public ControlDisabledEvent OnControlDisabled; @@ -359,10 +363,10 @@ namespace UnityEngine.UI.Extensions /// private void OnItemClicked(string item) { - //Debug.Log("item " + item + " clicked"); Text = item; _mainInput.text = Text; ToggleDropdownPanel(true); + OnItemSelected?.Invoke(Text); } private void RedrawPanel() diff --git a/Runtime/Scripts/Effects/BestFitOutline.cs b/Runtime/Scripts/Effects/BestFitOutline.cs index ad1b530..1e5a6de 100644 --- a/Runtime/Scripts/Effects/BestFitOutline.cs +++ b/Runtime/Scripts/Effects/BestFitOutline.cs @@ -2,10 +2,19 @@ /// Sourced from - http://forum.unity3d.com/members/melang.593409/ /// NOT supported in Unity 2022 +using System; #if !UNITY_2022_1_OR_NEWER using System.Collections.Generic; +#endif + namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("BestFitOutline is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class BestFitOutline : Shadow + { + } +#else [AddComponentMenu("UI/Effects/Extensions/BestFit Outline")] public class BestFitOutline : Shadow { @@ -61,5 +70,5 @@ namespace UnityEngine.UI.Extensions } } } -} -#endif \ No newline at end of file +#endif + } \ No newline at end of file diff --git a/Runtime/Scripts/Effects/CurvedText.cs b/Runtime/Scripts/Effects/CurvedText.cs index 1f69c7e..ef27a41 100644 --- a/Runtime/Scripts/Effects/CurvedText.cs +++ b/Runtime/Scripts/Effects/CurvedText.cs @@ -1,9 +1,17 @@ -/// Credit Breyer -/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407 -#if !UNITY_2022_1_OR_NEWER + +using System; namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("CurvedText is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class CurvedText : BaseMeshEffect + { + public override void ModifyMesh(VertexHelper vh) + { + } + } +#else [RequireComponent(typeof(Text))] [RequireComponent(typeof(RectTransform))] [AddComponentMenu("UI/Effects/Extensions/Curved Text")] @@ -83,5 +91,5 @@ namespace UnityEngine.UI.Extensions } } } -} -#endif \ No newline at end of file +#endif +} \ No newline at end of file diff --git a/Runtime/Scripts/Effects/CylinderText.cs b/Runtime/Scripts/Effects/CylinderText.cs index 089721b..cdd592e 100644 --- a/Runtime/Scripts/Effects/CylinderText.cs +++ b/Runtime/Scripts/Effects/CylinderText.cs @@ -1,10 +1,20 @@ -/// adaption for cylindrical bending by herbst + +using System; + +/// adaption for cylindrical bending by herbst /// Credit Breyer /// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1777407 -#if !UNITY_2022_1_OR_NEWER - namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("CylinderText is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class CylinderText : BaseMeshEffect + { + public override void ModifyMesh(VertexHelper vh) + { + } + } +#else [RequireComponent(typeof(Text))] [RequireComponent(typeof(RectTransform))] [AddComponentMenu("UI/Effects/Extensions/Cylinder Text")] @@ -53,5 +63,5 @@ namespace UnityEngine.UI.Extensions } } } -} -#endif \ No newline at end of file +#endif +} \ No newline at end of file diff --git a/Runtime/Scripts/Effects/LetterSpacing.cs b/Runtime/Scripts/Effects/LetterSpacing.cs index 8b3b14e..ce5e2b2 100644 --- a/Runtime/Scripts/Effects/LetterSpacing.cs +++ b/Runtime/Scripts/Effects/LetterSpacing.cs @@ -1,6 +1,4 @@ -/// Credit Deeperbeige -/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/ -/* +/* Produces an simple tracking/letter-spacing effect on UI Text components. @@ -42,9 +40,23 @@ break down entirely, but it doesn't really do what you'd want either. */ #if !UNITY_2022_1_OR_NEWER using System.Collections.Generic; +#endif +using System; + +/// Credit Deeperbeige +/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/ namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("LetterSpacing is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class LetterSpacing : BaseMeshEffect + { + public override void ModifyMesh(VertexHelper vh) + { + } + } +#else [AddComponentMenu("UI/Effects/Extensions/Letter Spacing")] ///Summary /// Note, Vertex Count has changed in 5.2.1+, is now 6 (two tris) instead of 4 (tri strip). @@ -55,13 +67,13 @@ namespace UnityEngine.UI.Extensions protected LetterSpacing() { } - #if UNITY_EDITOR +#if UNITY_EDITOR protected override void OnValidate() { spacing = m_spacing; base.OnValidate(); } - #endif +#endif public float spacing { @@ -171,5 +183,5 @@ namespace UnityEngine.UI.Extensions vh.AddUIVertexTriangleStream(verts); } } -} -#endif \ No newline at end of file +#endif +} \ No newline at end of file diff --git a/Runtime/Scripts/Effects/MonoSpacing.cs b/Runtime/Scripts/Effects/MonoSpacing.cs index 66877dd..ab70127 100644 --- a/Runtime/Scripts/Effects/MonoSpacing.cs +++ b/Runtime/Scripts/Effects/MonoSpacing.cs @@ -1,5 +1,3 @@ -/// Credit herbst / derived from LetterSpacing by Deeperbeige -/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/ /* Produces an simple mono-spacing effect on UI Text components. @@ -41,11 +39,24 @@ break down entirely, but it doesn't really do what you'd want either. */ #if !UNITY_2022_1_OR_NEWER - using System.Collections.Generic; +#endif +using System; + +/// Credit herbst / derived from LetterSpacing by Deeperbeige +/// Sourced from - http://forum.unity3d.com/threads/adjustable-character-spacing-free-script.288277/ namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("MonoSpacing is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class MonoSpacing : BaseMeshEffect + { + public override void ModifyMesh(VertexHelper vh) + { + } + } +#else [AddComponentMenu("UI/Effects/Extensions/Mono Spacing")] [RequireComponent(typeof(Text))] [RequireComponent(typeof(RectTransform))] @@ -76,13 +87,13 @@ namespace UnityEngine.UI.Extensions rectTransform = text.GetComponent(); } - #if UNITY_EDITOR +#if UNITY_EDITOR protected override void OnValidate() { Spacing = m_spacing; base.OnValidate(); } - #endif +#endif public float Spacing { @@ -190,5 +201,5 @@ namespace UnityEngine.UI.Extensions vh.AddUIVertexTriangleStream(verts); } } -} -#endif \ No newline at end of file +#endif + } \ No newline at end of file diff --git a/Runtime/Scripts/Effects/NicerOutline.cs b/Runtime/Scripts/Effects/NicerOutline.cs index 602e5ee..8c0d1c8 100644 --- a/Runtime/Scripts/Effects/NicerOutline.cs +++ b/Runtime/Scripts/Effects/NicerOutline.cs @@ -1,12 +1,25 @@ + +#if !UNITY_2022_1_OR_NEWER +using System.Collections.Generic; +#endif + +using System; + /// Credit Melang, Lee Hui /// Sourced from - http://forum.unity3d.com/members/melang.593409/ /// GC Alloc fix - https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/pull-requests/130 /// NOT supported in Unity 2022 - -#if !UNITY_2022_1_OR_NEWER -using System.Collections.Generic; namespace UnityEngine.UI.Extensions { +#if UNITY_2022_1_OR_NEWER + [Obsolete("BestFitOutline is not supported in Unity 2022.1 or newer. Use TMPro instead.")] + public class NicerOutline : BaseMeshEffect + { + public override void ModifyMesh(VertexHelper vh) + { + } + } +#else //An outline that looks a bit nicer than the default one. It has less "holes" in the outline by drawing more copies of the effect [AddComponentMenu("UI/Effects/Extensions/Nicer Outline")] public class NicerOutline : BaseMeshEffect @@ -194,5 +207,5 @@ namespace UnityEngine.UI.Extensions } #endif } -} -#endif \ No newline at end of file +#endif + } \ No newline at end of file diff --git a/Runtime/Scripts/Layout/HorizontalScrollSnap.cs b/Runtime/Scripts/Layout/HorizontalScrollSnap.cs index 846d2a3..59877a0 100644 --- a/Runtime/Scripts/Layout/HorizontalScrollSnap.cs +++ b/Runtime/Scripts/Layout/HorizontalScrollSnap.cs @@ -223,12 +223,21 @@ namespace UnityEngine.UI.Extensions /// /// used for changing / updating between screen resolutions /// - public void UpdateLayout() + public void UpdateLayout(bool resetPositionToStart = false) { _lerp = false; DistributePages(); + + if (resetPositionToStart) + { + _currentPage = StartingScreen; + } + if (MaskArea) + { UpdateVisible(); + } + SetScrollContainerPosition(); OnCurrentScreenChange(_currentPage); } diff --git a/Runtime/Scripts/Layout/VerticalScrollSnap.cs b/Runtime/Scripts/Layout/VerticalScrollSnap.cs index 8690856..4642241 100644 --- a/Runtime/Scripts/Layout/VerticalScrollSnap.cs +++ b/Runtime/Scripts/Layout/VerticalScrollSnap.cs @@ -218,11 +218,21 @@ namespace UnityEngine.UI.Extensions /// /// used for changing / updating between screen resolutions /// - public void UpdateLayout() + public void UpdateLayout(bool resetPositionToStart = false) { _lerp = false; DistributePages(); - if (MaskArea) UpdateVisible(); + + if (resetPositionToStart) + { + _currentPage = StartingScreen; + } + + if (MaskArea) + { + UpdateVisible(); + } + SetScrollContainerPosition(); OnCurrentScreenChange(_currentPage); }