using System; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
  
 | 
public partial class GuideConfig : ConfigBase<int, GuideConfig> 
 | 
{ 
 | 
    public static Dictionary<string, List<int>> winToGuidesDic = new Dictionary<string, List<int>>(); 
 | 
  
 | 
    public static Dictionary<int, List<int>> typeToGuidesDic = new Dictionary<int, List<int>>(); 
 | 
  
 | 
    public static Dictionary<int, List<int>> guideGroupDict = new Dictionary<int, List<int>>(); 
 | 
    static Dictionary<int, int> preGuideDict = new Dictionary<int, int>(); 
 | 
    protected override void OnConfigParseCompleted() 
 | 
    { 
 | 
        base.OnConfigParseCompleted(); 
 | 
  
 | 
        List<int> list = null; 
 | 
        if (!winToGuidesDic.TryGetValue(WinName, out list)) 
 | 
        { 
 | 
            list = new List<int>(); 
 | 
            winToGuidesDic.Add(WinName, list); 
 | 
        } 
 | 
        list.Add(ID); 
 | 
  
 | 
        List<int> list2 = null; 
 | 
        if (!typeToGuidesDic.TryGetValue(TriggerType, out list2)) 
 | 
        { 
 | 
            list2 = new List<int>(); 
 | 
            typeToGuidesDic.Add(TriggerType, list2); 
 | 
        } 
 | 
        list2.Add(ID); 
 | 
  
 | 
        preGuideDict[ID] = PreGuideId; 
 | 
    } 
 | 
  
 | 
  
 | 
    public static List<int> GetGuideListByWinName(string winName) 
 | 
    { 
 | 
        List<int> list = null; 
 | 
        if (winToGuidesDic.TryGetValue(winName, out list)) 
 | 
        { 
 | 
            return list; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    public static List<int> GetGuideListByType(int type) 
 | 
    { 
 | 
        List<int> list = null; 
 | 
        if (typeToGuidesDic.TryGetValue(type, out list)) 
 | 
        { 
 | 
            return list; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    // 汇总引导组 
 | 
    public static List<int> 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<int>(); 
 | 
            } 
 | 
  
 | 
            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; 
 | 
    } 
 | 
} 
 |