Exemplo n.º 1
0
    public static void LoadPreloadInfo(XmlDocument xmlDoc)
    {
        PhaseABPreloadInfos_RT.Clear();
        XmlNodeList nodeList = xmlDoc.SelectSingleNode(AssetBundleSettingHelper.xmlNode_PhaseRoot).ChildNodes;

        foreach (XmlElement node in nodeList)
        {
            var phase = new RuntimePhaseABPreLoadInfo();
            phase.InputXMlNode(xmlDoc, node);
            PhaseABPreloadInfos_RT.Add(phase.phaseName, phase);
        }
    }
Exemplo n.º 2
0
 //差集
 public List <string> Except(RuntimePhaseABPreLoadInfo other)
 {
     return(preloadList_RT.Except(other.preloadList_RT).ToList());
 }
Exemplo n.º 3
0
    private static void DataAnalysis(Dictionary <string, List <KeyValuePair <string, Dictionary <string, ABUseInfo> > > > srcDatas)
    //private static void SingleDataAnalysis(string name, List<KeyValuePair<string, Dictionary<string, ABUseInfo>>> data)
    {
        //单独阶段只引用一次和多次的,输出结果备用。
        List <List <PhaseABInfo> > phasesList = new List <List <PhaseABInfo> >();
        Dictionary <string, List <PhaseABInfo> > phasesDic = new Dictionary <string, List <PhaseABInfo> >();

        foreach (var sd in srcDatas)
        {
            var tmpList = new List <PhaseABInfo>();
            foreach (var phase in sd.Value)
            {
                var phaseInfo = new PhaseABInfo(phase.Key);
                //phase.Key 阶段名称(login,selectchar,类似这种)

                foreach (var ab in phase.Value)
                {
                    //ab.Key AB名字
                    phaseInfo.phaseAllABDic.Add(ab.Key, ab.Value);
                    if (ab.Value.getCount == OnlyOnceUsedCount || ab.Value.containCount == OnlyOnceUsedCount)
                    {
                        phaseInfo.phaseOnlyOnceUsedABDic.Add(ab.Key, ab.Value);
                    }
                }
                tmpList.Add(phaseInfo);
                {
                    if (!phasesDic.ContainsKey(phase.Key))
                    {
                        phasesDic.Add(phase.Key, new List <PhaseABInfo>());
                    }
                    phasesDic[phase.Key].Add(phaseInfo);
                }
            }
            phasesList.Add(tmpList);
        }
        //先根据阶段变化顺序理清可能发生的阶段变化
        Dictionary <string, PhaseABInfoTreeNode> phaseTree = new Dictionary <string, PhaseABInfoTreeNode>();

        foreach (var phases in phasesList)
        {
            PhaseABInfo last = null;
            foreach (var phase in phases)
            {
                if (last != null)
                {
                    if (!phaseTree.ContainsKey(last.phaseName))
                    {
                        phaseTree.Add(last.phaseName, new PhaseABInfoTreeNode(last.phaseName));
                    }
                    if (!phaseTree.ContainsKey(phase.phaseName))
                    {
                        phaseTree.Add(phase.phaseName, new PhaseABInfoTreeNode(phase.phaseName));
                    }
                    var pA = new PhaseABInfoToAnother(last.phaseName, phase.phaseName, last, phase);
                    phaseTree[last.phaseName].AddNext(pA);
                    phaseTree[phase.phaseName].AddLast(pA);
                }
                last = phase;
            }
        }
        //求交集
        foreach (var phase in phaseTree)
        {
            if (phasesDic.ContainsKey(phase.Key))
            {
                Dictionary <string, int> priority = new Dictionary <string, int>();
                List <string>            tmp      = null;
                List <string>            tmpI     = null;
                List <string>            tmpU     = null;
                if (phase.Value.Nexts.Count > 0)
                {
                    foreach (var pk in phase.Value.Nexts)
                    {
                        phase.Value.priority.Add(pk.Key, pk.Value.linkList.Count);                        //phasesDic[pk.Key].Count();
                        var ps = phasesDic[pk.Key];
                        foreach (var p in ps)
                        {
                            if (tmp != null)
                            {
                                tmpI = PhaseABInfo.Intersection(tmp, tmpI);
                                tmpU = PhaseABInfo.Union(tmp, tmpU);
                            }
                            else
                            {
                                tmpI = p.AllABDicToList();
                                tmpU = p.AllABDicToList();
                            }
                            tmp = p.AllABDicToList();
                            foreach (var k in tmp)
                            {
                                if (!priority.ContainsKey(k))
                                {
                                    priority.Add(k, 0);
                                }
                                priority[k]++;
                            }
                        }
                    }
                    if (tmpI != null)
                    {
                        foreach (var i in tmpI)
                        {
                            phase.Value.NeedLoadKeys.Add(i, (float)priority[i] / phasesDic[phase.Key].Count);
                        }
                        foreach (var d in PhaseABInfo.Diffenrence(tmpU, tmpI))
                        {
                            phase.Value.CanLoadKeys.Add(d, (float)priority[d] / phasesDic[phase.Key].Count);
                        }
                    }
                    else
                    {
                        Debug.LogError("if(tmpI != null) :" + phase.Key);
                    }
                }
            }
        }
        //每个阶段的必加载项和可选加载项已经设置好了,下边要设置从当前阶段往其他阶段转换时可能需要的项

        //填充到XML里
        PhaseABPreloadInfos_EditorAnalysis.Clear();
        foreach (var phase in phaseTree)
        {
            RuntimePhaseABPreLoadInfo rtPAB = new RuntimePhaseABPreLoadInfo(phase.Key);
            foreach (var n in phase.Value.NeedLoadKeys)
            {
                rtPAB.preloadWithPriority.Add(n.Key, n.Value);
            }
            foreach (var c in phase.Value.CanLoadKeys)
            {
                rtPAB.preloadWithPriority.Add(c.Key, c.Value);
            }
            PhaseABPreloadInfos_EditorAnalysis.Add(rtPAB.phaseName, rtPAB);
        }
        phasesList.Clear();
        return;
    }