コード例 #1
0
        public CSkillNodeData GetSkill(Func <CSkillNodeData, CSkillNodeData, bool> condition)
        {
            CSkillNodeData parent = null;

            if (condition != null && m_SkillRoot != null)
            {
                if (condition(null, m_SkillRoot))
                {
                    return(m_SkillRoot);
                }
                else
                {
                    for (int i = 0; i < m_SkillRoot.childSkills.Length; i++)
                    {
                        if (m_SkillRoot.childSkills [i] != null)
                        {
                            parent = FindChild(m_SkillRoot, m_SkillRoot.childSkills [i], condition);
                        }
                        if (parent != null)
                        {
                            return(parent);
                        }
                    }
                }
            }
            return(null);
        }
コード例 #2
0
 public void LoadMapSkillTree(CSkillNodeData parent, Action <CSkillNodeData, CSkillNodeData> onChildLoaded, Func <CSkillNodeData, CSkillNodeData, bool> condition)
 {
     if (parent == null)
     {
         return;
     }
     for (int i = 0; i < parent.childSkills.Length; i++)
     {
         var child = parent.childSkills [i];
         if (child != null)
         {
             if (onChildLoaded != null)
             {
                 if (condition != null)
                 {
                     if (condition(parent, child))
                     {
                         onChildLoaded(parent, child);
                     }
                 }
                 else
                 {
                     onChildLoaded(parent, child);
                 }
             }
             LoadMapSkillTree(child, onChildLoaded, condition);
         }
     }
 }
コード例 #3
0
        public CSkillNodeData GetSkill(string id)
        {
            CSkillNodeData parent = null;

            if (m_SkillRoot.id == id)
            {
                return(m_SkillRoot);
            }
            else
            {
                for (int i = 0; i < m_SkillRoot.childSkills.Length; i++)
                {
                    if (m_SkillRoot.childSkills [i] != null)
                    {
                        parent = FindChild(m_SkillRoot, m_SkillRoot.childSkills [i], (p, c) => {
                            return(c != null && c.id == id && p.currentLevel >= c.unlockLevel);
                        });
                        if (parent != null)
                        {
                            return(parent);
                        }
                    }
                }
            }
            return(null);
        }
コード例 #4
0
 public void GenerateMapSkillTree(CSkillNodeData parent, Action <CSkillNodeData, CSkillNodeData> onChildLoaded)
 {
     if (parent == null)
     {
         return;
     }
     m_SkillMap.Add(parent.id, parent);
     LoadMapSkillTree(parent, (p, c) => {
         m_SkillMap.Add(c.id, c);
         if (onChildLoaded != null)
         {
             onChildLoaded(p, c);
         }
     }, null);
 }
コード例 #5
0
 private CSkillNodeData FindChild(CSkillNodeData grand, CSkillNodeData parent, Func <CSkillNodeData, CSkillNodeData, bool> condition)
 {
     if (condition != null && parent != null)
     {
         if (condition(grand, parent))
         {
             return(parent);
         }
         else
         {
             for (int i = 0; i < parent.childSkills.Length; i++)
             {
                 return(FindChild(parent, parent.childSkills [i], condition));
             }
         }
     }
     return(null);
 }
コード例 #6
0
 public CSkillTreeComponent(CSkillNodeData root) : base()
 {
     this.m_SkillRoot = root;
     this.m_SkillMap  = new Dictionary <string, CSkillNodeData> ();
 }
コード例 #7
0
 public CSkillTreeComponent(string json) : base()
 {
     this.m_SkillRoot = TinyJSON.JSON.Load(json).Make <CSkillNodeData> ();
     this.m_SkillMap  = new Dictionary <string, CSkillNodeData> ();
 }