Exemplo n.º 1
0
        static List <List <config> > build_group(table table)
        {
            List <List <SkillGroupNode> > lists = new List <List <SkillGroupNode> >();

            for (int i = 0; i < table.configs.Count; i++)
            {
                string _Nextid = get_nextid(table.configs[i]);
                if (_Nextid != null)
                {
                    SkillGroupNode node = new SkillGroupNode
                    {
                        nextid = _Nextid,
                        config = table.configs[i]
                    };
                    insert_node(ref lists, node);
                }
            }
            List <List <config> > group = new List <List <config> >();

            for (int i = 0; i < lists.Count; i++)
            {
                group.Add(new List <config>());
                for (int j = 0; j < lists[i].Count; j++)
                {
                    group[i].Add(lists[i][j].config);
                }
            }
            return(group);
        }
Exemplo n.º 2
0
 static void insert_node(ref List <List <SkillGroupNode> > lists, SkillGroupNode node)
 {
     for (int i = 0; i < lists.Count; i++)
     {
         SkillGroupNode head = lists[i][0];
         SkillGroupNode last = lists[i][lists[i].Count - 1];
         if (head.config.key == node.nextid)
         {
             lists[i].Insert(0, node);
             insert_node(ref lists, lists[i]);
             return;
         }
         else if (last.nextid == node.config.key)
         {
             lists[i].Add(node);
             insert_node(ref lists, lists[i]);
             return;
         }
     }
     lists.Add(new List <SkillGroupNode> {
         node
     });
 }
Exemplo n.º 3
0
 static void insert_node(ref List <List <SkillGroupNode> > lists, List <SkillGroupNode> nodes)
 {
     //防止链表循环
     //如果循环,则配置出现严重失误,配置了一个技能升级闭环
     Debug.Assert(nodes.Last().nextid != nodes[0].config.key);
     for (int i = 0; i < lists.Count; i++)
     {
         SkillGroupNode head = lists[i][0];
         SkillGroupNode last = lists[i][lists[i].Count - 1];
         if (head.config.key == nodes.Last().nextid)
         {
             lists[i].InsertRange(0, nodes);
             lists.Remove(nodes);
             insert_node(ref lists, lists[i]);
         }
         else if (last.nextid == nodes[0].config.key)
         {
             lists[i].AddRange(nodes);
             lists.Remove(nodes);
             insert_node(ref lists, lists[i]);
         }
     }
 }