| //--------------------------------------------------------  | 
| //    [Author]:           Fish  | 
| //    [  Date ]:           Wednesday, August 14, 2024  | 
| //--------------------------------------------------------  | 
|   | 
| using System.Collections.Generic;  | 
| using System.IO;  | 
| using System.Threading;  | 
| using System;  | 
| using UnityEngine;  | 
| using LitJson;  | 
|   | 
| public partial class ILGubaoStarConfig  | 
| {  | 
|   | 
|     public readonly int ID;  | 
|     public readonly int GubaoID;  | 
|     public readonly int GubaoStar;  | 
|     public readonly string StarUPNeedItem;  | 
|     public readonly string StarUPNeedQualityPiece;  | 
|     public readonly int[] StarAttrIDList;  | 
|     public readonly int[] StarAttrValueList;  | 
|     public readonly int[] StarEffIDList;  | 
|   | 
|     public ILGubaoStarConfig()  | 
|     {  | 
|     }  | 
|   | 
|     public ILGubaoStarConfig(string input)  | 
|     {  | 
|         try  | 
|         {  | 
|             var tables = input.Split('\t');  | 
|   | 
|             int.TryParse(tables[0],out ID);   | 
|   | 
|             int.TryParse(tables[1],out GubaoID);   | 
|   | 
|             int.TryParse(tables[2],out GubaoStar);   | 
|   | 
|             StarUPNeedItem = tables[3];  | 
|   | 
|             StarUPNeedQualityPiece = tables[4];  | 
|   | 
|             if (tables[5].Contains("[")) | 
|             { | 
|                 StarAttrIDList = JsonMapper.ToObject<int[]>(tables[5]); | 
|             } | 
|             else | 
|             { | 
|                 string[] StarAttrIDListStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 StarAttrIDList = new int[StarAttrIDListStringArray.Length]; | 
|                 for (int i=0;i<StarAttrIDListStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(StarAttrIDListStringArray[i],out StarAttrIDList[i]); | 
|                 } | 
|             }  | 
|   | 
|             if (tables[6].Contains("[")) | 
|             { | 
|                 StarAttrValueList = JsonMapper.ToObject<int[]>(tables[6]); | 
|             } | 
|             else | 
|             { | 
|                 string[] StarAttrValueListStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 StarAttrValueList = new int[StarAttrValueListStringArray.Length]; | 
|                 for (int i=0;i<StarAttrValueListStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(StarAttrValueListStringArray[i],out StarAttrValueList[i]); | 
|                 } | 
|             }  | 
|   | 
|             if (tables[7].Contains("[")) | 
|             { | 
|                 StarEffIDList = JsonMapper.ToObject<int[]>(tables[7]); | 
|             } | 
|             else | 
|             { | 
|                 string[] StarEffIDListStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 StarEffIDList = new int[StarEffIDListStringArray.Length]; | 
|                 for (int i=0;i<StarEffIDListStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(StarEffIDListStringArray[i],out StarEffIDList[i]); | 
|                 } | 
|             }  | 
|         }  | 
|         catch (Exception ex)  | 
|         {  | 
|             DebugEx.Log(ex);  | 
|         }  | 
|     }  | 
|   | 
|     static Dictionary<string, ILGubaoStarConfig> configs = new Dictionary<string, ILGubaoStarConfig>();  | 
|     public static ILGubaoStarConfig Get(string id)  | 
|     {     | 
|         if (!inited)  | 
|         {  | 
|             Debug.LogError("ILGubaoStarConfig 还未完成初始化。");  | 
|             return null;  | 
|         }  | 
|           | 
|         if (configs.ContainsKey(id))  | 
|         {  | 
|             return configs[id];  | 
|         }  | 
|   | 
|         ILGubaoStarConfig config = null;  | 
|         if (rawDatas.ContainsKey(id))  | 
|         {  | 
|             config = configs[id] = new ILGubaoStarConfig(rawDatas[id]);  | 
|             rawDatas.Remove(id);  | 
|         }  | 
|   | 
|         return config;  | 
|     }  | 
|   | 
|     public static ILGubaoStarConfig 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<ILGubaoStarConfig> GetValues()  | 
|     {  | 
|         var values = new List<ILGubaoStarConfig>();  | 
|         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 +"/GubaoStar.txt";  | 
|         }  | 
|         else  | 
|         {  | 
|             path = AssetVersionUtility.GetAssetFilePath("config/GubaoStar.txt");  | 
|         }  | 
|   | 
|         configs.Clear();  | 
|         var tempConfig = new ILGubaoStarConfig();  | 
|         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 ILGubaoStarConfig(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 ILGubaoStarConfig(line);  | 
|                             configs[id] = config;  | 
|                             (config as IConfigPostProcess).OnConfigParseCompleted();  | 
|                         }  | 
|                         else  | 
|                         {  | 
|                             rawDatas[id] = line;  | 
|                         }  | 
|                     }  | 
|                     catch (System.Exception ex)  | 
|                     {  | 
|                         Debug.LogError(ex);  | 
|                     }  | 
|                 }  | 
|   | 
|                 inited = true;  | 
|             });  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |