public static BTreeNodeDesigner CreateBTreeNodeDesigner(BTreeEditorNodeConfig[] _configNodes, BTreeEditorNode[] _editorNodes, ref BTreeNodeDesigner[] _nodeDesigners, int _index)
        {
            BTreeEditorNode _editorNode = _editorNodes[_index];

            for (int i = 0; i < _editorNode.m_Node.m_ChildCount; i++)
            {
                int _childIndex = _editorNode.m_Node.m_ChildNodes[i].m_Index;
                if (_nodeDesigners[_childIndex] == null)
                {
                    _nodeDesigners[_childIndex] = CreateBTreeNodeDesigner(_configNodes, _editorNodes, ref _nodeDesigners, _childIndex);
                }
            }
            BTreeNodeDesigner _node = new BTreeNodeDesigner(_editorNode);

            //_node.m_EditorNode = _editorNode;
            //_node.m_NodeName = _editorNode.m_Node.m_Name;
            //_node.m_ChildNodeList = new List<BTreeNodeDesigner>();
            //_node.m_ChildNodeConnectionList = new List<BTreeNodeConnection>();

            for (int i = 0; i < _editorNode.m_Node.m_ChildCount; i++)
            {
                int _childIndex = _editorNode.m_Node.m_ChildNodes[i].m_Index;
                _node.m_ChildNodeList.Add(_nodeDesigners[_childIndex]);
                BTreeNodeConnection _connection = new BTreeNodeConnection(_nodeDesigners[_childIndex], _node, NodeConnectionType.Outgoing);
                _node.m_ChildNodeConnectionList.Add(_connection);
            }
            return(_node);
        }
 public static BTreeNodeDesigner[] CreateBTreeNodeDesignerFromConfig(BTreeEditorTreeConfig _config)
 {
     BTreeNodeDesigner[] _nodeDesigners = new BTreeNodeDesigner[_config.m_EditorNodes.Length];
     BTreeEditorNode[]   _editorNodes   = CreateBTreeEditorNode(_config);
     //递归创建节点
     for (int i = 0; i < _nodeDesigners.Length; i++)
     {
         if (_nodeDesigners[i] == null)
         {
             _nodeDesigners[i] = CreateBTreeNodeDesigner(_config.m_EditorNodes, _editorNodes, ref _nodeDesigners, i);
         }
     }
     //初始化父节点与连线
     for (int i = 0; i < _nodeDesigners.Length; i++)
     {
         var _editorNode = _editorNodes[i];
         if (_editorNode.m_Node.m_ParentNode != null)
         {
             int _parentIndex = _editorNode.m_Node.m_ParentNode.m_Index;
             _nodeDesigners[i].m_ParentNode = _nodeDesigners[_parentIndex];
             BTreeNodeConnection _connection = new BTreeNodeConnection(_nodeDesigners[i], _nodeDesigners[_parentIndex], NodeConnectionType.Incoming);
             _nodeDesigners[i].m_ParentNodeConnection = _connection;
         }
     }
     return(_nodeDesigners);
 }
 public void AddParentConnectionLine(BTreeNodeDesigner orgNode)
 {
     BTreeNodeConnection line = new BTreeNodeConnection(this, orgNode, NodeConnectionType.Incoming);
     if (m_ParentNodeConnection != null)
     {
         m_ParentNodeConnection.m_OriginatingNodeDesigner.delectChildNode(this);
     }
     m_ParentNodeConnection = line;
     m_ParentNode = orgNode;
     markDirty();
 }
 public void AddChildNode(BTreeNodeDesigner destNode)
 {
     BTreeNodeConnection line = new BTreeNodeConnection(destNode, this, NodeConnectionType.Outgoing);
     if (m_ChildNodeConnectionList == null)
     {
         m_ChildNodeConnectionList = new List<BTreeNodeConnection>();
     }
     for (int i = 0; i < m_ChildNodeConnectionList.Count; i++)
     {
         if (m_ChildNodeConnectionList[i].m_DestinationNodeDesigner.Equals(destNode))
         {
             return;
         }
     }
     m_ChildNodeConnectionList.Add(line);
     m_ChildNodeList.Add(destNode);
     m_EditorNode.AddChildNode(destNode.m_EditorNode);
     destNode.AddParentConnectionLine(this);
     destNode.ReSetIndex();
     markDirty();
 }