hch
2025-06-16 c9e74fbefbcc3372baaf41ba57a636859ee6034d
Main/Config/ConfigManager.cs
@@ -1,279 +1,282 @@
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>();
    }
}
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 = 49;
        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(FirstGoldConfig),
            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>();
        // 清空 FirstGoldConfig 字典
        ClearConfigDictionary<FirstGoldConfig>();
        // 清空 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>();
    }
}