FsmComponent.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. using GameFramework;
  8. using GameFramework.Fsm;
  9. using System;
  10. using System.Collections.Generic;
  11. using UnityEngine;
  12. namespace UnityGameFramework.Runtime
  13. {
  14. /// <summary>
  15. /// 有限状态机组件。
  16. /// </summary>
  17. [DisallowMultipleComponent]
  18. [AddComponentMenu("Game Framework/FSM")]
  19. public sealed class FsmComponent : GameFrameworkComponent
  20. {
  21. private IFsmManager m_FsmManager = null;
  22. /// <summary>
  23. /// 获取有限状态机数量。
  24. /// </summary>
  25. public int Count
  26. {
  27. get
  28. {
  29. return m_FsmManager.Count;
  30. }
  31. }
  32. /// <summary>
  33. /// 游戏框架组件初始化。
  34. /// </summary>
  35. protected override void Awake()
  36. {
  37. base.Awake();
  38. m_FsmManager = GameFrameworkEntry.GetModule<IFsmManager>();
  39. if (m_FsmManager == null)
  40. {
  41. Log.Fatal("FSM manager is invalid.");
  42. return;
  43. }
  44. }
  45. private void Start()
  46. {
  47. }
  48. /// <summary>
  49. /// 检查是否存在有限状态机。
  50. /// </summary>
  51. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  52. /// <returns>是否存在有限状态机。</returns>
  53. public bool HasFsm<T>() where T : class
  54. {
  55. return m_FsmManager.HasFsm<T>();
  56. }
  57. /// <summary>
  58. /// 检查是否存在有限状态机。
  59. /// </summary>
  60. /// <param name="ownerType">有限状态机持有者类型。</param>
  61. /// <returns>是否存在有限状态机。</returns>
  62. public bool HasFsm(Type ownerType)
  63. {
  64. return m_FsmManager.HasFsm(ownerType);
  65. }
  66. /// <summary>
  67. /// 检查是否存在有限状态机。
  68. /// </summary>
  69. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  70. /// <param name="name">有限状态机名称。</param>
  71. /// <returns>是否存在有限状态机。</returns>
  72. public bool HasFsm<T>(string name) where T : class
  73. {
  74. return m_FsmManager.HasFsm<T>(name);
  75. }
  76. /// <summary>
  77. /// 检查是否存在有限状态机。
  78. /// </summary>
  79. /// <param name="ownerType">有限状态机持有者类型。</param>
  80. /// <param name="name">有限状态机名称。</param>
  81. /// <returns>是否存在有限状态机。</returns>
  82. public bool HasFsm(Type ownerType, string name)
  83. {
  84. return m_FsmManager.HasFsm(ownerType, name);
  85. }
  86. /// <summary>
  87. /// 获取有限状态机。
  88. /// </summary>
  89. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  90. /// <returns>要获取的有限状态机。</returns>
  91. public IFsm<T> GetFsm<T>() where T : class
  92. {
  93. return m_FsmManager.GetFsm<T>();
  94. }
  95. /// <summary>
  96. /// 获取有限状态机。
  97. /// </summary>
  98. /// <param name="ownerType">有限状态机持有者类型。</param>
  99. /// <returns>要获取的有限状态机。</returns>
  100. public FsmBase GetFsm(Type ownerType)
  101. {
  102. return m_FsmManager.GetFsm(ownerType);
  103. }
  104. /// <summary>
  105. /// 获取有限状态机。
  106. /// </summary>
  107. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  108. /// <param name="name">有限状态机名称。</param>
  109. /// <returns>要获取的有限状态机。</returns>
  110. public IFsm<T> GetFsm<T>(string name) where T : class
  111. {
  112. return m_FsmManager.GetFsm<T>(name);
  113. }
  114. /// <summary>
  115. /// 获取有限状态机。
  116. /// </summary>
  117. /// <param name="ownerType">有限状态机持有者类型。</param>
  118. /// <param name="name">有限状态机名称。</param>
  119. /// <returns>要获取的有限状态机。</returns>
  120. public FsmBase GetFsm(Type ownerType, string name)
  121. {
  122. return m_FsmManager.GetFsm(ownerType, name);
  123. }
  124. /// <summary>
  125. /// 获取所有有限状态机。
  126. /// </summary>
  127. public FsmBase[] GetAllFsms()
  128. {
  129. return m_FsmManager.GetAllFsms();
  130. }
  131. /// <summary>
  132. /// 获取所有有限状态机。
  133. /// </summary>
  134. /// <param name="results">所有有限状态机。</param>
  135. public void GetAllFsms(List<FsmBase> results)
  136. {
  137. m_FsmManager.GetAllFsms(results);
  138. }
  139. /// <summary>
  140. /// 创建有限状态机。
  141. /// </summary>
  142. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  143. /// <param name="owner">有限状态机持有者。</param>
  144. /// <param name="states">有限状态机状态集合。</param>
  145. /// <returns>要创建的有限状态机。</returns>
  146. public IFsm<T> CreateFsm<T>(T owner, params FsmState<T>[] states) where T : class
  147. {
  148. return m_FsmManager.CreateFsm(owner, states);
  149. }
  150. /// <summary>
  151. /// 创建有限状态机。
  152. /// </summary>
  153. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  154. /// <param name="name">有限状态机名称。</param>
  155. /// <param name="owner">有限状态机持有者。</param>
  156. /// <param name="states">有限状态机状态集合。</param>
  157. /// <returns>要创建的有限状态机。</returns>
  158. public IFsm<T> CreateFsm<T>(string name, T owner, params FsmState<T>[] states) where T : class
  159. {
  160. return m_FsmManager.CreateFsm(name, owner, states);
  161. }
  162. /// <summary>
  163. /// 创建有限状态机。
  164. /// </summary>
  165. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  166. /// <param name="owner">有限状态机持有者。</param>
  167. /// <param name="states">有限状态机状态集合。</param>
  168. /// <returns>要创建的有限状态机。</returns>
  169. public IFsm<T> CreateFsm<T>(T owner, List<FsmState<T>> states) where T : class
  170. {
  171. return m_FsmManager.CreateFsm(owner, states);
  172. }
  173. /// <summary>
  174. /// 创建有限状态机。
  175. /// </summary>
  176. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  177. /// <param name="name">有限状态机名称。</param>
  178. /// <param name="owner">有限状态机持有者。</param>
  179. /// <param name="states">有限状态机状态集合。</param>
  180. /// <returns>要创建的有限状态机。</returns>
  181. public IFsm<T> CreateFsm<T>(string name, T owner, List<FsmState<T>> states) where T : class
  182. {
  183. return m_FsmManager.CreateFsm(name, owner, states);
  184. }
  185. /// <summary>
  186. /// 销毁有限状态机。
  187. /// </summary>
  188. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  189. /// <returns>是否销毁有限状态机成功。</returns>
  190. public bool DestroyFsm<T>() where T : class
  191. {
  192. return m_FsmManager.DestroyFsm<T>();
  193. }
  194. /// <summary>
  195. /// 销毁有限状态机。
  196. /// </summary>
  197. /// <param name="ownerType">有限状态机持有者类型。</param>
  198. /// <returns>是否销毁有限状态机成功。</returns>
  199. public bool DestroyFsm(Type ownerType)
  200. {
  201. return m_FsmManager.DestroyFsm(ownerType);
  202. }
  203. /// <summary>
  204. /// 销毁有限状态机。
  205. /// </summary>
  206. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  207. /// <param name="name">要销毁的有限状态机名称。</param>
  208. /// <returns>是否销毁有限状态机成功。</returns>
  209. public bool DestroyFsm<T>(string name) where T : class
  210. {
  211. return m_FsmManager.DestroyFsm<T>(name);
  212. }
  213. /// <summary>
  214. /// 销毁有限状态机。
  215. /// </summary>
  216. /// <param name="ownerType">有限状态机持有者类型。</param>
  217. /// <param name="name">要销毁的有限状态机名称。</param>
  218. /// <returns>是否销毁有限状态机成功。</returns>
  219. public bool DestroyFsm(Type ownerType, string name)
  220. {
  221. return m_FsmManager.DestroyFsm(ownerType, name);
  222. }
  223. /// <summary>
  224. /// 销毁有限状态机。
  225. /// </summary>
  226. /// <typeparam name="T">有限状态机持有者类型。</typeparam>
  227. /// <param name="fsm">要销毁的有限状态机。</param>
  228. /// <returns>是否销毁有限状态机成功。</returns>
  229. public bool DestroyFsm<T>(IFsm<T> fsm) where T : class
  230. {
  231. return m_FsmManager.DestroyFsm(fsm);
  232. }
  233. /// <summary>
  234. /// 销毁有限状态机。
  235. /// </summary>
  236. /// <param name="fsm">要销毁的有限状态机。</param>
  237. /// <returns>是否销毁有限状态机成功。</returns>
  238. public bool DestroyFsm(FsmBase fsm)
  239. {
  240. return m_FsmManager.DestroyFsm(fsm);
  241. }
  242. }
  243. }