AnimationConfig.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. using System.Collections.Generic;
  2. namespace DragonBones
  3. {
  4. /**
  5. * @language zh_CN
  6. * @beta
  7. * 动画配置,描述播放一个动画所需要的全部信息。
  8. * @see DragonBones.AnimationState
  9. * @version DragonBones 5.0
  10. */
  11. public class AnimationConfig : BaseObject
  12. {
  13. /**
  14. * @language zh_CN
  15. * 是否暂停淡出的动画。
  16. * @default true
  17. * @version DragonBones 5.0
  18. */
  19. public bool pauseFadeOut;
  20. /**
  21. * @language zh_CN
  22. * 淡出模式。
  23. * @default dragonBones.AnimationFadeOutMode.All
  24. * @see DragonBones.AnimationFadeOutMode
  25. * @version DragonBones 5.0
  26. */
  27. public AnimationFadeOutMode fadeOutMode;
  28. /**
  29. * @language zh_CN
  30. * 淡出时间。 [-1: 与淡入时间同步, [0~N]: 淡出时间] (以秒为单位)
  31. * @default -1
  32. * @version DragonBones 5.0
  33. */
  34. public float fadeOutTime;
  35. /**
  36. * @language zh_CN
  37. * 淡出缓动方式。
  38. * @default 0
  39. * @version DragonBones 5.0
  40. */
  41. public float fadeOutEasing;
  42. /**
  43. * @language zh_CN
  44. * 是否以增加的方式混合。
  45. * @default false
  46. * @version DragonBones 5.0
  47. */
  48. public bool additiveBlending;
  49. /**
  50. * @language zh_CN
  51. * 是否对插槽的显示对象有控制权。
  52. * @default true
  53. * @version DragonBones 5.0
  54. */
  55. public bool displayControl;
  56. /**
  57. * @language zh_CN
  58. * 是否暂停淡入的动画,直到淡入过程结束。
  59. * @default true
  60. * @version DragonBones 5.0
  61. */
  62. public bool pauseFadeIn;
  63. /**
  64. * @language zh_CN
  65. * 否能触发行为。
  66. * @default true
  67. * @version DragonBones 5.0
  68. */
  69. public bool actionEnabled;
  70. /**
  71. * @language zh_CN
  72. * 播放次数。 [-1: 使用动画数据默认值, 0: 无限循环播放, [1~N]: 循环播放 N 次]
  73. * @default -1
  74. * @version DragonBones 5.0
  75. */
  76. public int playTimes;
  77. /**
  78. * @language zh_CN
  79. * 混合图层,图层高会优先获取混合权重。
  80. * @default 0
  81. * @version DragonBones 5.0
  82. */
  83. public int layer;
  84. /**
  85. * @language zh_CN
  86. * 开始时间。 (以秒为单位)
  87. * @default 0
  88. * @version DragonBones 5.0
  89. */
  90. public float position;
  91. /**
  92. * @language zh_CN
  93. * 持续时间。 [-1: 使用动画数据默认值, 0: 动画停止, (0~N]: 持续时间] (以秒为单位)
  94. * @default -1
  95. * @version DragonBones 5.0
  96. */
  97. public float duration;
  98. /**
  99. * @language zh_CN
  100. * 播放速度。 [(-N~0): 倒转播放, 0: 停止播放, (0~1): 慢速播放, 1: 正常播放, (1~N): 快速播放]
  101. * @default 1
  102. * @version DragonBones 3.0
  103. */
  104. public float timeScale;
  105. /**
  106. * @language zh_CN
  107. * 淡入时间。 [-1: 使用动画数据默认值, [0~N]: 淡入时间] (以秒为单位)
  108. * @default -1
  109. * @version DragonBones 5.0
  110. */
  111. public float fadeInTime;
  112. /**
  113. * @language zh_CN
  114. * 自动淡出时间。 [-1: 不自动淡出, [0~N]: 淡出时间] (以秒为单位)
  115. * @default -1
  116. * @version DragonBones 5.0
  117. */
  118. public float autoFadeOutTime;
  119. /**
  120. * @language zh_CN
  121. * 淡入缓动方式。
  122. * @default 0
  123. * @version DragonBones 5.0
  124. */
  125. public float fadeInEasing;
  126. /**
  127. * @language zh_CN
  128. * 权重。
  129. * @default 1
  130. * @version DragonBones 5.0
  131. */
  132. public float weight;
  133. /**
  134. * @language zh_CN
  135. * 动画状态名。
  136. * @version DragonBones 5.0
  137. */
  138. public string name;
  139. /**
  140. * @language zh_CN
  141. * 动画数据名。
  142. * @version DragonBones 5.0
  143. */
  144. public string animationName;
  145. /**
  146. * @language zh_CN
  147. * 混合组,用于动画状态编组,方便控制淡出。
  148. * @version DragonBones 5.0
  149. */
  150. public string group;
  151. /**
  152. * @language zh_CN
  153. * 骨骼遮罩。
  154. * @version DragonBones 5.0
  155. */
  156. public readonly List<string> boneMask = new List<string>();
  157. /**
  158. * @private
  159. */
  160. public AnimationConfig()
  161. {
  162. }
  163. /**
  164. * @private
  165. */
  166. protected override void _onClear()
  167. {
  168. pauseFadeOut = true;
  169. fadeOutMode = AnimationFadeOutMode.All;
  170. fadeOutTime = -1.0f;
  171. fadeOutEasing = 0.0f;
  172. additiveBlending = false;
  173. displayControl = true;
  174. pauseFadeIn = true;
  175. actionEnabled = true;
  176. playTimes = -1;
  177. layer = 0;
  178. position = 0.0f;
  179. duration = -1.0f;
  180. timeScale = -100.0f;
  181. fadeInTime = -1.0f;
  182. autoFadeOutTime = -1.0f;
  183. fadeInEasing = 0.0f;
  184. weight = 1.0f;
  185. name = null;
  186. animationName = null;
  187. group = null;
  188. boneMask.Clear();
  189. }
  190. public void Clear()
  191. {
  192. _onClear();
  193. }
  194. public void CopyFrom(AnimationConfig value)
  195. {
  196. pauseFadeOut = value.pauseFadeOut;
  197. fadeOutMode = value.fadeOutMode;
  198. autoFadeOutTime = value.autoFadeOutTime;
  199. fadeOutEasing = value.fadeOutEasing;
  200. additiveBlending = value.additiveBlending;
  201. displayControl = value.displayControl;
  202. pauseFadeIn = value.pauseFadeIn;
  203. actionEnabled = value.actionEnabled;
  204. playTimes = value.playTimes;
  205. layer = value.layer;
  206. position = value.position;
  207. duration = value.duration;
  208. timeScale = value.timeScale;
  209. fadeInTime = value.fadeInTime;
  210. fadeOutTime = value.fadeOutTime;
  211. fadeInEasing = value.fadeInEasing;
  212. weight = value.weight;
  213. name = value.name;
  214. animationName = value.animationName;
  215. group = value.group;
  216. DragonBones.ResizeList(boneMask, value.boneMask.Count, null);
  217. for (int i = 0, l = boneMask.Count; i < l; ++i)
  218. {
  219. boneMask[i] = value.boneMask[i];
  220. }
  221. }
  222. public bool ContainsBoneMask(string name)
  223. {
  224. return boneMask.Count == 0 || boneMask.Contains(name);
  225. }
  226. public void AddBoneMask(Armature armature, string name, bool recursive = false)
  227. {
  228. var currentBone = armature.GetBone(name);
  229. if (currentBone == null)
  230. {
  231. return;
  232. }
  233. if (!boneMask.Contains(name)) // Add mixing
  234. {
  235. boneMask.Add(name);
  236. }
  237. if (recursive) // Add recursive mixing.
  238. {
  239. var bones = armature.GetBones();
  240. for (int i = 0, l = bones.Count; i < l; ++i)
  241. {
  242. var bone = bones[i];
  243. if (!boneMask.Contains(bone.name) && currentBone.Contains(bone))
  244. {
  245. boneMask.Add(bone.name);
  246. }
  247. }
  248. }
  249. }
  250. public void RemoveBoneMask(Armature armature, string name, bool recursive = true)
  251. {
  252. if (boneMask.Contains(name)) // Remove mixing.
  253. {
  254. boneMask.Remove(name);
  255. }
  256. if (recursive)
  257. {
  258. var currentBone = armature.GetBone(name);
  259. if (currentBone != null)
  260. {
  261. var bones = armature.GetBones();
  262. if (boneMask.Count > 0) // Remove recursive mixing.
  263. {
  264. for (int i = 0, l = bones.Count; i < l; ++i)
  265. {
  266. var bone = bones[i];
  267. if (boneMask.Contains(bone.name) && currentBone.Contains(bone))
  268. {
  269. boneMask.Remove(bone.name);
  270. }
  271. }
  272. }
  273. else // Add unrecursive mixing.
  274. {
  275. for (int i = 0, l = bones.Count; i < l; ++i)
  276. {
  277. var bone = bones[i];
  278. if (!currentBone.Contains(bone))
  279. {
  280. boneMask.Add(bone.name);
  281. }
  282. }
  283. }
  284. }
  285. }
  286. }
  287. }
  288. }