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; }
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; } }
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); } } }
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); } } } } }
public ViewLinkMode(StateNodeRef node, bool isOut, bool isChild, Vector2 pos) { this.node = node; this.isOut = isOut; this.isChild = isChild; startPos = pos; currentPos = pos; }
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(); } }
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(); } }
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); }
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(); } }
public override bool CheckDelete(StateNodeRef node) { return(!(node.Node.Data is SkillEntry)); }
public override bool CheckOutput(StateNodeRef node) { return(!(node.Node.Data is SkillAction)); }
public virtual bool ChechInput(StateNodeRef node) { return(typeof(IInputNode).IsAssignableFrom(node.Node.NodeType)); }
public virtual bool CheckCopy(StateNodeRef node) { return(!typeof(INoCopy).IsAssignableFrom(node.Node.NodeType)); }
public virtual bool CheckDelete(StateNodeRef node) { return(!typeof(INoDelete).IsAssignableFrom(node.Node.NodeType)); }
public void SelectNode(StateNodeRef node) { Selecteds.Clear(); Selecteds.Add(node); MoveNodeToBack(node.Node); }
public StateNodeReplaceDropdown(StateGraphView view, StateNodeRef replaceNode) : base(view) { node = replaceNode; }