少年修仙传客户端代码仓库
Core/GameEngine/Model/Config/EquipStarConfig.cs
@@ -1,256 +1,260 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           Wednesday, July 17, 2019
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
public partial class EquipStarConfig
{
    public readonly int ID;
   public readonly int Level;
   public readonly int EquipPlace;
   public readonly int Star;
   public readonly int[] CostEquipPlace;
   public readonly int IsJobLimit;
   public readonly int[] CostEquipColor;
   public readonly int CostEquipCnt;
   public readonly int UnSuitRate;
   public readonly int SuitRate;
   public readonly Int2 CostItemDict;
   public readonly Int2[] StarAttrInfo;
   public readonly Int2[] BaseAttrInfo;
   public EquipStarConfig()
    {
    }
    public EquipStarConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out ID);
         int.TryParse(tables[1],out Level);
         int.TryParse(tables[2],out EquipPlace);
         int.TryParse(tables[3],out Star);
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           2023年10月18日
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
public partial class EquipStarConfig
{
    public readonly int ID;
   public readonly int Level;
   public readonly int EquipPlace;
   public readonly int Star;
   public readonly int[] CostEquipPlace;
   public readonly int IsJobLimit;
   public readonly int[] CostEquipColor;
   public readonly int CostEquipCnt;
   public readonly int UnSuitRate;
   public readonly int SuitRate;
   public readonly Int2[] CostItemDict;
   public readonly Int2[] StarAttrInfo;
   public readonly Int2[] BaseAttrInfo;
   public EquipStarConfig()
    {
    }
    public EquipStarConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out ID);
         int.TryParse(tables[1],out Level);
         int.TryParse(tables[2],out EquipPlace);
         int.TryParse(tables[3],out Star);
         string[] CostEquipPlaceStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
         CostEquipPlace = new int[CostEquipPlaceStringArray.Length];
         for (int i=0;i<CostEquipPlaceStringArray.Length;i++)
         {
             int.TryParse(CostEquipPlaceStringArray[i],out CostEquipPlace[i]);
         }
         int.TryParse(tables[5],out IsJobLimit);
         }
         int.TryParse(tables[5],out IsJobLimit);
         string[] CostEquipColorStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
         CostEquipColor = new int[CostEquipColorStringArray.Length];
         for (int i=0;i<CostEquipColorStringArray.Length;i++)
         {
             int.TryParse(CostEquipColorStringArray[i],out CostEquipColor[i]);
         }
         int.TryParse(tables[7],out CostEquipCnt);
         int.TryParse(tables[8],out UnSuitRate);
         int.TryParse(tables[9],out SuitRate);
         Int2.TryParse(tables[10],out CostItemDict);
         }
         int.TryParse(tables[7],out CostEquipCnt);
         int.TryParse(tables[8],out UnSuitRate);
         int.TryParse(tables[9],out SuitRate);
         string[] CostItemDictStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
         CostItemDict = new Int2[CostItemDictStringArray.Length];
         for (int i=0;i<CostItemDictStringArray.Length;i++)
         {
             Int2.TryParse(CostItemDictStringArray[i],out CostItemDict[i]);
         }
         string[] StarAttrInfoStringArray = tables[11].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
         StarAttrInfo = new Int2[StarAttrInfoStringArray.Length];
         for (int i=0;i<StarAttrInfoStringArray.Length;i++)
         {
             Int2.TryParse(StarAttrInfoStringArray[i],out StarAttrInfo[i]);
         }
         }
         string[] BaseAttrInfoStringArray = tables[12].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
         BaseAttrInfo = new Int2[BaseAttrInfoStringArray.Length];
         for (int i=0;i<BaseAttrInfoStringArray.Length;i++)
         {
             Int2.TryParse(BaseAttrInfoStringArray[i],out BaseAttrInfo[i]);
         }
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, EquipStarConfig> configs = new Dictionary<string, EquipStarConfig>();
    public static EquipStarConfig Get(string id)
    {
      if (!inited)
        {
            Debug.Log("EquipStarConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        EquipStarConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new EquipStarConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
   public static EquipStarConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<EquipStarConfig> GetValues()
    {
        var values = new List<EquipStarConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        foreach (var key in keys)
        {
            values.Add(Get(key));
        }
        return values;
    }
   public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
   public static bool Has(int id)
    {
        return Has(id.ToString());
    }
   public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
       inited = false;
      var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/EquipStar.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/EquipStar.txt");
        }
        configs.Clear();
      var tempConfig = new EquipStarConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
            try
            {
               var line = lines[i];
               var index = line.IndexOf("\t");
               if (index == -1)
               {
                  continue;
               }
               var id = line.Substring(0, index);
               if (preParse)
               {
                  var config = new EquipStarConfig(line);
                  configs[id] = config;
                  (config as IConfigPostProcess).OnConfigParseCompleted();
               }
               else
               {
                  rawDatas[id] = line;
               }
            }
            catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
         inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
            if (!preParse)
            {
               rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
                for (int i = 3; i < lines.Length; i++)
                {
               try
               {
                  var line = lines[i];
                  var index = line.IndexOf("\t");
                  if (index == -1)
                  {
                     continue;
                  }
                  var id = line.Substring(0, index);
                  if (preParse)
                  {
                     var config = new EquipStarConfig(line);
                     configs[id] = config;
                     (config as IConfigPostProcess).OnConfigParseCompleted();
                  }
                  else
                  {
                     rawDatas[id] = line;
                  }
               }
               catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
         }
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, EquipStarConfig> configs = new Dictionary<string, EquipStarConfig>();
    public static EquipStarConfig Get(string id)
    {
      if (!inited)
        {
            Debug.Log("EquipStarConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        EquipStarConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new EquipStarConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
   public static EquipStarConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<EquipStarConfig> GetValues()
    {
        var values = new List<EquipStarConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        for (int i = 0; i < keys.Count; i++)
        {
            values.Add(Get(keys[i]));
        }
        return values;
    }
   public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
   public static bool Has(int id)
    {
        return Has(id.ToString());
    }
   public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
       inited = false;
      var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/EquipStar.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/EquipStar.txt");
        }
        configs.Clear();
      var tempConfig = new EquipStarConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
            try
            {
               var line = lines[i];
               var index = line.IndexOf("\t");
               if (index == -1)
               {
                  continue;
               }
               var id = line.Substring(0, index);
               if (preParse)
               {
                  var config = new EquipStarConfig(line);
                  configs[id] = config;
                  (config as IConfigPostProcess).OnConfigParseCompleted();
               }
               else
               {
                  rawDatas[id] = line;
               }
            }
            catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
         inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
            if (!preParse)
            {
               rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
                for (int i = 3; i < lines.Length; i++)
                {
               try
               {
                  var line = lines[i];
                  var index = line.IndexOf("\t");
                  if (index == -1)
                  {
                     continue;
                  }
                  var id = line.Substring(0, index);
                  if (preParse)
                  {
                     var config = new EquipStarConfig(line);
                     configs[id] = config;
                     (config as IConfigPostProcess).OnConfigParseCompleted();
                  }
                  else
                  {
                     rawDatas[id] = line;
                  }
               }
               catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}