using System; using System.Collections.Generic; using UnityEngine; public partial class GuideConfig : ConfigBase { public static Dictionary> winToGuidesDic = new Dictionary>(); public static Dictionary> typeToGuidesDic = new Dictionary>(); public static Dictionary> guideGroupDict = new Dictionary>(); static Dictionary preGuideDict = new Dictionary(); protected override void OnConfigParseCompleted() { base.OnConfigParseCompleted(); List list = null; if (!winToGuidesDic.TryGetValue(WinName, out list)) { list = new List(); winToGuidesDic.Add(WinName, list); } list.Add(ID); List list2 = null; if (!typeToGuidesDic.TryGetValue(TriggerType, out list2)) { list2 = new List(); typeToGuidesDic.Add(TriggerType, list2); } list2.Add(ID); preGuideDict[ID] = PreGuideId; } public static List GetGuideListByWinName(string winName) { List list = null; if (winToGuidesDic.TryGetValue(winName, out list)) { return list; } return null; } public static List GetGuideListByType(int type) { List list = null; if (typeToGuidesDic.TryGetValue(type, out list)) { return list; } return null; } // 汇总引导组 public static List GetGuideList(int guideID) { if (guideGroupDict.IsNullOrEmpty()) { BuildGuideGroupDict(); } if (guideGroupDict.ContainsKey(guideID)) { return guideGroupDict[guideID]; } else { Debug.LogError($"guideID:{guideID} 没有找到引导组"); } return null; } private static void BuildGuideGroupDict() { foreach (var id in preGuideDict.Keys) { int currentId = id; int rootId = FindRootGuideId(currentId); if (!guideGroupDict.ContainsKey(rootId)) { guideGroupDict[rootId] = new List(); } if (!guideGroupDict[rootId].Contains(currentId)) { guideGroupDict[rootId].Add(currentId); } } } private static int FindRootGuideId(int id) { int currentId = id; while (preGuideDict.ContainsKey(currentId) && preGuideDict[currentId] != 0) { currentId = preGuideDict[currentId]; } return currentId; } }