LitMotionRectTransformExtensions.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. using UnityEngine;
  2. namespace LitMotion.Extensions
  3. {
  4. /// <summary>
  5. /// Provides binding extension methods for RectTransform.
  6. /// </summary>
  7. public static class LitMotionRectTransformExtensions
  8. {
  9. /// <summary>
  10. /// Create a motion data and bind it to RectTransform.anchoredPosition
  11. /// </summary>
  12. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  13. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  14. /// <param name="builder">This builder</param>
  15. /// <param name="transform"></param>
  16. /// <returns>Handle of the created motion data.</returns>
  17. public static MotionHandle BindToAnchoredPosition<TOptions, TAdapter>(this MotionBuilder<Vector2, TOptions, TAdapter> builder, RectTransform rectTransform)
  18. where TOptions : unmanaged, IMotionOptions
  19. where TAdapter : unmanaged, IMotionAdapter<Vector2, TOptions>
  20. {
  21. Error.IsNull(rectTransform);
  22. return builder.BindWithState(rectTransform, static (x, target) =>
  23. {
  24. target.anchoredPosition = x;
  25. });
  26. }
  27. /// <summary>
  28. /// Create a motion data and bind it to RectTransform.anchoredPosition.x
  29. /// </summary>
  30. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  31. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  32. /// <param name="builder">This builder</param>
  33. /// <param name="transform"></param>
  34. /// <returns>Handle of the created motion data.</returns>
  35. public static MotionHandle BindToAnchoredPositionX<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  36. where TOptions : unmanaged, IMotionOptions
  37. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  38. {
  39. Error.IsNull(rectTransform);
  40. return builder.BindWithState(rectTransform, static (x, target) =>
  41. {
  42. var p = target.anchoredPosition;
  43. p.x = x;
  44. target.anchoredPosition = p;
  45. });
  46. }
  47. /// <summary>
  48. /// Create a motion data and bind it to RectTransform.anchoredPosition.y
  49. /// </summary>
  50. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  51. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  52. /// <param name="builder">This builder</param>
  53. /// <param name="transform"></param>
  54. /// <returns>Handle of the created motion data.</returns>
  55. public static MotionHandle BindToAnchoredPositionY<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  56. where TOptions : unmanaged, IMotionOptions
  57. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  58. {
  59. Error.IsNull(rectTransform);
  60. return builder.BindWithState(rectTransform, static (x, target) =>
  61. {
  62. var p = target.anchoredPosition;
  63. p.y = x;
  64. target.anchoredPosition = p;
  65. });
  66. }
  67. /// <summary>
  68. /// Create a motion data and bind it to RectTransform.anchoredPosition3D
  69. /// </summary>
  70. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  71. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  72. /// <param name="builder">This builder</param>
  73. /// <param name="transform"></param>
  74. /// <returns>Handle of the created motion data.</returns>
  75. public static MotionHandle BindToAnchoredPosition3D<TOptions, TAdapter>(this MotionBuilder<Vector3, TOptions, TAdapter> builder, RectTransform rectTransform)
  76. where TOptions : unmanaged, IMotionOptions
  77. where TAdapter : unmanaged, IMotionAdapter<Vector3, TOptions>
  78. {
  79. Error.IsNull(rectTransform);
  80. return builder.BindWithState(rectTransform, static (x, target) =>
  81. {
  82. target.anchoredPosition3D = x;
  83. });
  84. }
  85. /// <summary>
  86. /// Create a motion data and bind it to RectTransform.anchoredPosition3D.x
  87. /// </summary>
  88. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  89. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  90. /// <param name="builder">This builder</param>
  91. /// <param name="transform"></param>
  92. /// <returns>Handle of the created motion data.</returns>
  93. public static MotionHandle BindToAnchoredPosition3DX<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  94. where TOptions : unmanaged, IMotionOptions
  95. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  96. {
  97. Error.IsNull(rectTransform);
  98. return builder.BindWithState(rectTransform, static (x, target) =>
  99. {
  100. var p = target.anchoredPosition3D;
  101. p.x = x;
  102. target.anchoredPosition3D = p;
  103. });
  104. }
  105. /// <summary>
  106. /// Create a motion data and bind it to RectTransform.anchoredPosition3D.y
  107. /// </summary>
  108. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  109. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  110. /// <param name="builder">This builder</param>
  111. /// <param name="transform"></param>
  112. /// <returns>Handle of the created motion data.</returns>
  113. public static MotionHandle BindToAnchoredPosition3DY<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  114. where TOptions : unmanaged, IMotionOptions
  115. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  116. {
  117. Error.IsNull(rectTransform);
  118. return builder.BindWithState(rectTransform, static (x, target) =>
  119. {
  120. var p = target.anchoredPosition3D;
  121. p.y = x;
  122. target.anchoredPosition3D = p;
  123. });
  124. }
  125. /// <summary>
  126. /// Create a motion data and bind it to RectTransform.anchoredPosition3D.z
  127. /// </summary>
  128. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  129. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  130. /// <param name="builder">This builder</param>
  131. /// <param name="transform"></param>
  132. /// <returns>Handle of the created motion data.</returns>
  133. public static MotionHandle BindToAnchoredPosition3DZ<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  134. where TOptions : unmanaged, IMotionOptions
  135. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  136. {
  137. Error.IsNull(rectTransform);
  138. return builder.BindWithState(rectTransform, static (x, target) =>
  139. {
  140. var p = target.anchoredPosition3D;
  141. p.z = x;
  142. target.anchoredPosition3D = p;
  143. });
  144. }
  145. /// <summary>
  146. /// Create a motion data and bind it to RectTransform.anchorMin
  147. /// </summary>
  148. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  149. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  150. /// <param name="builder">This builder</param>
  151. /// <param name="transform"></param>
  152. /// <returns>Handle of the created motion data.</returns>
  153. public static MotionHandle BindToAnchorMin<TOptions, TAdapter>(this MotionBuilder<Vector2, TOptions, TAdapter> builder, RectTransform rectTransform)
  154. where TOptions : unmanaged, IMotionOptions
  155. where TAdapter : unmanaged, IMotionAdapter<Vector2, TOptions>
  156. {
  157. Error.IsNull(rectTransform);
  158. return builder.BindWithState(rectTransform, static (x, target) =>
  159. {
  160. target.anchorMin = x;
  161. });
  162. }
  163. /// <summary>
  164. /// Create a motion data and bind it to RectTransform.anchorMax
  165. /// </summary>
  166. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  167. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  168. /// <param name="builder">This builder</param>
  169. /// <param name="transform"></param>
  170. /// <returns>Handle of the created motion data.</returns>
  171. public static MotionHandle BindToAnchorMax<TOptions, TAdapter>(this MotionBuilder<Vector2, TOptions, TAdapter> builder, RectTransform rectTransform)
  172. where TOptions : unmanaged, IMotionOptions
  173. where TAdapter : unmanaged, IMotionAdapter<Vector2, TOptions>
  174. {
  175. Error.IsNull(rectTransform);
  176. return builder.BindWithState(rectTransform, static (x, target) =>
  177. {
  178. target.anchorMax = x;
  179. });
  180. }
  181. /// <summary>
  182. /// Create a motion data and bind it to RectTransform.sizeDelta
  183. /// </summary>
  184. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  185. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  186. /// <param name="builder">This builder</param>
  187. /// <param name="transform"></param>
  188. /// <returns>Handle of the created motion data.</returns>
  189. public static MotionHandle BindToSizeDelta<TOptions, TAdapter>(this MotionBuilder<Vector2, TOptions, TAdapter> builder, RectTransform rectTransform)
  190. where TOptions : unmanaged, IMotionOptions
  191. where TAdapter : unmanaged, IMotionAdapter<Vector2, TOptions>
  192. {
  193. Error.IsNull(rectTransform);
  194. return builder.BindWithState(rectTransform, static (x, target) =>
  195. {
  196. target.sizeDelta = x;
  197. });
  198. }
  199. /// <summary>
  200. /// Create a motion data and bind it to RectTransform.sizeDelta.x
  201. /// </summary>
  202. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  203. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  204. /// <param name="builder">This builder</param>
  205. /// <param name="transform"></param>
  206. /// <returns>Handle of the created motion data.</returns>
  207. public static MotionHandle BindToSizeDeltaX<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  208. where TOptions : unmanaged, IMotionOptions
  209. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  210. {
  211. Error.IsNull(rectTransform);
  212. return builder.BindWithState(rectTransform, static (x, target) =>
  213. {
  214. var s = target.sizeDelta;
  215. s.x = x;
  216. target.sizeDelta = s;
  217. });
  218. }
  219. /// <summary>
  220. /// Create a motion data and bind it to RectTransform.sizeDelta.y
  221. /// </summary>
  222. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  223. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  224. /// <param name="builder">This builder</param>
  225. /// <param name="transform"></param>
  226. /// <returns>Handle of the created motion data.</returns>
  227. public static MotionHandle BindToSizeDeltaY<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  228. where TOptions : unmanaged, IMotionOptions
  229. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  230. {
  231. Error.IsNull(rectTransform);
  232. return builder.BindWithState(rectTransform, static (x, target) =>
  233. {
  234. var s = target.sizeDelta;
  235. s.y = x;
  236. target.sizeDelta = s;
  237. });
  238. }
  239. /// <summary>
  240. /// Create a motion data and bind it to RectTransform.pivot
  241. /// </summary>
  242. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  243. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  244. /// <param name="builder">This builder</param>
  245. /// <param name="transform"></param>
  246. /// <returns>Handle of the created motion data.</returns>
  247. public static MotionHandle BindToPivot<TOptions, TAdapter>(this MotionBuilder<Vector2, TOptions, TAdapter> builder, RectTransform rectTransform)
  248. where TOptions : unmanaged, IMotionOptions
  249. where TAdapter : unmanaged, IMotionAdapter<Vector2, TOptions>
  250. {
  251. Error.IsNull(rectTransform);
  252. return builder.BindWithState(rectTransform, static (x, target) =>
  253. {
  254. target.pivot = x;
  255. });
  256. }
  257. /// <summary>
  258. /// Create a motion data and bind it to RectTransform.pivot.x
  259. /// </summary>
  260. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  261. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  262. /// <param name="builder">This builder</param>
  263. /// <param name="transform"></param>
  264. /// <returns>Handle of the created motion data.</returns>
  265. public static MotionHandle BindToPivotX<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  266. where TOptions : unmanaged, IMotionOptions
  267. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  268. {
  269. Error.IsNull(rectTransform);
  270. return builder.BindWithState(rectTransform, static (x, target) =>
  271. {
  272. var s = target.pivot;
  273. s.x = x;
  274. target.pivot = s;
  275. });
  276. }
  277. /// <summary>
  278. /// Create a motion data and bind it to RectTransform.pivot.y
  279. /// </summary>
  280. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  281. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  282. /// <param name="builder">This builder</param>
  283. /// <param name="transform"></param>
  284. /// <returns>Handle of the created motion data.</returns>
  285. public static MotionHandle BindToPivotY<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, RectTransform rectTransform)
  286. where TOptions : unmanaged, IMotionOptions
  287. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  288. {
  289. Error.IsNull(rectTransform);
  290. return builder.BindWithState(rectTransform, static (x, target) =>
  291. {
  292. var s = target.pivot;
  293. s.y = x;
  294. target.pivot = s;
  295. });
  296. }
  297. }
  298. }