using System;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using Cysharp.Threading.Tasks;
|
using System.Reflection;
|
|
|
public class ConfigManager : ManagerBase<ConfigManager>
|
{
|
public bool isLoadFinished
|
{
|
get;
|
private set;
|
}
|
|
private float loadingProgress = 0f;
|
|
public override void Init()
|
{
|
base.Init();
|
InitConfigs();
|
}
|
|
public virtual async UniTask InitConfigs()
|
{
|
// 加载配置文件
|
await LoadConfigs();
|
}
|
|
protected async UniTask LoadConfigs()
|
{
|
loadingProgress = 0f;
|
isLoadFinished = false;
|
|
// 加载配置文件
|
int totalConfigs = 48;
|
Type[] configTypes = new Type[] {
|
typeof(AppointItemConfig),
|
typeof(AudioConfig),
|
typeof(ChestsAwardConfig),
|
typeof(ChestsConfig),
|
typeof(CTGConfig),
|
typeof(CTGSelectItemConfig),
|
typeof(DienstgradConfig),
|
typeof(DirtyWordConfig),
|
typeof(EffectConfig),
|
typeof(EmojiPackConfig),
|
typeof(FaceConfig),
|
typeof(FamilyConfig),
|
typeof(FuncConfigConfig),
|
typeof(FuncOpenLVConfig),
|
typeof(FunctionTeamSetConfig),
|
typeof(GetItemWaysConfig),
|
typeof(GmCmdConfig),
|
typeof(GuideConfig),
|
typeof(HeroAwakeConfig),
|
typeof(HeroBreakConfig),
|
typeof(HeroConfig),
|
typeof(HeroFetterConfig),
|
typeof(HeroQualityAwakeConfig),
|
typeof(HeroQualityBreakConfig),
|
typeof(HeroQualityConfig),
|
typeof(HeroSkinConfig),
|
typeof(HeroTalentConfig),
|
typeof(IconConfig),
|
typeof(ItemConfig),
|
typeof(KickOutReasonConfig),
|
typeof(LanguageConfig),
|
typeof(MailConfig),
|
typeof(NPCConfig),
|
typeof(NPCExConfig),
|
typeof(OrderInfoConfig),
|
typeof(PlayerFaceConfig),
|
typeof(PlayerFacePicConfig),
|
typeof(PlayerFacePicStarConfig),
|
typeof(PlayerFaceStarConfig),
|
typeof(PlayerLVConfig),
|
typeof(priorbundleConfig),
|
typeof(RichTextMsgReplaceConfig),
|
typeof(RuleConfig),
|
typeof(SkillConfig),
|
typeof(StoreConfig),
|
typeof(SuccessConfig),
|
typeof(SysInfoConfig),
|
typeof(TitleStarUpConfig)
|
};
|
|
// 逐个加载配置并更新进度
|
for (int i = 0; i < configTypes.Length; i++)
|
{
|
await LoadConfigByType(configTypes[i]);
|
loadingProgress = (float)(i + 1) / totalConfigs;
|
}
|
|
// 加载完成后设置isLoadFinished为true
|
loadingProgress = 1f;
|
isLoadFinished = true;
|
}
|
|
public async UniTask LoadConfigByType(Type configType)
|
{
|
string configName = configType.Name;
|
if (configName.EndsWith("Config"))
|
{
|
configName = configName.Substring(0, configName.Length - 6);
|
}
|
TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName);
|
if (textAsset != null)
|
{
|
string[] lines = textAsset.text.Split('\n');
|
var methodInfo = configType.GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.FlattenHierarchy);
|
if (methodInfo != null)
|
{
|
methodInfo.Invoke(null, new object[] { lines });
|
// 设置初始化标志
|
var isInitField = configType.GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
|
if (isInitField != null)
|
{
|
isInitField.SetValue(null, true);
|
}
|
Debug.Log($"加载配置: {configType.Name} 成功");
|
}
|
else
|
{
|
Debug.LogError($"配置类 {configType.Name} 没有静态Init方法");
|
}
|
}
|
else
|
{
|
Debug.LogError($"找不到配置文件: {configName}");
|
}
|
}
|
|
private async UniTask LoadConfig<T>() where T : class
|
{
|
string configName = typeof(T).Name;
|
|
TextAsset textAsset = ResManager.Instance.LoadAsset<TextAsset>("Config", configName);
|
if (textAsset != null)
|
{
|
string[] lines = textAsset.text.Split('\n');
|
var methodInfo = typeof(T).GetMethod("Init", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
|
if (methodInfo != null)
|
{
|
methodInfo.Invoke(null, lines);
|
// 设置初始化标志
|
var isInitField = typeof(T).GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
|
if (isInitField != null)
|
{
|
isInitField.SetValue(null, true);
|
}
|
Debug.Log($"加载配置: {typeof(T).Name} 成功");
|
}
|
else
|
{
|
Debug.LogError($"配置类 {typeof(T).Name} 没有静态Init方法");
|
}
|
}
|
else
|
{
|
Debug.LogError($"找不到配置文件: {configName}");
|
}
|
}
|
|
public float GetLoadingProgress()
|
{
|
return loadingProgress;
|
}
|
|
private void ClearConfigDictionary<T>() where T : class
|
{
|
// 重置 T 初始化状态
|
var isInitField = typeof(T).GetField("isInit", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
|
if (isInitField != null)
|
{
|
isInitField.SetValue(null, false);
|
}
|
}
|
|
public override void Release()
|
{
|
// 清空 AppointItemConfig 字典
|
ClearConfigDictionary<AppointItemConfig>();
|
// 清空 AudioConfig 字典
|
ClearConfigDictionary<AudioConfig>();
|
// 清空 ChestsAwardConfig 字典
|
ClearConfigDictionary<ChestsAwardConfig>();
|
// 清空 ChestsConfig 字典
|
ClearConfigDictionary<ChestsConfig>();
|
// 清空 CTGConfig 字典
|
ClearConfigDictionary<CTGConfig>();
|
// 清空 CTGSelectItemConfig 字典
|
ClearConfigDictionary<CTGSelectItemConfig>();
|
// 清空 DienstgradConfig 字典
|
ClearConfigDictionary<DienstgradConfig>();
|
// 清空 DirtyWordConfig 字典
|
ClearConfigDictionary<DirtyWordConfig>();
|
// 清空 EffectConfig 字典
|
ClearConfigDictionary<EffectConfig>();
|
// 清空 EmojiPackConfig 字典
|
ClearConfigDictionary<EmojiPackConfig>();
|
// 清空 FaceConfig 字典
|
ClearConfigDictionary<FaceConfig>();
|
// 清空 FamilyConfig 字典
|
ClearConfigDictionary<FamilyConfig>();
|
// 清空 FuncConfigConfig 字典
|
ClearConfigDictionary<FuncConfigConfig>();
|
// 清空 FuncOpenLVConfig 字典
|
ClearConfigDictionary<FuncOpenLVConfig>();
|
// 清空 FunctionTeamSetConfig 字典
|
ClearConfigDictionary<FunctionTeamSetConfig>();
|
// 清空 GetItemWaysConfig 字典
|
ClearConfigDictionary<GetItemWaysConfig>();
|
// 清空 GmCmdConfig 字典
|
ClearConfigDictionary<GmCmdConfig>();
|
// 清空 GuideConfig 字典
|
ClearConfigDictionary<GuideConfig>();
|
// 清空 HeroAwakeConfig 字典
|
ClearConfigDictionary<HeroAwakeConfig>();
|
// 清空 HeroBreakConfig 字典
|
ClearConfigDictionary<HeroBreakConfig>();
|
// 清空 HeroConfig 字典
|
ClearConfigDictionary<HeroConfig>();
|
// 清空 HeroFetterConfig 字典
|
ClearConfigDictionary<HeroFetterConfig>();
|
// 清空 HeroQualityAwakeConfig 字典
|
ClearConfigDictionary<HeroQualityAwakeConfig>();
|
// 清空 HeroQualityBreakConfig 字典
|
ClearConfigDictionary<HeroQualityBreakConfig>();
|
// 清空 HeroQualityConfig 字典
|
ClearConfigDictionary<HeroQualityConfig>();
|
// 清空 HeroSkinConfig 字典
|
ClearConfigDictionary<HeroSkinConfig>();
|
// 清空 HeroTalentConfig 字典
|
ClearConfigDictionary<HeroTalentConfig>();
|
// 清空 IconConfig 字典
|
ClearConfigDictionary<IconConfig>();
|
// 清空 ItemConfig 字典
|
ClearConfigDictionary<ItemConfig>();
|
// 清空 KickOutReasonConfig 字典
|
ClearConfigDictionary<KickOutReasonConfig>();
|
// 清空 LanguageConfig 字典
|
ClearConfigDictionary<LanguageConfig>();
|
// 清空 MailConfig 字典
|
ClearConfigDictionary<MailConfig>();
|
// 清空 NPCConfig 字典
|
ClearConfigDictionary<NPCConfig>();
|
// 清空 NPCExConfig 字典
|
ClearConfigDictionary<NPCExConfig>();
|
// 清空 OrderInfoConfig 字典
|
ClearConfigDictionary<OrderInfoConfig>();
|
// 清空 PlayerFaceConfig 字典
|
ClearConfigDictionary<PlayerFaceConfig>();
|
// 清空 PlayerFacePicConfig 字典
|
ClearConfigDictionary<PlayerFacePicConfig>();
|
// 清空 PlayerFacePicStarConfig 字典
|
ClearConfigDictionary<PlayerFacePicStarConfig>();
|
// 清空 PlayerFaceStarConfig 字典
|
ClearConfigDictionary<PlayerFaceStarConfig>();
|
// 清空 PlayerLVConfig 字典
|
ClearConfigDictionary<PlayerLVConfig>();
|
// 清空 priorbundleConfig 字典
|
ClearConfigDictionary<priorbundleConfig>();
|
// 清空 RichTextMsgReplaceConfig 字典
|
ClearConfigDictionary<RichTextMsgReplaceConfig>();
|
// 清空 RuleConfig 字典
|
ClearConfigDictionary<RuleConfig>();
|
// 清空 SkillConfig 字典
|
ClearConfigDictionary<SkillConfig>();
|
// 清空 StoreConfig 字典
|
ClearConfigDictionary<StoreConfig>();
|
// 清空 SuccessConfig 字典
|
ClearConfigDictionary<SuccessConfig>();
|
// 清空 SysInfoConfig 字典
|
ClearConfigDictionary<SysInfoConfig>();
|
// 清空 TitleStarUpConfig 字典
|
ClearConfigDictionary<TitleStarUpConfig>();
|
}
|
}
|