| //--------------------------------------------------------  | 
| //    [Author]:           Fish  | 
| //    [  Date ]:           2024年7月15日  | 
| //--------------------------------------------------------  | 
|   | 
| using System.Collections.Generic;  | 
| using System.IO;  | 
| using System.Threading;  | 
| using System;  | 
| using UnityEngine;  | 
| using LitJson;  | 
|   | 
| public partial class ILZhanlingConfig  | 
| {  | 
|   | 
|     public readonly int ZhanlingId;  | 
|     public readonly int ZhanlingType;  | 
|     public readonly int NeedValue;  | 
|     public readonly int[][] FreeRewardItemList;  | 
|     public readonly int[][] ZLRewardItemList;  | 
|     public readonly int[][] ZLRewardItemListH;  | 
|   | 
|     public ILZhanlingConfig()  | 
|     {  | 
|     }  | 
|   | 
|     public ILZhanlingConfig(string input)  | 
|     {  | 
|         try  | 
|         {  | 
|             var tables = input.Split('\t');  | 
|   | 
|             int.TryParse(tables[0],out ZhanlingId);   | 
|   | 
|             int.TryParse(tables[1],out ZhanlingType);   | 
|   | 
|             int.TryParse(tables[2],out NeedValue);   | 
|   | 
|             FreeRewardItemList = JsonMapper.ToObject<int[][]>(tables[3]);   | 
|   | 
|             ZLRewardItemList = JsonMapper.ToObject<int[][]>(tables[4]);   | 
|   | 
|             ZLRewardItemListH = JsonMapper.ToObject<int[][]>(tables[5]);   | 
|         }  | 
|         catch (Exception ex)  | 
|         {  | 
|             DebugEx.Log(ex);  | 
|         }  | 
|     }  | 
|   | 
|     static Dictionary<string, ILZhanlingConfig> configs = new Dictionary<string, ILZhanlingConfig>();  | 
|     public static ILZhanlingConfig Get(string id)  | 
|     {     | 
|         if (!inited)  | 
|         {  | 
|             Debug.LogError("ILZhanlingConfig 还未完成初始化。");  | 
|             return null;  | 
|         }  | 
|           | 
|         if (configs.ContainsKey(id))  | 
|         {  | 
|             return configs[id];  | 
|         }  | 
|   | 
|         ILZhanlingConfig config = null;  | 
|         if (rawDatas.ContainsKey(id))  | 
|         {  | 
|             config = configs[id] = new ILZhanlingConfig(rawDatas[id]);  | 
|             rawDatas.Remove(id);  | 
|         }  | 
|   | 
|         return config;  | 
|     }  | 
|   | 
|     public static ILZhanlingConfig 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<ILZhanlingConfig> GetValues()  | 
|     {  | 
|         var values = new List<ILZhanlingConfig>();  | 
|         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 +"/Zhanling.txt";  | 
|         }  | 
|         else  | 
|         {  | 
|             path = AssetVersionUtility.GetAssetFilePath("config/Zhanling.txt");  | 
|         }  | 
|   | 
|         configs.Clear();  | 
|         var tempConfig = new ILZhanlingConfig();  | 
|         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 ILZhanlingConfig(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 ILZhanlingConfig(line);  | 
|                             configs[id] = config;  | 
|                             (config as IConfigPostProcess).OnConfigParseCompleted();  | 
|                         }  | 
|                         else  | 
|                         {  | 
|                             rawDatas[id] = line;  | 
|                         }  | 
|                     }  | 
|                     catch (System.Exception ex)  | 
|                     {  | 
|                         Debug.LogError(ex);  | 
|                     }  | 
|                 }  | 
|   | 
|                 inited = true;  | 
|             });  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |