BetterToggle.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. namespace TheraBytes.BetterUi
  8. {
  9. [HelpURL("https://documentation.therabytes.de/better-ui/BetterToggle.html")]
  10. [AddComponentMenu("Better UI/Controls/Better Toggle", 30)]
  11. public class BetterToggle : Toggle, IBetterTransitionUiElement
  12. {
  13. public List<Transitions> BetterTransitions { get { return betterTransitions; } }
  14. public List<Transitions> BetterTransitionsWhenOn { get { return betterTransitionsWhenOn; } }
  15. public List<Transitions> BetterTransitionsWhenOff { get { return betterTransitionsWhenOff; } }
  16. public List<Transitions> BetterToggleTransitions { get { return betterToggleTransitions; } }
  17. [SerializeField, DefaultTransitionStates]
  18. List<Transitions> betterTransitions = new List<Transitions>();
  19. [SerializeField, TransitionStates("On", "Off")]
  20. List<Transitions> betterToggleTransitions = new List<Transitions>();
  21. [SerializeField, DefaultTransitionStates]
  22. List<Transitions> betterTransitionsWhenOn = new List<Transitions>();
  23. [SerializeField, DefaultTransitionStates]
  24. List<Transitions> betterTransitionsWhenOff = new List<Transitions>();
  25. bool wasOn;
  26. protected override void OnEnable()
  27. {
  28. base.OnEnable();
  29. ValueChanged(base.isOn, true);
  30. DoStateTransition(SelectionState.Normal, true);
  31. }
  32. void Update()
  33. {
  34. if (wasOn != isOn)
  35. {
  36. ValueChanged(isOn);
  37. }
  38. }
  39. protected override void DoStateTransition(SelectionState state, bool instant)
  40. {
  41. base.DoStateTransition(state, instant);
  42. if (!(base.gameObject.activeInHierarchy))
  43. return;
  44. var stateTransitions = (isOn)
  45. ? betterTransitionsWhenOn
  46. : betterTransitionsWhenOff;
  47. foreach (var info in stateTransitions)
  48. {
  49. info.SetState(state.ToString(), instant);
  50. }
  51. foreach (var info in betterTransitions)
  52. {
  53. if (state != SelectionState.Disabled && isOn)
  54. {
  55. var tglTr = betterToggleTransitions.FirstOrDefault(
  56. (o) => o.TransitionStates != null && info.TransitionStates != null
  57. && o.TransitionStates.Target == info.TransitionStates.Target
  58. && o.Mode == info.Mode);
  59. if (tglTr != null)
  60. {
  61. continue;
  62. }
  63. }
  64. info.SetState(state.ToString(), instant);
  65. }
  66. }
  67. private void ValueChanged(bool on)
  68. {
  69. ValueChanged(on, false);
  70. }
  71. private void ValueChanged(bool on, bool immediate)
  72. {
  73. wasOn = on;
  74. foreach (var state in betterToggleTransitions)
  75. {
  76. state.SetState((on) ? "On" : "Off", immediate);
  77. }
  78. var stateTransitions = (on)
  79. ? betterTransitionsWhenOn
  80. : betterTransitionsWhenOff;
  81. foreach (var state in stateTransitions)
  82. {
  83. state.SetState(currentSelectionState.ToString(), immediate);
  84. }
  85. }
  86. }
  87. }