| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Reflection;
 
- using System.Threading;
 
- using Excel2Json;
 
- using Fort23.Core;
 
- using Fort23.GameData;
 
- using Utility;
 
- #if !COMBAT_SERVER
 
- using UnityEditor;
 
- using UnityEngine;
 
- #endif
 
- namespace Fort23.UTool
 
- {
 
-     /// <summary>
 
-     /// 配置表组件
 
-     /// </summary>
 
-     public class ConfigComponent : Singleton<ConfigComponent>
 
-     {
 
-      
 
-         private Dictionary<Type, ConfigHolder> _allConfigHolders = new Dictionary<Type, ConfigHolder>();
 
- #if COMBAT_SERVER
 
-         private bool init;
 
-         public void SetConfig(Dictionary<Type, ConfigHolder> allConfigHolders)
 
-         {
 
-             if (init)
 
-             {
 
-                 return;
 
-             }
 
-             init = true;
 
-             _allConfigHolders.Clear();
 
-             _allConfigHolders = allConfigHolders;
 
-         }
 
-         public override void Dispose()
 
-         {
 
-             _allConfigHolders.Clear();
 
-             base.Dispose();
 
-         }
 
- #endif
 
- #if !COMBAT_SERVER
 
- #if UNITY_EDITOR
 
-         
 
-     /// <summary>
 
-         /// 预先加载所有配置文件
 
-         /// </summary>
 
-         /// <param name="isLogin">登录的时候只加载指定列表里面的数据,这样可以减少加载时间</param>
 
-         public void EditorPreload(bool isLogin = false)
 
-         {
 
-             _allConfigHolders.Clear();
 
-             ConfigHolder configHolder = null;
 
-             Assembly gameDataAssembly = EventSystem.Instance.GetAssembly("Fort23.GameData.dll");
 
-             if (gameDataAssembly == null)
 
-             {
 
-                 LogTool.Error("Fort23.GameData资源加载失败");
 
-                 return;
 
-             }
 
-             CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
 
-             foreach (Type type in gameDataAssembly.GetTypes())
 
-             {
 
-                 object[] attrs = type.GetCustomAttributes(typeof(ConfigAttribute), false);
 
-                 if (attrs.Length == 0)
 
-                 {
 
-                     continue;
 
-                 }
 
-                 try
 
-                 {
 
-                     ConfigAttribute configAttribute =
 
-                         type.GetCustomAttribute(typeof(ConfigAttribute)) as ConfigAttribute;
 
-                     if (configAttribute != null)
 
-                     {
 
-                         TextAsset ta =
 
-                             AssetDatabase.LoadAssetAtPath<TextAsset>(@"Assets\Res\Config\" + configAttribute.prefab);
 
-                         configHolder = JsonHelper.FromJson(ta.text, type) as ConfigHolder;
 
-                         if (configHolder != null)
 
-                         {
 
-                             configHolder.Init();
 
-                             _allConfigHolders[configHolder.ConfigType] = configHolder;
 
-                         }
 
-                         else
 
-                         {
 
-                             LogTool.Error($"JSON转{type.Name}失败!");
 
-                         }
 
-                     }
 
-                     else
 
-                     {
 
-                         LogTool.Error($"配置文件类{type.Name}没有添加ConfigAttribute!");
 
-                     }
 
-                 }
 
-                 catch (Exception e)
 
-                 {
 
-                     LogTool.Error("导表错误" + type);
 
-                     LogTool.Exception(e);
 
-                 }
 
-             }
 
-            
 
-             LogTool.Log("所有配置文件初始化完成");
 
-         }
 
- #endif
 
-         /// <summary>
 
-         /// 预先加载所有配置文件
 
-         /// </summary>
 
-         /// <param name="isLogin">登录的时候只加载指定列表里面的数据,这样可以减少加载时间</param>
 
-         public async CTask Preload()
 
-         {
 
-             _allConfigHolders.Clear();
 
-             ConfigHolder configHolder = null;
 
-             Assembly gameDataAssembly = EventSystem.Instance.GetAssembly("Fort23.GameData.dll");
 
-             if (gameDataAssembly == null)
 
-             {
 
-                 LogTool.Error("Fort23.GameData资源加载失败");
 
-                 return;
 
-             }
 
-             CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();
 
-             foreach (Type type in gameDataAssembly.GetTypes())
 
-             {
 
-                 object[] attrs = type.GetCustomAttributes(typeof(ConfigAttribute), false);
 
-                 if (attrs.Length == 0)
 
-                 {
 
-                     continue;
 
-                 }
 
-              
 
-                 try
 
-                 {
 
-                     ConfigAttribute configAttribute = type.GetCustomAttribute(typeof(ConfigAttribute)) as ConfigAttribute;
 
-                     if (configAttribute != null)
 
-                     {
 
-                        
 
-                         CTask<AssetHandle> cTask = AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(configAttribute.prefab, callBack: delegate(AssetHandle json)
 
-                         {
 
-                             if (json == null)
 
-                             {
 
-                                 LogTool.Error("加载配置表错误"+configAttribute.prefab);
 
-                                 return;
 
-                             }
 
-                             configHolder = JsonHelper.FromJson(json.AssetObject<TextAsset>().text, type) as ConfigHolder;
 
-                             json.Release();
 
-                             // TODO 验证服预留
 
-                             try
 
-                             {
 
-                                 if (configHolder != null)
 
-                                 {
 
-                                     configHolder.Init();
 
-                                     _allConfigHolders[configHolder.ConfigType] = configHolder;
 
-                                 }
 
-                                 else
 
-                                 {
 
-                                     LogTool.Error($"JSON转{type.Name}失败!");
 
-                                 }
 
-                             }
 
-                             catch (Exception e)
 
-                             {
 
-                                 LogTool.Error(e);
 
-                                 LogTool.Error($"JSON转{type.Name}失败!");
 
-                             }
 
-                         
 
- #if !COMBAT_SERVER
 
-                         });
 
-                         cTaskAwaitBuffer.AddTask(cTask);
 
- #endif
 
-                     }
 
-                     else
 
-                     {
 
-                         LogTool.Error($"配置文件类{type.Name}没有添加ConfigAttribute!");
 
-                     }
 
-                 }
 
-                 catch (Exception e)
 
-                 {
 
-                     LogTool.Error("导表错误"+type);
 
-                     LogTool.Exception(e);
 
-                 }
 
-             }
 
-             await cTaskAwaitBuffer.WaitAll();
 
-             // tasks.Dispose();
 
-             LogTool.Log("所有配置文件初始化完成");
 
-         }
 
- #endif
 
-         public T Get<T>(int ID) where T : struct, IConfig
 
-         {
 
-             
 
-             ConfigHolder configHolder;
 
-             if (!_allConfigHolders.TryGetValue(typeof(T), out configHolder))
 
-             {
 
-                 LogTool.Exception(new Exception($"ConfigComponent not found key: {typeof(T).FullName}"));
 
-                 return default;
 
-             }
 
-             IConfig iconfig = configHolder.TryGet(ID);
 
-             return iconfig is T ? (T)iconfig : default;
 
-         }
 
-         public T[] GetAll<T>() where T : struct, IConfig
 
-         {
 
-             ConfigHolder configHolder;
 
-             if (!_allConfigHolders.TryGetValue(typeof(T), out configHolder))
 
-             {
 
-                 throw new Exception($"ConfigComponent not found key: {typeof(T).FullName}");
 
-             }
 
-             List<IConfig> lists = configHolder.GetAll();
 
-             T[] configs = new T[configHolder.GetAll().Count];
 
-             for (int i = 0; i < configs.Length; i++)
 
-             {
 
-                 IConfig iconfig = lists[i];
 
-                 configs[i] = iconfig is T ? (T)iconfig : default;
 
-             }
 
-             return configs;
 
-         }
 
-     }
 
- }
 
 
  |