DefaultSetting.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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 System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Text;
  12. namespace UnityGameFramework.Runtime
  13. {
  14. /// <summary>
  15. /// 默认游戏配置。
  16. /// </summary>
  17. public sealed class DefaultSetting
  18. {
  19. private readonly SortedDictionary<string, string> m_Settings = new SortedDictionary<string, string>(StringComparer.Ordinal);
  20. /// <summary>
  21. /// 初始化本地版本资源列表的新实例。
  22. /// </summary>
  23. public DefaultSetting()
  24. {
  25. }
  26. /// <summary>
  27. /// 获取游戏配置项数量。
  28. /// </summary>
  29. public int Count
  30. {
  31. get
  32. {
  33. return m_Settings.Count;
  34. }
  35. }
  36. /// <summary>
  37. /// 获取所有游戏配置项的名称。
  38. /// </summary>
  39. /// <returns>所有游戏配置项的名称。</returns>
  40. public string[] GetAllSettingNames()
  41. {
  42. int index = 0;
  43. string[] allSettingNames = new string[m_Settings.Count];
  44. foreach (KeyValuePair<string, string> setting in m_Settings)
  45. {
  46. allSettingNames[index++] = setting.Key;
  47. }
  48. return allSettingNames;
  49. }
  50. /// <summary>
  51. /// 获取所有游戏配置项的名称。
  52. /// </summary>
  53. /// <param name="results">所有游戏配置项的名称。</param>
  54. public void GetAllSettingNames(List<string> results)
  55. {
  56. if (results == null)
  57. {
  58. throw new GameFrameworkException("Results is invalid.");
  59. }
  60. results.Clear();
  61. foreach (KeyValuePair<string, string> setting in m_Settings)
  62. {
  63. results.Add(setting.Key);
  64. }
  65. }
  66. /// <summary>
  67. /// 检查是否存在指定游戏配置项。
  68. /// </summary>
  69. /// <param name="settingName">要检查游戏配置项的名称。</param>
  70. /// <returns>指定的游戏配置项是否存在。</returns>
  71. public bool HasSetting(string settingName)
  72. {
  73. return m_Settings.ContainsKey(settingName);
  74. }
  75. /// <summary>
  76. /// 移除指定游戏配置项。
  77. /// </summary>
  78. /// <param name="settingName">要移除游戏配置项的名称。</param>
  79. /// <returns>是否移除指定游戏配置项成功。</returns>
  80. public bool RemoveSetting(string settingName)
  81. {
  82. return m_Settings.Remove(settingName);
  83. }
  84. /// <summary>
  85. /// 清空所有游戏配置项。
  86. /// </summary>
  87. public void RemoveAllSettings()
  88. {
  89. m_Settings.Clear();
  90. }
  91. /// <summary>
  92. /// 从指定游戏配置项中读取布尔值。
  93. /// </summary>
  94. /// <param name="settingName">要获取游戏配置项的名称。</param>
  95. /// <returns>读取的布尔值。</returns>
  96. public bool GetBool(string settingName)
  97. {
  98. string value = null;
  99. if (!m_Settings.TryGetValue(settingName, out value))
  100. {
  101. Log.Warning("Setting '{0}' is not exist.", settingName);
  102. return false;
  103. }
  104. return int.Parse(value) != 0;
  105. }
  106. /// <summary>
  107. /// 从指定游戏配置项中读取布尔值。
  108. /// </summary>
  109. /// <param name="settingName">要获取游戏配置项的名称。</param>
  110. /// <param name="defaultValue">当指定的游戏配置项不存在时,返回此默认值。</param>
  111. /// <returns>读取的布尔值。</returns>
  112. public bool GetBool(string settingName, bool defaultValue)
  113. {
  114. string value = null;
  115. if (!m_Settings.TryGetValue(settingName, out value))
  116. {
  117. return defaultValue;
  118. }
  119. return int.Parse(value) != 0;
  120. }
  121. /// <summary>
  122. /// 向指定游戏配置项写入布尔值。
  123. /// </summary>
  124. /// <param name="settingName">要写入游戏配置项的名称。</param>
  125. /// <param name="value">要写入的布尔值。</param>
  126. public void SetBool(string settingName, bool value)
  127. {
  128. m_Settings[settingName] = value ? "1" : "0";
  129. }
  130. /// <summary>
  131. /// 从指定游戏配置项中读取整数值。
  132. /// </summary>
  133. /// <param name="settingName">要获取游戏配置项的名称。</param>
  134. /// <returns>读取的整数值。</returns>
  135. public int GetInt(string settingName)
  136. {
  137. string value = null;
  138. if (!m_Settings.TryGetValue(settingName, out value))
  139. {
  140. Log.Warning("Setting '{0}' is not exist.", settingName);
  141. return 0;
  142. }
  143. return int.Parse(value);
  144. }
  145. /// <summary>
  146. /// 从指定游戏配置项中读取整数值。
  147. /// </summary>
  148. /// <param name="settingName">要获取游戏配置项的名称。</param>
  149. /// <param name="defaultValue">当指定的游戏配置项不存在时,返回此默认值。</param>
  150. /// <returns>读取的整数值。</returns>
  151. public int GetInt(string settingName, int defaultValue)
  152. {
  153. string value = null;
  154. if (!m_Settings.TryGetValue(settingName, out value))
  155. {
  156. return defaultValue;
  157. }
  158. return int.Parse(value);
  159. }
  160. /// <summary>
  161. /// 向指定游戏配置项写入整数值。
  162. /// </summary>
  163. /// <param name="settingName">要写入游戏配置项的名称。</param>
  164. /// <param name="value">要写入的整数值。</param>
  165. public void SetInt(string settingName, int value)
  166. {
  167. m_Settings[settingName] = value.ToString();
  168. }
  169. /// <summary>
  170. /// 从指定游戏配置项中读取浮点数值。
  171. /// </summary>
  172. /// <param name="settingName">要获取游戏配置项的名称。</param>
  173. /// <returns>读取的浮点数值。</returns>
  174. public float GetFloat(string settingName)
  175. {
  176. string value = null;
  177. if (!m_Settings.TryGetValue(settingName, out value))
  178. {
  179. Log.Warning("Setting '{0}' is not exist.", settingName);
  180. return 0f;
  181. }
  182. return float.Parse(value);
  183. }
  184. /// <summary>
  185. /// 从指定游戏配置项中读取浮点数值。
  186. /// </summary>
  187. /// <param name="settingName">要获取游戏配置项的名称。</param>
  188. /// <param name="defaultValue">当指定的游戏配置项不存在时,返回此默认值。</param>
  189. /// <returns>读取的浮点数值。</returns>
  190. public float GetFloat(string settingName, float defaultValue)
  191. {
  192. string value = null;
  193. if (!m_Settings.TryGetValue(settingName, out value))
  194. {
  195. return defaultValue;
  196. }
  197. return float.Parse(value);
  198. }
  199. /// <summary>
  200. /// 向指定游戏配置项写入浮点数值。
  201. /// </summary>
  202. /// <param name="settingName">要写入游戏配置项的名称。</param>
  203. /// <param name="value">要写入的浮点数值。</param>
  204. public void SetFloat(string settingName, float value)
  205. {
  206. m_Settings[settingName] = value.ToString();
  207. }
  208. /// <summary>
  209. /// 从指定游戏配置项中读取字符串值。
  210. /// </summary>
  211. /// <param name="settingName">要获取游戏配置项的名称。</param>
  212. /// <returns>读取的字符串值。</returns>
  213. public string GetString(string settingName)
  214. {
  215. string value = null;
  216. if (!m_Settings.TryGetValue(settingName, out value))
  217. {
  218. Log.Warning("Setting '{0}' is not exist.", settingName);
  219. return null;
  220. }
  221. return value;
  222. }
  223. /// <summary>
  224. /// 从指定游戏配置项中读取字符串值。
  225. /// </summary>
  226. /// <param name="settingName">要获取游戏配置项的名称。</param>
  227. /// <param name="defaultValue">当指定的游戏配置项不存在时,返回此默认值。</param>
  228. /// <returns>读取的字符串值。</returns>
  229. public string GetString(string settingName, string defaultValue)
  230. {
  231. string value = null;
  232. if (!m_Settings.TryGetValue(settingName, out value))
  233. {
  234. return defaultValue;
  235. }
  236. return value;
  237. }
  238. /// <summary>
  239. /// 向指定游戏配置项写入字符串值。
  240. /// </summary>
  241. /// <param name="settingName">要写入游戏配置项的名称。</param>
  242. /// <param name="value">要写入的字符串值。</param>
  243. public void SetString(string settingName, string value)
  244. {
  245. m_Settings[settingName] = value;
  246. }
  247. /// <summary>
  248. /// 序列化数据。
  249. /// </summary>
  250. /// <param name="stream">目标流。</param>
  251. public void Serialize(Stream stream)
  252. {
  253. using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8))
  254. {
  255. binaryWriter.Write7BitEncodedInt32(m_Settings.Count);
  256. foreach (KeyValuePair<string, string> setting in m_Settings)
  257. {
  258. binaryWriter.Write(setting.Key);
  259. binaryWriter.Write(setting.Value);
  260. }
  261. }
  262. }
  263. /// <summary>
  264. /// 反序列化数据。
  265. /// </summary>
  266. /// <param name="stream">指定流。</param>
  267. public void Deserialize(Stream stream)
  268. {
  269. m_Settings.Clear();
  270. using (BinaryReader binaryReader = new BinaryReader(stream, Encoding.UTF8))
  271. {
  272. int settingCount = binaryReader.Read7BitEncodedInt32();
  273. for (int i = 0; i < settingCount; i++)
  274. {
  275. m_Settings.Add(binaryReader.ReadString(), binaryReader.ReadString());
  276. }
  277. }
  278. }
  279. }
  280. }