using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
using System;
using System.Text.RegularExpressions;
///
/// 服务端Setting配置,存储一些快捷设置,目前长度为100
///
[XLua.LuaCallCSharp]
public class QuickSetting : Singleton
{
public QuickSetting()
{
quickSettingDic.Add(QuickSettingType.Skill, new QuickSettingRange(QuickSettingType.Skill, 30, 3));
quickSettingDic.Add(QuickSettingType.FairyLeagueGuide, new QuickSettingRange(QuickSettingType.FairyLeagueGuide, 1));
quickSettingDic.Add(QuickSettingType.AutoUseXp, new QuickSettingRange(QuickSettingType.AutoUseXp, 1));
quickSettingDic.Add(QuickSettingType.SpAnim, new QuickSettingRange(QuickSettingType.SpAnim, 10));
quickSettingDic.Add(QuickSettingType.TreasureHighestAnim, new QuickSettingRange(QuickSettingType.TreasureHighestAnim, 10));
quickSettingDic.Add(QuickSettingType.GatherSoulAutoResolve, new QuickSettingRange(QuickSettingType.GatherSoulAutoResolve, 1));
setting = new string(UCharacter, 100);
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent;
}
public Dictionary quickSettingDic = new Dictionary();
public const char UCharacter = '*';
private string setting;
private StringBuilder textBuilder = new StringBuilder();
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(QuickSettingType type, string value, int index)
{
var quickRange = quickSettingDic[type];
if (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));
PlayerDatas.Instance.baseData.Setting = setting;
}
PlayerDatas.Instance.skill.SetQuickSkills();
}
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 void SendPackage()
{
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,
FairyLeagueGuide,
AutoUseXp,
SpAnim,
TreasureHighestAnim,
GatherSoulAutoResolve
}
public struct QuickSettingRange
{
private static int presentIndex = 0;
public QuickSettingType type;
public int index;
public int length;
public int single;
public QuickSettingRange(QuickSettingType type, int length, int single = 0)
{
this.type = type;
this.index = presentIndex;
this.length = length;
this.single = single == 0 ? length : single;
presentIndex += length;
}
}
}