Transitions.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Text;
  6. using UnityEngine;
  7. namespace TheraBytes.BetterUi
  8. {
  9. [Serializable]
  10. public class Transitions
  11. {
  12. public static readonly string[] OnOffStateNames = { "On", "Off", };
  13. public static readonly string[] ShowHideStateNames = { "Show", "Hide", };
  14. public static readonly string[] SelectionStateNames = { "Normal", "Highlighted", "Pressed",
  15. #if UNITY_2019_1_OR_NEWER
  16. "Selected",
  17. #endif
  18. "Disabled", };
  19. public enum TransitionMode
  20. {
  21. None = 0,
  22. ColorTint = 1,
  23. SpriteSwap = 2,
  24. Animation = 3,
  25. ObjectActiveness = 4,
  26. Alpha = 5,
  27. MaterialProperty = 6,
  28. Color32Tint = 7,
  29. LocationAnimationTransition = 8,
  30. CustomCallback = 9,
  31. }
  32. public TransitionMode Mode { get { return mode; } }
  33. public ReadOnlyCollection<string> StateNames { get { return stateNames.ToList().AsReadOnly(); } }
  34. [SerializeField]
  35. TransitionMode mode;
  36. [SerializeField]
  37. string[] stateNames;
  38. [SerializeField]
  39. ColorTransitions colorTransitions;
  40. [SerializeField]
  41. Color32Transitions color32Transitions;
  42. [SerializeField]
  43. SpriteSwapTransitions spriteSwapTransitions;
  44. [SerializeField]
  45. AnimationTransitions animationTransitions;
  46. [SerializeField]
  47. ObjectActivenessTransitions activenessTransitions;
  48. [SerializeField]
  49. AlphaTransitions alphaTransitions;
  50. [SerializeField]
  51. MaterialPropertyTransition materialPropertyTransitions;
  52. [SerializeField]
  53. LocationAnimationTransitions locationAnimationTransitions;
  54. [SerializeField]
  55. CustomTransitions customTransitions;
  56. public TransitionStateCollection TransitionStates
  57. {
  58. get
  59. {
  60. switch (mode)
  61. {
  62. case TransitionMode.ColorTint: return colorTransitions;
  63. case TransitionMode.Color32Tint: return color32Transitions;
  64. case TransitionMode.SpriteSwap: return spriteSwapTransitions;
  65. case TransitionMode.Animation: return animationTransitions;
  66. case TransitionMode.ObjectActiveness: return activenessTransitions;
  67. case TransitionMode.Alpha: return alphaTransitions;
  68. case TransitionMode.MaterialProperty: return materialPropertyTransitions;
  69. case TransitionMode.LocationAnimationTransition: return locationAnimationTransitions;
  70. case TransitionMode.CustomCallback: return customTransitions;
  71. default: return null;
  72. }
  73. }
  74. }
  75. public Transitions(params string[] stateNames)
  76. {
  77. this.stateNames = stateNames;
  78. }
  79. public void SetState(string stateName, bool instant)
  80. {
  81. if (TransitionStates == null)
  82. return;
  83. if (!stateNames.Contains(stateName))
  84. return;
  85. TransitionStates.Apply(stateName, instant);
  86. }
  87. public void SetMode(TransitionMode mode)
  88. {
  89. this.mode = mode;
  90. this.colorTransitions = null;
  91. this.color32Transitions = null;
  92. this.spriteSwapTransitions = null;
  93. this.animationTransitions = null;
  94. this.activenessTransitions = null;
  95. this.alphaTransitions = null;
  96. this.locationAnimationTransitions = null;
  97. this.customTransitions = null;
  98. switch (mode)
  99. {
  100. case TransitionMode.None:
  101. break;
  102. case TransitionMode.ColorTint:
  103. this.colorTransitions = new ColorTransitions(stateNames);
  104. break;
  105. case TransitionMode.Color32Tint:
  106. this.color32Transitions = new Color32Transitions(stateNames);
  107. break;
  108. case TransitionMode.SpriteSwap:
  109. this.spriteSwapTransitions = new SpriteSwapTransitions(stateNames);
  110. break;
  111. case TransitionMode.Animation:
  112. this.animationTransitions = new AnimationTransitions(stateNames);
  113. break;
  114. case TransitionMode.ObjectActiveness:
  115. this.activenessTransitions = new ObjectActivenessTransitions(stateNames);
  116. break;
  117. case TransitionMode.Alpha:
  118. this.alphaTransitions = new AlphaTransitions(stateNames);
  119. break;
  120. case TransitionMode.MaterialProperty:
  121. this.materialPropertyTransitions = new MaterialPropertyTransition(stateNames);
  122. break;
  123. case TransitionMode.LocationAnimationTransition:
  124. this.locationAnimationTransitions = new LocationAnimationTransitions(stateNames);
  125. break;
  126. case TransitionMode.CustomCallback:
  127. this.customTransitions = new CustomTransitions(stateNames);
  128. break;
  129. default: throw new NotImplementedException();
  130. }
  131. }
  132. public void ComplementStateNames(string[] stateNames)
  133. {
  134. foreach(string name in stateNames)
  135. {
  136. if (this.stateNames.Contains(name))
  137. continue;
  138. switch (mode)
  139. {
  140. case TransitionMode.None:
  141. break;
  142. case TransitionMode.ColorTint:
  143. this.colorTransitions.AddStateObject(name);
  144. this.colorTransitions.SortStates(stateNames);
  145. break;
  146. case TransitionMode.Color32Tint:
  147. this.color32Transitions.AddStateObject(name);
  148. this.color32Transitions.SortStates(stateNames);
  149. break;
  150. case TransitionMode.SpriteSwap:
  151. this.spriteSwapTransitions.AddStateObject(name);
  152. this.spriteSwapTransitions.SortStates(stateNames);
  153. break;
  154. case TransitionMode.Animation:
  155. this.animationTransitions.AddStateObject(name);
  156. this.animationTransitions.SortStates(stateNames);
  157. break;
  158. case TransitionMode.ObjectActiveness:
  159. this.activenessTransitions.AddStateObject(name);
  160. this.activenessTransitions.SortStates(stateNames);
  161. break;
  162. case TransitionMode.Alpha:
  163. this.alphaTransitions.AddStateObject(name);
  164. this.alphaTransitions.SortStates(stateNames);
  165. break;
  166. case TransitionMode.MaterialProperty:
  167. this.materialPropertyTransitions.AddStateObject(name);
  168. this.materialPropertyTransitions.SortStates(stateNames);
  169. break;
  170. case TransitionMode.LocationAnimationTransition:
  171. this.locationAnimationTransitions.AddStateObject(name);
  172. this.locationAnimationTransitions.SortStates(stateNames);
  173. break;
  174. case TransitionMode.CustomCallback:
  175. this.customTransitions.AddStateObject(name);
  176. this.customTransitions.SortStates(stateNames);
  177. break;
  178. default: throw new NotImplementedException();
  179. }
  180. }
  181. this.stateNames = stateNames;
  182. }
  183. }
  184. }