ConfigComponent.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  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.Config;
  9. using GameFramework.Resource;
  10. using UnityEngine;
  11. namespace UnityGameFramework.Runtime
  12. {
  13. /// <summary>
  14. /// 全局配置组件。
  15. /// </summary>
  16. [DisallowMultipleComponent]
  17. [AddComponentMenu("Game Framework/Config")]
  18. public sealed class ConfigComponent : GameFrameworkComponent
  19. {
  20. private const int DefaultPriority = 0;
  21. private IConfigManager m_ConfigManager = null;
  22. private EventComponent m_EventComponent = null;
  23. [SerializeField]
  24. private bool m_EnableLoadConfigUpdateEvent = false;
  25. [SerializeField]
  26. private bool m_EnableLoadConfigDependencyAssetEvent = false;
  27. [SerializeField]
  28. private string m_ConfigHelperTypeName = "UnityGameFramework.Runtime.DefaultConfigHelper";
  29. [SerializeField]
  30. private ConfigHelperBase m_CustomConfigHelper = null;
  31. [SerializeField]
  32. private int m_CachedBytesSize = 0;
  33. /// <summary>
  34. /// 获取全局配置项数量。
  35. /// </summary>
  36. public int Count
  37. {
  38. get
  39. {
  40. return m_ConfigManager.Count;
  41. }
  42. }
  43. /// <summary>
  44. /// 获取缓冲二进制流的大小。
  45. /// </summary>
  46. public int CachedBytesSize
  47. {
  48. get
  49. {
  50. return m_ConfigManager.CachedBytesSize;
  51. }
  52. }
  53. /// <summary>
  54. /// 游戏框架组件初始化。
  55. /// </summary>
  56. protected override void Awake()
  57. {
  58. base.Awake();
  59. m_ConfigManager = GameFrameworkEntry.GetModule<IConfigManager>();
  60. if (m_ConfigManager == null)
  61. {
  62. Log.Fatal("Config manager is invalid.");
  63. return;
  64. }
  65. m_ConfigManager.ReadDataSuccess += OnReadDataSuccess;
  66. m_ConfigManager.ReadDataFailure += OnReadDataFailure;
  67. if (m_EnableLoadConfigUpdateEvent)
  68. {
  69. m_ConfigManager.ReadDataUpdate += OnReadDataUpdate;
  70. }
  71. if (m_EnableLoadConfigDependencyAssetEvent)
  72. {
  73. m_ConfigManager.ReadDataDependencyAsset += OnReadDataDependencyAsset;
  74. }
  75. }
  76. private void Start()
  77. {
  78. BaseComponent baseComponent = GameEntry.GetComponent<BaseComponent>();
  79. if (baseComponent == null)
  80. {
  81. Log.Fatal("Base component is invalid.");
  82. return;
  83. }
  84. m_EventComponent = GameEntry.GetComponent<EventComponent>();
  85. if (m_EventComponent == null)
  86. {
  87. Log.Fatal("Event component is invalid.");
  88. return;
  89. }
  90. if (baseComponent.EditorResourceMode)
  91. {
  92. m_ConfigManager.SetResourceManager(baseComponent.EditorResourceHelper);
  93. }
  94. else
  95. {
  96. m_ConfigManager.SetResourceManager(GameFrameworkEntry.GetModule<IResourceManager>());
  97. }
  98. ConfigHelperBase configHelper = Helper.CreateHelper(m_ConfigHelperTypeName, m_CustomConfigHelper);
  99. if (configHelper == null)
  100. {
  101. Log.Error("Can not create config helper.");
  102. return;
  103. }
  104. configHelper.name = "Config Helper";
  105. Transform transform = configHelper.transform;
  106. transform.SetParent(this.transform);
  107. transform.localScale = Vector3.one;
  108. m_ConfigManager.SetDataProviderHelper(configHelper);
  109. m_ConfigManager.SetConfigHelper(configHelper);
  110. if (m_CachedBytesSize > 0)
  111. {
  112. EnsureCachedBytesSize(m_CachedBytesSize);
  113. }
  114. }
  115. /// <summary>
  116. /// 确保二进制流缓存分配足够大小的内存并缓存。
  117. /// </summary>
  118. /// <param name="ensureSize">要确保二进制流缓存分配内存的大小。</param>
  119. public void EnsureCachedBytesSize(int ensureSize)
  120. {
  121. m_ConfigManager.EnsureCachedBytesSize(ensureSize);
  122. }
  123. /// <summary>
  124. /// 释放缓存的二进制流。
  125. /// </summary>
  126. public void FreeCachedBytes()
  127. {
  128. m_ConfigManager.FreeCachedBytes();
  129. }
  130. /// <summary>
  131. /// 读取全局配置。
  132. /// </summary>
  133. /// <param name="configAssetName">全局配置资源名称。</param>
  134. public void ReadData(string configAssetName)
  135. {
  136. m_ConfigManager.ReadData(configAssetName);
  137. }
  138. /// <summary>
  139. /// 读取全局配置。
  140. /// </summary>
  141. /// <param name="configAssetName">全局配置资源名称。</param>
  142. /// <param name="priority">加载全局配置资源的优先级。</param>
  143. public void ReadData(string configAssetName, int priority)
  144. {
  145. m_ConfigManager.ReadData(configAssetName, priority);
  146. }
  147. /// <summary>
  148. /// 读取全局配置。
  149. /// </summary>
  150. /// <param name="configAssetName">全局配置资源名称。</param>
  151. /// <param name="userData">用户自定义数据。</param>
  152. public void ReadData(string configAssetName, object userData)
  153. {
  154. m_ConfigManager.ReadData(configAssetName, userData);
  155. }
  156. /// <summary>
  157. /// 读取全局配置。
  158. /// </summary>
  159. /// <param name="configAssetName">全局配置资源名称。</param>
  160. /// <param name="priority">加载全局配置资源的优先级。</param>
  161. /// <param name="userData">用户自定义数据。</param>
  162. public void ReadData(string configAssetName, int priority, object userData)
  163. {
  164. m_ConfigManager.ReadData(configAssetName, priority, userData);
  165. }
  166. /// <summary>
  167. /// 解析全局配置。
  168. /// </summary>
  169. /// <param name="configString">要解析的全局配置字符串。</param>
  170. /// <returns>是否解析全局配置成功。</returns>
  171. public bool ParseData(string configString)
  172. {
  173. return m_ConfigManager.ParseData(configString);
  174. }
  175. /// <summary>
  176. /// 解析全局配置。
  177. /// </summary>
  178. /// <param name="configString">要解析的全局配置字符串。</param>
  179. /// <param name="userData">用户自定义数据。</param>
  180. /// <returns>是否解析全局配置成功。</returns>
  181. public bool ParseData(string configString, object userData)
  182. {
  183. return m_ConfigManager.ParseData(configString, userData);
  184. }
  185. /// <summary>
  186. /// 解析全局配置。
  187. /// </summary>
  188. /// <param name="configBytes">要解析的全局配置二进制流。</param>
  189. /// <returns>是否解析全局配置成功。</returns>
  190. public bool ParseData(byte[] configBytes)
  191. {
  192. return m_ConfigManager.ParseData(configBytes);
  193. }
  194. /// <summary>
  195. /// 解析全局配置。
  196. /// </summary>
  197. /// <param name="configBytes">要解析的全局配置二进制流。</param>
  198. /// <param name="userData">用户自定义数据。</param>
  199. /// <returns>是否解析全局配置成功。</returns>
  200. public bool ParseData(byte[] configBytes, object userData)
  201. {
  202. return m_ConfigManager.ParseData(configBytes, userData);
  203. }
  204. /// <summary>
  205. /// 解析全局配置。
  206. /// </summary>
  207. /// <param name="configBytes">要解析的全局配置二进制流。</param>
  208. /// <param name="startIndex">全局配置二进制流的起始位置。</param>
  209. /// <param name="length">全局配置二进制流的长度。</param>
  210. /// <returns>是否解析全局配置成功。</returns>
  211. public bool ParseData(byte[] configBytes, int startIndex, int length)
  212. {
  213. return m_ConfigManager.ParseData(configBytes, startIndex, length);
  214. }
  215. /// <summary>
  216. /// 解析全局配置。
  217. /// </summary>
  218. /// <param name="configBytes">要解析的全局配置二进制流。</param>
  219. /// <param name="startIndex">全局配置二进制流的起始位置。</param>
  220. /// <param name="length">全局配置二进制流的长度。</param>
  221. /// <param name="userData">用户自定义数据。</param>
  222. /// <returns>是否解析全局配置成功。</returns>
  223. public bool ParseData(byte[] configBytes, int startIndex, int length, object userData)
  224. {
  225. return m_ConfigManager.ParseData(configBytes, startIndex, length, userData);
  226. }
  227. /// <summary>
  228. /// 检查是否存在指定全局配置项。
  229. /// </summary>
  230. /// <param name="configName">要检查全局配置项的名称。</param>
  231. /// <returns>指定的全局配置项是否存在。</returns>
  232. public bool HasConfig(string configName)
  233. {
  234. return m_ConfigManager.HasConfig(configName);
  235. }
  236. /// <summary>
  237. /// 从指定全局配置项中读取布尔值。
  238. /// </summary>
  239. /// <param name="configName">要获取全局配置项的名称。</param>
  240. /// <returns>读取的布尔值。</returns>
  241. public bool GetBool(string configName)
  242. {
  243. return m_ConfigManager.GetBool(configName);
  244. }
  245. /// <summary>
  246. /// 从指定全局配置项中读取布尔值。
  247. /// </summary>
  248. /// <param name="configName">要获取全局配置项的名称。</param>
  249. /// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
  250. /// <returns>读取的布尔值。</returns>
  251. public bool GetBool(string configName, bool defaultValue)
  252. {
  253. return m_ConfigManager.GetBool(configName, defaultValue);
  254. }
  255. /// <summary>
  256. /// 从指定全局配置项中读取整数值。
  257. /// </summary>
  258. /// <param name="configName">要获取全局配置项的名称。</param>
  259. /// <returns>读取的整数值。</returns>
  260. public int GetInt(string configName)
  261. {
  262. return m_ConfigManager.GetInt(configName);
  263. }
  264. /// <summary>
  265. /// 从指定全局配置项中读取整数值。
  266. /// </summary>
  267. /// <param name="configName">要获取全局配置项的名称。</param>
  268. /// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
  269. /// <returns>读取的整数值。</returns>
  270. public int GetInt(string configName, int defaultValue)
  271. {
  272. return m_ConfigManager.GetInt(configName, defaultValue);
  273. }
  274. /// <summary>
  275. /// 从指定全局配置项中读取浮点数值。
  276. /// </summary>
  277. /// <param name="configName">要获取全局配置项的名称。</param>
  278. /// <returns>读取的浮点数值。</returns>
  279. public float GetFloat(string configName)
  280. {
  281. return m_ConfigManager.GetFloat(configName);
  282. }
  283. /// <summary>
  284. /// 从指定全局配置项中读取浮点数值。
  285. /// </summary>
  286. /// <param name="configName">要获取全局配置项的名称。</param>
  287. /// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
  288. /// <returns>读取的浮点数值。</returns>
  289. public float GetFloat(string configName, float defaultValue)
  290. {
  291. return m_ConfigManager.GetFloat(configName, defaultValue);
  292. }
  293. /// <summary>
  294. /// 从指定全局配置项中读取字符串值。
  295. /// </summary>
  296. /// <param name="configName">要获取全局配置项的名称。</param>
  297. /// <returns>读取的字符串值。</returns>
  298. public string GetString(string configName)
  299. {
  300. return m_ConfigManager.GetString(configName);
  301. }
  302. /// <summary>
  303. /// 从指定全局配置项中读取字符串值。
  304. /// </summary>
  305. /// <param name="configName">要获取全局配置项的名称。</param>
  306. /// <param name="defaultValue">当指定的全局配置项不存在时,返回此默认值。</param>
  307. /// <returns>读取的字符串值。</returns>
  308. public string GetString(string configName, string defaultValue)
  309. {
  310. return m_ConfigManager.GetString(configName, defaultValue);
  311. }
  312. /// <summary>
  313. /// 增加指定全局配置项。
  314. /// </summary>
  315. /// <param name="configName">要增加全局配置项的名称。</param>
  316. /// <param name="boolValue">全局配置项布尔值。</param>
  317. /// <param name="intValue">全局配置项整数值。</param>
  318. /// <param name="floatValue">全局配置项浮点数值。</param>
  319. /// <param name="stringValue">全局配置项字符串值。</param>
  320. /// <returns>是否增加全局配置项成功。</returns>
  321. public bool AddConfig(string configName, bool boolValue, int intValue, float floatValue, string stringValue)
  322. {
  323. return m_ConfigManager.AddConfig(configName, boolValue, intValue, floatValue, stringValue);
  324. }
  325. /// <summary>
  326. /// 移除指定全局配置项。
  327. /// </summary>
  328. /// <param name="configName">要移除全局配置项的名称。</param>
  329. /// <returns>是否移除全局配置项成功。</returns>
  330. public bool RemoveConfig(string configName)
  331. {
  332. return m_ConfigManager.RemoveConfig(configName);
  333. }
  334. /// <summary>
  335. /// 清空所有全局配置项。
  336. /// </summary>
  337. public void RemoveAllConfigs()
  338. {
  339. m_ConfigManager.RemoveAllConfigs();
  340. }
  341. private void OnReadDataSuccess(object sender, ReadDataSuccessEventArgs e)
  342. {
  343. m_EventComponent.Fire(this, LoadConfigSuccessEventArgs.Create(e));
  344. }
  345. private void OnReadDataFailure(object sender, ReadDataFailureEventArgs e)
  346. {
  347. Log.Warning("Load config failure, asset name '{0}', error message '{1}'.", e.DataAssetName, e.ErrorMessage);
  348. m_EventComponent.Fire(this, LoadConfigFailureEventArgs.Create(e));
  349. }
  350. private void OnReadDataUpdate(object sender, ReadDataUpdateEventArgs e)
  351. {
  352. m_EventComponent.Fire(this, LoadConfigUpdateEventArgs.Create(e));
  353. }
  354. private void OnReadDataDependencyAsset(object sender, ReadDataDependencyAssetEventArgs e)
  355. {
  356. m_EventComponent.Fire(this, LoadConfigDependencyAssetEventArgs.Create(e));
  357. }
  358. }
  359. }