| //--------------------------------------------------------  | 
| //    [Author]:           Fish  | 
| //    [  Date ]:           2024年5月17日  | 
| //--------------------------------------------------------  | 
|   | 
| using System.Collections.Generic;  | 
| using System.IO;  | 
| using System.Threading;  | 
| using System;  | 
| using UnityEngine;  | 
| using LitJson;  | 
|   | 
| public partial class ILFaQiLVUpConfig  | 
| {  | 
|   | 
|     public readonly int FaQiLV;  | 
|     public readonly string Name;  | 
|     public readonly string PathName;  | 
|     public readonly string Model;  | 
|     public readonly int EffectID;  | 
|     public readonly int NeedEatCount;  | 
|     public readonly int[] LVAttrType;  | 
|     public readonly int[] LVAttrValue;  | 
|     public readonly int[] UpItemAttrType;  | 
|     public readonly int[] UpItemAttrValue;  | 
|     public readonly int useCnt;  | 
|   | 
|     public ILFaQiLVUpConfig()  | 
|     {  | 
|     }  | 
|   | 
|     public ILFaQiLVUpConfig(string input)  | 
|     {  | 
|         try  | 
|         {  | 
|             var tables = input.Split('\t');  | 
|   | 
|             int.TryParse(tables[0],out FaQiLV);   | 
|   | 
|             Name = tables[1];  | 
|   | 
|             PathName = tables[2];  | 
|   | 
|             Model = tables[3];  | 
|   | 
|             int.TryParse(tables[4],out EffectID);   | 
|   | 
|             int.TryParse(tables[5],out NeedEatCount);   | 
|   | 
|             if (tables[6].Contains("[")) | 
|             { | 
|                 LVAttrType = JsonMapper.ToObject<int[]>(tables[6]); | 
|             } | 
|             else | 
|             { | 
|                 string[] LVAttrTypeStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 LVAttrType = new int[LVAttrTypeStringArray.Length]; | 
|                 for (int i=0;i<LVAttrTypeStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(LVAttrTypeStringArray[i],out LVAttrType[i]); | 
|                 } | 
|             }  | 
|   | 
|             if (tables[7].Contains("[")) | 
|             { | 
|                 LVAttrValue = JsonMapper.ToObject<int[]>(tables[7]); | 
|             } | 
|             else | 
|             { | 
|                 string[] LVAttrValueStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 LVAttrValue = new int[LVAttrValueStringArray.Length]; | 
|                 for (int i=0;i<LVAttrValueStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(LVAttrValueStringArray[i],out LVAttrValue[i]); | 
|                 } | 
|             }  | 
|   | 
|             if (tables[8].Contains("[")) | 
|             { | 
|                 UpItemAttrType = JsonMapper.ToObject<int[]>(tables[8]); | 
|             } | 
|             else | 
|             { | 
|                 string[] UpItemAttrTypeStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 UpItemAttrType = new int[UpItemAttrTypeStringArray.Length]; | 
|                 for (int i=0;i<UpItemAttrTypeStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(UpItemAttrTypeStringArray[i],out UpItemAttrType[i]); | 
|                 } | 
|             }  | 
|   | 
|             if (tables[9].Contains("[")) | 
|             { | 
|                 UpItemAttrValue = JsonMapper.ToObject<int[]>(tables[9]); | 
|             } | 
|             else | 
|             { | 
|                 string[] UpItemAttrValueStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); | 
|                 UpItemAttrValue = new int[UpItemAttrValueStringArray.Length]; | 
|                 for (int i=0;i<UpItemAttrValueStringArray.Length;i++) | 
|                 { | 
|                      int.TryParse(UpItemAttrValueStringArray[i],out UpItemAttrValue[i]); | 
|                 } | 
|             }  | 
|   | 
|             int.TryParse(tables[10],out useCnt);   | 
|         }  | 
|         catch (Exception ex)  | 
|         {  | 
|             DebugEx.Log(ex);  | 
|         }  | 
|     }  | 
|   | 
|     static Dictionary<string, ILFaQiLVUpConfig> configs = new Dictionary<string, ILFaQiLVUpConfig>();  | 
|     public static ILFaQiLVUpConfig Get(string id)  | 
|     {     | 
|         if (!inited)  | 
|         {  | 
|             Debug.LogError("ILFaQiLVUpConfig 还未完成初始化。");  | 
|             return null;  | 
|         }  | 
|           | 
|         if (configs.ContainsKey(id))  | 
|         {  | 
|             return configs[id];  | 
|         }  | 
|   | 
|         ILFaQiLVUpConfig config = null;  | 
|         if (rawDatas.ContainsKey(id))  | 
|         {  | 
|             config = configs[id] = new ILFaQiLVUpConfig(rawDatas[id]);  | 
|             rawDatas.Remove(id);  | 
|         }  | 
|   | 
|         return config;  | 
|     }  | 
|   | 
|     public static ILFaQiLVUpConfig 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<ILFaQiLVUpConfig> GetValues()  | 
|     {  | 
|         var values = new List<ILFaQiLVUpConfig>();  | 
|         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 +"/FaQiLVUp.txt";  | 
|         }  | 
|         else  | 
|         {  | 
|             path = AssetVersionUtility.GetAssetFilePath("config/FaQiLVUp.txt");  | 
|         }  | 
|   | 
|         configs.Clear();  | 
|         var tempConfig = new ILFaQiLVUpConfig();  | 
|         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 ILFaQiLVUpConfig(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 ILFaQiLVUpConfig(line);  | 
|                             configs[id] = config;  | 
|                             (config as IConfigPostProcess).OnConfigParseCompleted();  | 
|                         }  | 
|                         else  | 
|                         {  | 
|                             rawDatas[id] = line;  | 
|                         }  | 
|                     }  | 
|                     catch (System.Exception ex)  | 
|                     {  | 
|                         Debug.LogError(ex);  | 
|                     }  | 
|                 }  | 
|   | 
|                 inited = true;  | 
|             });  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |