using System.Collections.Generic; using System.Linq; public partial class HeroTrialConfig : ConfigBase { //<武将ID,<关卡编号,配置ID>> static Dictionary> idDict = new Dictionary>(); protected override void OnConfigParseCompleted() { if (!idDict.ContainsKey(HeroID)) { idDict[HeroID] = new Dictionary(); } idDict[HeroID][LevelNum] = CfgID; } public static bool TryGetHeroLevelDict(int heroID, out Dictionary dict) { dict = null; return idDict != null && idDict.TryGetValue(heroID, out dict); } public static bool TryGetConfigID(int heroID, int levelNum, out int cfgID) { cfgID = 0; return idDict != null && idDict.TryGetValue(heroID, out var dict) && dict.TryGetValue(levelNum, out cfgID); } public static bool TryGetHeroTrialConfig(int heroID, int levelNum, out HeroTrialConfig config) { config = null; if (TryGetConfigID(heroID, levelNum, out int cfgID) && HasKey(cfgID)) { config = Get(cfgID); return true; } return false; } public static bool TryGetHeroTrialConfig(int cfgID, out HeroTrialConfig config) { config = null; if (HasKey(cfgID)) { config = Get(cfgID); return true; } return false; } public static List GetSortedHeroIDList() { if (idDict.IsNullOrEmpty()) return new List(); return idDict.Keys .OrderBy(GetHeroSortOrder) .ThenBy(heroID => heroID) .ToList(); } public static bool TryGetHeroConfigList(int heroID, out List configs) { configs = null; if (!TryGetHeroLevelDict(heroID, out var dict) || dict.IsNullOrEmpty()) return false; configs = dict.Keys .OrderBy(levelNum => levelNum) .Select(levelNum => TryGetHeroTrialConfig(heroID, levelNum, out var config) ? config : null) .Where(config => config != null) .ToList(); return !configs.IsNullOrEmpty(); } public static bool TryGetFirstLevelConfig(int heroID, out HeroTrialConfig config) { config = null; if (!TryGetHeroLevelDict(heroID, out var dict) || dict.IsNullOrEmpty()) return false; int levelNum = dict.Keys.Min(); return TryGetHeroTrialConfig(heroID, levelNum, out config); } public static bool TryGetMaxLevelNum(int heroID, out int maxLevelNum) { maxLevelNum = 0; if (!TryGetHeroLevelDict(heroID, out var dict) || dict.IsNullOrEmpty()) return false; maxLevelNum = dict.Keys.Max(); return true; } public static bool TryGetNextLevelConfig(int heroID, int passLevelNum, out HeroTrialConfig config) { config = null; int nextLevelNum = passLevelNum + 1; return TryGetHeroTrialConfig(heroID, nextLevelNum, out config); } static int GetHeroSortOrder(int heroID) { return TryGetFirstLevelConfig(heroID, out var config) ? config.SortOrder : int.MaxValue; } }