Ejemplo n.º 1
0
 public LinkData(LinkLine l, OperatorLink i, int ii, OperatorLink o)
 {
     lineObj     = l;
     inputObj    = i;
     inputObjIdx = ii;
     outputObj   = o;
 }
Ejemplo n.º 2
0
 public LinkNodeData(OperatorLink o, GameObject a, bool isin, int ii, int oi)
 {
     obj        = o;
     isInput    = isin;
     anchorObj  = a;
     _inputIdx  = ii;
     _outputIdx = oi;
 }
Ejemplo n.º 3
0
 public void RemoveOutputLink(OperatorLink in_node, int in_idx)
 {
     for (int i = 0; i != m_outputOperators.Count; ++i)
     {
         if (m_outputOperators[i] == in_node && m_outputOperatorIdx[i] == in_idx)
         {
             m_outputOperatorIdx.RemoveAt(i);
             m_outputOperators.RemoveAt(i);
             return;
         }
     }
 }
Ejemplo n.º 4
0
 // 删除并返回留下的line对象
 public LinkLine RemoveLinkLine(OperatorLink input_node, int input_idx, OperatorLink output_node)
 {
     for (int i = 0; i != m_links.Count; ++i)
     {
         if (m_links[i].inputObj == input_node && m_links[i].outputObj == output_node && m_links[i].inputObjIdx == input_idx)
         {
             LinkLine line = m_links[i].lineObj;
             m_links.RemoveAt(i);
             return(line);
         }
     }
     return(null);
 }
Ejemplo n.º 5
0
 // 获取某个连接点当前的状态信息
 public void GetLinkData(LinkNodeData node, out OperatorLink input_node, out int input_idx, out OperatorLink output_node)
 {
     if (node.isInput)
     {
         input_node  = node.obj;
         input_idx   = node.inputIdx;
         output_node = input_node.GetInputNode(input_idx);
     }
     else
     {
         input_node  = node.obj.GetOutputNode(node.outputIdx);
         input_idx   = node.obj.GetOutputNodeInIdx(node.outputIdx);
         output_node = node.obj;
     }
 }
Ejemplo n.º 6
0
    private void _genCodeInner(OperatorLink link, ref string res)
    {
        string[] src_names = new string[link.m_inputOperators.Length];
        for (int input_idx = 0; input_idx != link.m_inputOperators.Length; ++input_idx)
        {
            if (link.m_inputOperators[input_idx] != null)
            {
                if (!m_checkedNode.ContainsKey(link.m_inputOperators[input_idx].oper.name))
                {
                    _genCodeInner(link.m_inputOperators[input_idx], ref res);
                }
                src_names[input_idx] = link.m_inputOperators[input_idx].oper.m_outputName;
            }
        }

        res += link.oper.GenStr(src_names);
    }
Ejemplo n.º 7
0
    // 检查是否会造成循环
    public bool IsCauseCicle(LinkNodeData node)
    {
        if (node.obj == m_matchingObj.obj)
        {
            return(true);
        }

        Dictionary <OperatorLink, bool> checked_pool = new Dictionary <OperatorLink, bool>();

        checked_pool[node.obj]          = true;
        checked_pool[m_matchingObj.obj] = true;

        OperatorLink input_node  = node.isInput ? node.obj : m_matchingObj.obj;
        OperatorLink output_node = node.isInput ? m_matchingObj.obj : node.obj;

        Stack <OperatorLink> to_check_stack = new Stack <OperatorLink>();

        to_check_stack.Push(output_node);
        while (to_check_stack.Count != 0)
        {
            OperatorLink cur_link = to_check_stack.Pop();
            foreach (OperatorLink child_link in cur_link.m_inputOperators)
            {
                if (child_link != null)
                {
                    if (child_link == input_node)
                    {
                        return(true);
                    }
                    if (!checked_pool.ContainsKey(child_link))
                    {
                        checked_pool[child_link] = true;
                        to_check_stack.Push(child_link);
                    }
                }
            }
        }

        return(false);
    }
Ejemplo n.º 8
0
    // 决定当前的线
    public void SettleMatch(LinkNodeData dst)
    {
        if (!CanMatch(dst))
        {
            return;
        }

        OperatorLink input_node    = (dst.isInput ? dst : m_matchingObj).obj;
        OperatorLink output_node   = (!dst.isInput ? dst : m_matchingObj).obj;
        GameObject   input_anchor  = (dst.isInput ? dst : m_matchingObj).anchorObj;
        GameObject   output_anchor = (!dst.isInput ? dst : m_matchingObj).anchorObj;
        int          input_idx     = dst.isInput ? dst.inputIdx : m_matchingObj.inputIdx;

        input_node.AddInputLink(output_node, input_idx);
        output_node.AddOutputLink(input_node, input_idx);

        m_links.Add(new LinkData(m_curLine, input_node, input_idx, output_node));
        m_curLine.SetNode(output_anchor, input_anchor);

        m_matchingObj = null;
        m_curLine     = null;

        OnLinkChange();
    }
Ejemplo n.º 9
0
 public void AddOutputLink(OperatorLink other_in, int in_idx)
 {
     m_outputOperators.Add(other_in);
     m_outputOperatorIdx.Add(in_idx);
 }
Ejemplo n.º 10
0
 public void AddInputLink(OperatorLink other_out, int in_idx)
 {
     m_inputOperators[in_idx] = other_out;
 }