Beispiel #1
0
 public StateNodeCreatDropdown(StateGraphView view, StateNodeRef node, bool isOut, bool isChild) : base(view)
 {
     this.node    = node;
     this.isChild = isChild;
     this.isOut   = isChild? true : isOut;
     pos          = view.Canvas.MouseInWorld;
 }
Beispiel #2
0
 public void AddLink(StateNodeRef from, StateNodeRef to, bool isChild)
 {
     if (!from || !to || from == to)
     {
         return;
     }
     if (!IsStack(from.Node))
     {
         Links.RemoveAll(it => it.From == from);
     }
     if (isChild)
     {
         Links.RemoveAll(it => it.To == to);
     }
     else
     {
         Links.RemoveAll(it => (it.From == from && !it.IsChild) || (it.From == to && it.To == from) || (it.To == to && it.IsChild));
     }
     Links.Add(new StateNodeLink {
         From = from, To = to, IsChild = isChild
     });
     if (isChild)
     {
         to.Node.Parent = from;
     }
     else
     {
         to.Node.Parent = StateNodeRef.Empty;
     }
 }
Beispiel #3
0
    public void ChildNodeMoveDown(StateNodeRef childNode)
    {
        int oldIndex = Graph.Links.FindIndex(it => it.IsChild && it.To == childNode);

        if (oldIndex >= 0)
        {
            int swapIndex = -1;
            for (int i = oldIndex + 1; i < Graph.Links.Count; ++i)
            {
                var link = Graph.Links[i];
                if (link.IsChild && link.From == childNode.Node.Parent)
                {
                    swapIndex = i;
                    break;
                }
            }
            if (swapIndex >= 0)
            {
                RegistUndo("move child node down");
                var link = Graph.Links[swapIndex];
                Graph.Links[swapIndex] = Graph.Links[oldIndex];
                Graph.Links[oldIndex]  = link;

                //重新排序, 刷新位置
                int oldSortIndex = link.To.Node.SortIndex;
                link.To.Node.SortIndex = Graph.Links[swapIndex].To.Node.SortIndex;
                Graph.Links[swapIndex].To.Node.SortIndex = oldSortIndex;
                SortNodes();
                UpdateBounds(link.From.Node);
            }
        }
    }
Beispiel #4
0
 private void AddNode(StateGraphView view, StateNodeRef nodeRef)
 {
     if (movedNodes.Contains(nodeRef))
     {
         return;
     }
     movedNodes.Add(nodeRef);
     if (nodeRef.Node.Parent)
     {
         AddNode(view, nodeRef.Node.Parent);
     }
     else
     {
         foreach (var link in view.Graph.Links)
         {
             if (link.IsChild && link.From == nodeRef)
             {
                 if (!movedNodes.Contains(link.To))
                 {
                     movedNodes.Add(link.To);
                 }
             }
         }
     }
 }
Beispiel #5
0
 public ViewLinkMode(StateNodeRef node, bool isOut, bool isChild, Vector2 pos)
 {
     this.node    = node;
     this.isOut   = isOut;
     this.isChild = isChild;
     startPos     = pos;
     currentPos   = pos;
 }
Beispiel #6
0
    public void BreakOutputLink(StateNodeRef node)
    {
        var link = Graph.Links.Find(it => !it.IsChild && it.From == node);

        if (link != null)
        {
            RegistUndo("break input link");
            Graph.Links.Remove(link);
            UpdateAllNodeBounds();
        }
    }
Beispiel #7
0
 public void BreakChildLink(StateNodeRef node)
 {
     if (Graph.Links.Exists(it => it.IsChild && it.From == node))
     {
         RegistUndo("break input link");
         for (int i = Graph.Links.Count; i >= 0; --i)
         {
             var link = Graph.Links[i];
             if (link.IsChild && link.From == node)
             {
                 Graph.Links.RemoveAt(i);
                 link.To.Node.Bounds.position += new Vector2(node.Node.Bounds.width, 0);
             }
         }
         UpdateAllNodeBounds();
     }
 }
Beispiel #8
0
 public void DeleteNode(StateNodeRef node)
 {
     for (int i = Links.Count - 1; i >= 0; --i)
     {
         var link = Links[i];
         if (link.From == node)
         {
             link.To.Node.Parent = StateNodeRef.Empty;
             Links.RemoveAt(i);
             continue;
         }
         if (link.To == node)
         {
             Links.RemoveAt(i);
             continue;
         }
     }
     Nodes.Remove(node.Node);
 }
Beispiel #9
0
 public void BreakInputLink(StateNodeRef nodeRef)
 {
     if (Graph.Links.Exists(it => it.To == nodeRef))
     {
         RegistUndo("break input link");
         nodeRef.Node.Parent = StateNodeRef.Empty;
         for (int i = 0; i < Graph.Links.Count; ++i)
         {
             var link = Graph.Links[i];
             if (link.To == nodeRef)
             {
                 Graph.Links.RemoveAt(i);
                 --i;
                 if (link.IsChild)
                 {
                     nodeRef.Node.Bounds.position += new Vector2(link.From.Node.Bounds.width, 0);
                 }
             }
         }
         UpdateAllNodeBounds();
     }
 }
Beispiel #10
0
 public override bool CheckDelete(StateNodeRef node)
 {
     return(!(node.Node.Data is SkillEntry));
 }
Beispiel #11
0
 public override bool CheckOutput(StateNodeRef node)
 {
     return(!(node.Node.Data is SkillAction));
 }
Beispiel #12
0
 public virtual bool ChechInput(StateNodeRef node)
 {
     return(typeof(IInputNode).IsAssignableFrom(node.Node.NodeType));
 }
Beispiel #13
0
 public virtual bool CheckCopy(StateNodeRef node)
 {
     return(!typeof(INoCopy).IsAssignableFrom(node.Node.NodeType));
 }
Beispiel #14
0
 public virtual bool CheckDelete(StateNodeRef node)
 {
     return(!typeof(INoDelete).IsAssignableFrom(node.Node.NodeType));
 }
Beispiel #15
0
 public void SelectNode(StateNodeRef node)
 {
     Selecteds.Clear();
     Selecteds.Add(node);
     MoveNodeToBack(node.Node);
 }
 public StateNodeReplaceDropdown(StateGraphView view, StateNodeRef replaceNode) : base(view)
 {
     node = replaceNode;
 }