5using System.Collections;
11 [AddComponentMenu(
"UI/Extensions/Segmented Control/Segment")]
12 [RequireComponent(typeof(Selectable))]
17 IPointerEnterHandler, IPointerExitHandler,
18 IPointerDownHandler, IPointerUpHandler,
19 ISelectHandler, IDeselectHandler
24 internal bool leftmost
26 get {
return index == 0; }
28 internal bool rightmost
30 get {
return index == segmentedControl.
segments.Length - 1; }
35 get {
return segmentedControl.selectedSegment == this.button; }
36 set { SetSelected(value); }
39 internal Selectable button
41 get {
return GetComponent<Selectable>(); }
44 internal Sprite cutSprite;
51 StartCoroutine(DelayedInit());
54 IEnumerator DelayedInit()
59 button.image.overrideSprite = cutSprite;
66 if (eventData.button != PointerEventData.InputButton.Left)
92 public virtual void OnSelect(BaseEventData eventData)
105 if (segmentedControl)
109 public virtual void OnSubmit(BaseEventData eventData)
114 private void SetSelected(
bool value)
116 if (value && button.IsActive() && button.IsInteractable())
118 if (segmentedControl.selectedSegment ==
this.button)
131 if (segmentedControl.selectedSegment)
133 var segment = segmentedControl.selectedSegment.GetComponent<
Segment>();
134 segmentedControl.selectedSegment =
null;
137 segment.TransitionButton();
141 segmentedControl.selectedSegment = this.button;
146 else if (segmentedControl.selectedSegment ==
this.button)
152 private void Deselect()
154 segmentedControl.selectedSegment =
null;
159 void MaintainSelection()
161 if (button != segmentedControl.selectedSegment)
164 TransitionButton(
true);
167 internal void TransitionButton()
169 TransitionButton(
false);
172 internal void TransitionButton(
bool instant)
174 Color tintColor =
selected ? button.colors.pressedColor : button.colors.normalColor;
175 Color textColor =
selected ? button.colors.normalColor : button.colors.pressedColor;
176 Sprite transitionSprite =
selected ? button.spriteState.pressedSprite : cutSprite;
177 string triggerName =
selected ? button.animationTriggers.pressedTrigger : button.animationTriggers.normalTrigger;
179 switch (button.transition)
181 case Selectable.Transition.ColorTint:
182 button.image.overrideSprite = cutSprite;
183 StartColorTween(tintColor * button.colors.colorMultiplier, instant);
184 ChangeTextColor(textColor * button.colors.colorMultiplier);
186 case Selectable.Transition.SpriteSwap:
187 if (transitionSprite != cutSprite)
188 transitionSprite = SegmentedControl.CutSprite(transitionSprite, leftmost, rightmost);
189 DoSpriteSwap(transitionSprite);
191 case Selectable.Transition.Animation:
192 button.image.overrideSprite = cutSprite;
193 TriggerAnimation(triggerName);
198 void StartColorTween(
Color targetColor,
bool instant)
200 if (button.targetGraphic ==
null)
203 button.targetGraphic.CrossFadeColor(targetColor, instant ? 0f : button.colors.fadeDuration,
true,
true);
206 void ChangeTextColor(
Color targetColor)
208 var text = GetComponentInChildren<Text>();
212 text.color = targetColor;
215 void DoSpriteSwap(Sprite newSprite)
217 if (button.image ==
null)
220 button.image.overrideSprite = newSprite;
223 void TriggerAnimation(
string triggername)
225 if (button.animator ==
null || !button.animator.isActiveAndEnabled || !button.animator.hasBoundPlayables ||
string.IsNullOrEmpty(triggername))
228 button.animator.ResetTrigger(button.animationTriggers.normalTrigger);
229 button.animator.ResetTrigger(button.animationTriggers.pressedTrigger);
230 button.animator.ResetTrigger(button.animationTriggers.highlightedTrigger);
231 button.animator.ResetTrigger(button.animationTriggers.disabledTrigger);
233 button.animator.SetTrigger(triggername);
virtual void OnPointerClick(PointerEventData eventData)
virtual void OnDeselect(BaseEventData eventData)
virtual void OnSelect(BaseEventData eventData)
virtual void OnSubmit(BaseEventData eventData)
virtual void OnPointerExit(PointerEventData eventData)
virtual void OnPointerDown(PointerEventData eventData)
virtual void OnPointerEnter(PointerEventData eventData)
virtual void OnPointerUp(PointerEventData eventData)
SegmentSelectedEvent onValueChanged
Credit Erdener Gonenc - @PixelEnvision.