LitMotionUGUIExtensions.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. #if LITMOTION_SUPPORT_UGUI
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. using Unity.Collections;
  5. #if LITMOTION_SUPPORT_ZSTRING
  6. using Cysharp.Text;
  7. #endif
  8. namespace LitMotion.Extensions
  9. {
  10. /// <summary>
  11. /// Provides binding extension methods for Unity UI (uGUI) components.
  12. /// </summary>
  13. public static class LitMotionUGUIExtensions
  14. {
  15. /// <summary>
  16. /// Create a motion data and bind it to Graphic.color
  17. /// </summary>
  18. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  19. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  20. /// <param name="builder">This builder</param>
  21. /// <param name="transform"></param>
  22. /// <returns>Handle of the created motion data.</returns>
  23. public static MotionHandle BindToColor<TOptions, TAdapter>(this MotionBuilder<Color, TOptions, TAdapter> builder, Graphic graphic)
  24. where TOptions : unmanaged, IMotionOptions
  25. where TAdapter : unmanaged, IMotionAdapter<Color, TOptions>
  26. {
  27. Error.IsNull(graphic);
  28. return builder.BindWithState(graphic, static (x, target) =>
  29. {
  30. target.color = x;
  31. });
  32. }
  33. /// <summary>
  34. /// Create a motion data and bind it to Graphic.color.r
  35. /// </summary>
  36. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  37. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  38. /// <param name="builder">This builder</param>
  39. /// <param name="transform"></param>
  40. /// <returns>Handle of the created motion data.</returns>
  41. public static MotionHandle BindToColorR<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Graphic graphic)
  42. where TOptions : unmanaged, IMotionOptions
  43. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  44. {
  45. Error.IsNull(graphic);
  46. return builder.BindWithState(graphic, static (x, target) =>
  47. {
  48. var c = target.color;
  49. c.r = x;
  50. target.color = c;
  51. });
  52. }
  53. /// <summary>
  54. /// Create a motion data and bind it to Graphic.color.g
  55. /// </summary>
  56. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  57. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  58. /// <param name="builder">This builder</param>
  59. /// <param name="transform"></param>
  60. /// <returns>Handle of the created motion data.</returns>
  61. public static MotionHandle BindToColorG<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Graphic graphic)
  62. where TOptions : unmanaged, IMotionOptions
  63. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  64. {
  65. Error.IsNull(graphic);
  66. return builder.BindWithState(graphic, static (x, target) =>
  67. {
  68. var c = target.color;
  69. c.g = x;
  70. target.color = c;
  71. });
  72. }
  73. /// <summary>
  74. /// Create a motion data and bind it to Graphic.color.b
  75. /// </summary>
  76. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  77. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  78. /// <param name="builder">This builder</param>
  79. /// <param name="transform"></param>
  80. /// <returns>Handle of the created motion data.</returns>
  81. public static MotionHandle BindToColorB<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Graphic graphic)
  82. where TOptions : unmanaged, IMotionOptions
  83. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  84. {
  85. Error.IsNull(graphic);
  86. return builder.BindWithState(graphic, static (x, target) =>
  87. {
  88. var c = target.color;
  89. c.b = x;
  90. target.color = c;
  91. });
  92. }
  93. /// <summary>
  94. /// Create a motion data and bind it to Graphic.color.a
  95. /// </summary>
  96. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  97. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  98. /// <param name="builder">This builder</param>
  99. /// <param name="transform"></param>
  100. /// <returns>Handle of the created motion data.</returns>
  101. public static MotionHandle BindToColorA<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Graphic graphic)
  102. where TOptions : unmanaged, IMotionOptions
  103. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  104. {
  105. Error.IsNull(graphic);
  106. return builder.BindWithState(graphic, static (x, target) =>
  107. {
  108. var c = target.color;
  109. c.a = x;
  110. target.color = c;
  111. });
  112. }
  113. /// <summary>
  114. /// Create a motion data and bind it to Image.FillAmount
  115. /// </summary>
  116. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  117. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  118. /// <param name="builder">This builder</param>
  119. /// <param name="transform"></param>
  120. /// <returns>Handle of the created motion data.</returns>
  121. public static MotionHandle BindToFillAmount<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Image image)
  122. where TOptions : unmanaged, IMotionOptions
  123. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  124. {
  125. Error.IsNull(image);
  126. return builder.BindWithState(image, static (x, target) =>
  127. {
  128. target.fillAmount = x;
  129. });
  130. }
  131. /// <summary>
  132. /// Create a motion data and bind it to CanvasGroup.alpha
  133. /// </summary>
  134. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  135. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  136. /// <param name="builder">This builder</param>
  137. /// <param name="transform"></param>
  138. /// <returns>Handle of the created motion data.</returns>
  139. public static MotionHandle BindToCanvasGroupAlpha<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, CanvasGroup canvasGroup)
  140. where TOptions : unmanaged, IMotionOptions
  141. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  142. {
  143. Error.IsNull(canvasGroup);
  144. return builder.BindWithState(canvasGroup, static (x, target) =>
  145. {
  146. target.alpha = x;
  147. });
  148. }
  149. /// <summary>
  150. /// Create a motion data and bind it to Text.fontSize
  151. /// </summary>
  152. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  153. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  154. /// <param name="builder">This builder</param>
  155. /// <param name="transform"></param>
  156. /// <returns>Handle of the created motion data.</returns>
  157. public static MotionHandle BindToFontSize<TOptions, TAdapter>(this MotionBuilder<int, TOptions, TAdapter> builder, Text text)
  158. where TOptions : unmanaged, IMotionOptions
  159. where TAdapter : unmanaged, IMotionAdapter<int, TOptions>
  160. {
  161. Error.IsNull(text);
  162. return builder.BindWithState(text, static (x, target) =>
  163. {
  164. target.fontSize = x;
  165. });
  166. }
  167. /// <summary>
  168. /// Create a motion data and bind it to Text.text
  169. /// </summary>
  170. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  171. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  172. /// <param name="builder">This builder</param>
  173. /// <param name="transform"></param>
  174. /// <returns>Handle of the created motion data.</returns>
  175. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<FixedString32Bytes, TOptions, TAdapter> builder, Text text)
  176. where TOptions : unmanaged, IMotionOptions
  177. where TAdapter : unmanaged, IMotionAdapter<FixedString32Bytes, TOptions>
  178. {
  179. Error.IsNull(text);
  180. return builder.BindWithState(text, static (x, target) =>
  181. {
  182. target.text = x.ConvertToString();
  183. });
  184. }
  185. /// <summary>
  186. /// Create a motion data and bind it to Text.text
  187. /// </summary>
  188. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  189. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  190. /// <param name="builder">This builder</param>
  191. /// <param name="transform"></param>
  192. /// <returns>Handle of the created motion data.</returns>
  193. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<FixedString64Bytes, TOptions, TAdapter> builder, Text text)
  194. where TOptions : unmanaged, IMotionOptions
  195. where TAdapter : unmanaged, IMotionAdapter<FixedString64Bytes, TOptions>
  196. {
  197. Error.IsNull(text);
  198. return builder.BindWithState(text, static (x, target) =>
  199. {
  200. target.text = x.ConvertToString();
  201. });
  202. }
  203. /// <summary>
  204. /// Create a motion data and bind it to Text.text
  205. /// </summary>
  206. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  207. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  208. /// <param name="builder">This builder</param>
  209. /// <param name="transform"></param>
  210. /// <returns>Handle of the created motion data.</returns>
  211. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<FixedString128Bytes, TOptions, TAdapter> builder, Text text)
  212. where TOptions : unmanaged, IMotionOptions
  213. where TAdapter : unmanaged, IMotionAdapter<FixedString128Bytes, TOptions>
  214. {
  215. Error.IsNull(text);
  216. return builder.BindWithState(text, static (x, target) =>
  217. {
  218. target.text = x.ConvertToString();
  219. });
  220. }
  221. /// <summary>
  222. /// Create a motion data and bind it to Text.text
  223. /// </summary>
  224. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  225. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  226. /// <param name="builder">This builder</param>
  227. /// <param name="transform"></param>
  228. /// <returns>Handle of the created motion data.</returns>
  229. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<FixedString512Bytes, TOptions, TAdapter> builder, Text text)
  230. where TOptions : unmanaged, IMotionOptions
  231. where TAdapter : unmanaged, IMotionAdapter<FixedString512Bytes, TOptions>
  232. {
  233. Error.IsNull(text);
  234. return builder.BindWithState(text, static (x, target) =>
  235. {
  236. target.text = x.ConvertToString();
  237. });
  238. }
  239. /// <summary>
  240. /// Create a motion data and bind it to Text.text
  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 BindToText<TOptions, TAdapter>(this MotionBuilder<FixedString4096Bytes, TOptions, TAdapter> builder, Text text)
  248. where TOptions : unmanaged, IMotionOptions
  249. where TAdapter : unmanaged, IMotionAdapter<FixedString4096Bytes, TOptions>
  250. {
  251. Error.IsNull(text);
  252. return builder.BindWithState(text, static (x, target) =>
  253. {
  254. target.text = x.ConvertToString();
  255. });
  256. }
  257. /// <summary>
  258. /// Create a motion data and bind it to Text.text
  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 BindToText<TOptions, TAdapter>(this MotionBuilder<int, TOptions, TAdapter> builder, Text text)
  266. where TOptions : unmanaged, IMotionOptions
  267. where TAdapter : unmanaged, IMotionAdapter<int, TOptions>
  268. {
  269. Error.IsNull(text);
  270. return builder.BindWithState(text, static (x, target) =>
  271. {
  272. target.text = x.ToString();
  273. });
  274. }
  275. /// <summary>
  276. /// Create a motion data and bind it to Text.text
  277. /// </summary>
  278. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  279. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  280. /// <param name="builder">This builder</param>
  281. /// <param name="transform"></param>
  282. /// <param name="format">Format string</param>
  283. /// <returns>Handle of the created motion data.</returns>
  284. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<int, TOptions, TAdapter> builder, Text text, string format)
  285. where TOptions : unmanaged, IMotionOptions
  286. where TAdapter : unmanaged, IMotionAdapter<int, TOptions>
  287. {
  288. Error.IsNull(text);
  289. return builder.BindWithState(text, format, static (x, target, format) =>
  290. {
  291. #if LITMOTION_SUPPORT_ZSTRING
  292. target.text = ZString.Format(format, x);
  293. #else
  294. target.text = string.Format(format, x);
  295. #endif
  296. });
  297. }
  298. /// <summary>
  299. /// Create a motion data and bind it to Text.text
  300. /// </summary>
  301. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  302. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  303. /// <param name="builder">This builder</param>
  304. /// <param name="transform"></param>
  305. /// <returns>Handle of the created motion data.</returns>
  306. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<long, TOptions, TAdapter> builder, Text text)
  307. where TOptions : unmanaged, IMotionOptions
  308. where TAdapter : unmanaged, IMotionAdapter<long, TOptions>
  309. {
  310. Error.IsNull(text);
  311. return builder.BindWithState(text, static (x, target) =>
  312. {
  313. target.text = x.ToString();
  314. });
  315. }
  316. /// <summary>
  317. /// Create a motion data and bind it to Text.text
  318. /// </summary>
  319. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  320. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  321. /// <param name="builder">This builder</param>
  322. /// <param name="transform"></param>
  323. /// <param name="format">Format string</param>
  324. /// <returns>Handle of the created motion data.</returns>
  325. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<long, TOptions, TAdapter> builder, Text text, string format)
  326. where TOptions : unmanaged, IMotionOptions
  327. where TAdapter : unmanaged, IMotionAdapter<long, TOptions>
  328. {
  329. Error.IsNull(text);
  330. return builder.BindWithState(text, format, static (x, target, format) =>
  331. {
  332. #if LITMOTION_SUPPORT_ZSTRING
  333. target.text = ZString.Format(format, x);
  334. #else
  335. target.text = string.Format(format, x);
  336. #endif
  337. });
  338. }
  339. /// <summary>
  340. /// Create a motion data and bind it to Text.text
  341. /// </summary>
  342. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  343. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  344. /// <param name="builder">This builder</param>
  345. /// <param name="transform"></param>
  346. /// <returns>Handle of the created motion data.</returns>
  347. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Text text)
  348. where TOptions : unmanaged, IMotionOptions
  349. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  350. {
  351. Error.IsNull(text);
  352. return builder.BindWithState(text, static (x, target) =>
  353. {
  354. target.text = x.ToString();
  355. });
  356. }
  357. /// <summary>
  358. /// Create a motion data and bind it to Text.text
  359. /// </summary>
  360. /// <typeparam name="TOptions">The type of special parameters given to the motion data</typeparam>
  361. /// <typeparam name="TAdapter">The type of adapter that support value animation</typeparam>
  362. /// <param name="builder">This builder</param>
  363. /// <param name="transform"></param>
  364. /// <param name="format">Format string</param>
  365. /// <returns>Handle of the created motion data.</returns>
  366. public static MotionHandle BindToText<TOptions, TAdapter>(this MotionBuilder<float, TOptions, TAdapter> builder, Text text, string format)
  367. where TOptions : unmanaged, IMotionOptions
  368. where TAdapter : unmanaged, IMotionAdapter<float, TOptions>
  369. {
  370. Error.IsNull(text);
  371. return builder.BindWithState(text, format, static (x, target, format) =>
  372. {
  373. #if LITMOTION_SUPPORT_ZSTRING
  374. target.text = ZString.Format(format, x);
  375. #else
  376. target.text = string.Format(format, x);
  377. #endif
  378. });
  379. }
  380. }
  381. }
  382. #endif