using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Text; using System; using System.Text.RegularExpressions; /// /// 服务端Setting配置,存储一些快捷设置,目前长度为100 /// public class QuickSetting : Singleton { public QuickSetting() { quickSettingDic.Add(QuickSettingType.Skill, new QuickSettingRange(QuickSettingType.Skill, 0, 30, 3)); quickSettingDic.Add(QuickSettingType.SkillMatchPage, new QuickSettingRange(QuickSettingType.SkillMatchPage, 30, 1)); quickSettingDic.Add(QuickSettingType.AutoUseXp, new QuickSettingRange(QuickSettingType.AutoUseXp, 31, 1)); quickSettingDic.Add(QuickSettingType.SkillMatch, new QuickSettingRange(QuickSettingType.SkillMatch, 32, 45, 1)); quickSettingDic.Add(QuickSettingType.GatherSoulAutoResolve, new QuickSettingRange(QuickSettingType.GatherSoulAutoResolve, 80, 1)); setting = new string(UCharacter, 100); DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; } public Dictionary quickSettingDic = new Dictionary(); public const char UCharacter = '*'; private string setting; private string cacheSetting; private StringBuilder textBuilder = new StringBuilder(); public event Action onQuickSettingUpdate; public void SetQuickSetting(QuickSettingType type, T value, int index = 0) where T : struct { SetQuickSetting(type, value.ToString(), index); } public void SetQuickSetting(QuickSettingType type, bool value, int index = 0) { SetQuickSetting(type, value ? 1 : 0, index); } public void SetQuickSetting(int type, string value, int index) { SetQuickSetting((QuickSettingType)type, value, index); } public void SetQuickSetting(QuickSettingType type, string value, int index) { var quickRange = quickSettingDic[type]; if (type == QuickSettingType.Skill && quickRange.single > value.Length && !string.IsNullOrEmpty(value)) { //技能的value 补充* 使其长度为3 value = StringUtility.Contact(value, new string(UCharacter, quickRange.single - value.Length)); } if ((index - quickRange.index) * quickRange.single + value.Length > quickRange.length || value.Length > quickRange.single) { DebugEx.LogErrorFormat("存储的数据超过最大长度!{0}", type); return; } textBuilder.Length = 0; var start = quickRange.index + index * quickRange.single; var end = start + value.Length; if (quickRange.length == quickRange.single) { end = start + quickRange.length; } textBuilder.Append(setting, 0, start); textBuilder.Append(value); if (quickRange.length == quickRange.single && quickRange.length > value.Length) { textBuilder.Append('*', quickRange.length - value.Length); } textBuilder.Append(setting, end, setting.Length - end); setting = textBuilder.ToString(); PlayerDatas.Instance.baseData.Setting = setting; } public void SetQuickSetting(string value) { value = UIHelper.ServerStringTrim(value); if (value != null && value.Length > 0) { setting = StringUtility.Contact(value, setting.Substring(value.Length, setting.Length - value.Length)); cacheSetting = setting; PlayerDatas.Instance.baseData.Setting = setting; } PlayerDatas.Instance.skill.SetQuickSkills(); if (onQuickSettingUpdate != null) { onQuickSettingUpdate(); } } public T GetQuickSettingValue(QuickSettingType type, int index) where T : struct { string destinationStr = GetQuickSetting(type, index); if (string.IsNullOrEmpty(destinationStr)) { return default(T); } return (T)Convert.ChangeType(destinationStr, typeof(T)); } public string GetQuickSetting(QuickSettingType type, int index) { var quickRange = quickSettingDic[type]; var start = quickRange.index + index * quickRange.single; var destinationStr = setting.Substring(start, quickRange.single); destinationStr = Regex.Replace(destinationStr, @"\*", string.Empty); return destinationStr; } public bool GetQuickSettingBool(QuickSettingType type, int index, bool _default = false) { string destinationStr = GetQuickSetting(type, index); if (string.IsNullOrEmpty(destinationStr)) { return _default; } int _value = _default ? 1 : 0; int.TryParse(destinationStr, out _value); return _value == 1; } public string GetQuickSetting(int type, int index) { return GetQuickSetting((QuickSettingType)type, index); } public void SendPackage() { if (cacheSetting != setting) { cacheSetting = setting; C0303_tagCSetShutCutData vNetData = new C0303_tagCSetShutCutData(); vNetData.Setting = setting; GameNetSystem.Instance.SendInfo(vNetData); } } private void BeforePlayerDataInitializeEvent() { setting = null; setting = new string(UCharacter, 100); PlayerDatas.Instance.baseData.Setting = setting; } public enum QuickSettingType { Skill, SkillMatchPage, AutoUseXp, SkillMatch, GatherSoulAutoResolve } public struct QuickSettingRange { public QuickSettingType type; public int index; public int length; public int single; public QuickSettingRange(QuickSettingType type, int start, int length, int single = 0) { this.type = type; this.index = start; this.length = length; this.single = single == 0 ? length : single; } } }