//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 loyalsoft. All rights reserved. // Homepage: http://www.game7000.com/ // Feedback: http://www.game7000.com/ //------------------------------------------------------------ using GameFramework; using System; using System.Collections.Generic; using System.IO; using System.Text; namespace UnityGameFramework.Runtime { /// /// 默认游戏配置。 /// public sealed class DefaultSetting { private readonly SortedDictionary m_Settings = new SortedDictionary(StringComparer.Ordinal); /// /// 初始化本地版本资源列表的新实例。 /// public DefaultSetting() { } /// /// 获取游戏配置项数量。 /// public int Count { get { return m_Settings.Count; } } /// /// 获取所有游戏配置项的名称。 /// /// 所有游戏配置项的名称。 public string[] GetAllSettingNames() { int index = 0; string[] allSettingNames = new string[m_Settings.Count]; foreach (KeyValuePair setting in m_Settings) { allSettingNames[index++] = setting.Key; } return allSettingNames; } /// /// 获取所有游戏配置项的名称。 /// /// 所有游戏配置项的名称。 public void GetAllSettingNames(List results) { if (results == null) { throw new GameFrameworkException("Results is invalid."); } results.Clear(); foreach (KeyValuePair setting in m_Settings) { results.Add(setting.Key); } } /// /// 检查是否存在指定游戏配置项。 /// /// 要检查游戏配置项的名称。 /// 指定的游戏配置项是否存在。 public bool HasSetting(string settingName) { return m_Settings.ContainsKey(settingName); } /// /// 移除指定游戏配置项。 /// /// 要移除游戏配置项的名称。 /// 是否移除指定游戏配置项成功。 public bool RemoveSetting(string settingName) { return m_Settings.Remove(settingName); } /// /// 清空所有游戏配置项。 /// public void RemoveAllSettings() { m_Settings.Clear(); } /// /// 从指定游戏配置项中读取布尔值。 /// /// 要获取游戏配置项的名称。 /// 读取的布尔值。 public bool GetBool(string settingName) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { Log.Warning("Setting '{0}' is not exist.", settingName); return false; } return int.Parse(value) != 0; } /// /// 从指定游戏配置项中读取布尔值。 /// /// 要获取游戏配置项的名称。 /// 当指定的游戏配置项不存在时,返回此默认值。 /// 读取的布尔值。 public bool GetBool(string settingName, bool defaultValue) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { return defaultValue; } return int.Parse(value) != 0; } /// /// 向指定游戏配置项写入布尔值。 /// /// 要写入游戏配置项的名称。 /// 要写入的布尔值。 public void SetBool(string settingName, bool value) { m_Settings[settingName] = value ? "1" : "0"; } /// /// 从指定游戏配置项中读取整数值。 /// /// 要获取游戏配置项的名称。 /// 读取的整数值。 public int GetInt(string settingName) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { Log.Warning("Setting '{0}' is not exist.", settingName); return 0; } return int.Parse(value); } /// /// 从指定游戏配置项中读取整数值。 /// /// 要获取游戏配置项的名称。 /// 当指定的游戏配置项不存在时,返回此默认值。 /// 读取的整数值。 public int GetInt(string settingName, int defaultValue) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { return defaultValue; } return int.Parse(value); } /// /// 向指定游戏配置项写入整数值。 /// /// 要写入游戏配置项的名称。 /// 要写入的整数值。 public void SetInt(string settingName, int value) { m_Settings[settingName] = value.ToString(); } /// /// 从指定游戏配置项中读取浮点数值。 /// /// 要获取游戏配置项的名称。 /// 读取的浮点数值。 public float GetFloat(string settingName) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { Log.Warning("Setting '{0}' is not exist.", settingName); return 0f; } return float.Parse(value); } /// /// 从指定游戏配置项中读取浮点数值。 /// /// 要获取游戏配置项的名称。 /// 当指定的游戏配置项不存在时,返回此默认值。 /// 读取的浮点数值。 public float GetFloat(string settingName, float defaultValue) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { return defaultValue; } return float.Parse(value); } /// /// 向指定游戏配置项写入浮点数值。 /// /// 要写入游戏配置项的名称。 /// 要写入的浮点数值。 public void SetFloat(string settingName, float value) { m_Settings[settingName] = value.ToString(); } /// /// 从指定游戏配置项中读取字符串值。 /// /// 要获取游戏配置项的名称。 /// 读取的字符串值。 public string GetString(string settingName) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { Log.Warning("Setting '{0}' is not exist.", settingName); return null; } return value; } /// /// 从指定游戏配置项中读取字符串值。 /// /// 要获取游戏配置项的名称。 /// 当指定的游戏配置项不存在时,返回此默认值。 /// 读取的字符串值。 public string GetString(string settingName, string defaultValue) { string value = null; if (!m_Settings.TryGetValue(settingName, out value)) { return defaultValue; } return value; } /// /// 向指定游戏配置项写入字符串值。 /// /// 要写入游戏配置项的名称。 /// 要写入的字符串值。 public void SetString(string settingName, string value) { m_Settings[settingName] = value; } /// /// 序列化数据。 /// /// 目标流。 public void Serialize(Stream stream) { using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.UTF8)) { binaryWriter.Write7BitEncodedInt32(m_Settings.Count); foreach (KeyValuePair setting in m_Settings) { binaryWriter.Write(setting.Key); binaryWriter.Write(setting.Value); } } } /// /// 反序列化数据。 /// /// 指定流。 public void Deserialize(Stream stream) { m_Settings.Clear(); using (BinaryReader binaryReader = new BinaryReader(stream, Encoding.UTF8)) { int settingCount = binaryReader.Read7BitEncodedInt32(); for (int i = 0; i < settingCount; i++) { m_Settings.Add(binaryReader.ReadString(), binaryReader.ReadString()); } } } } }