1
0
mirror of https://github.com/Siccity/xNode.git synced 2025-12-20 09:16:01 +08:00

Added Duplicate and Move To Top to node context menu

This commit is contained in:
Thor Brigsted 2017-11-20 00:54:04 +01:00
parent 69c2b254aa
commit 8bfe09dfb7
2 changed files with 28 additions and 0 deletions

View File

@ -75,6 +75,17 @@ namespace XNodeEditor {
public void ShowNodeContextMenu(Node node) { public void ShowNodeContextMenu(Node node) {
GenericMenu contextMenu = new GenericMenu(); GenericMenu contextMenu = new GenericMenu();
contextMenu.AddItem(new GUIContent("Remove"), false, () => graph.RemoveNode(node)); contextMenu.AddItem(new GUIContent("Remove"), false, () => graph.RemoveNode(node));
contextMenu.AddItem(new GUIContent("Duplicate"), false, () => {
Node n = graph.CopyNode(node);
n.position = node.position + new Vector2(30,30);
});
contextMenu.AddItem(new GUIContent("Move To Top"), false, () => {
int index;
while((index = graph.nodes.IndexOf(node)) != graph.nodes.Count-1) {
graph.nodes[index] = graph.nodes[index+1];
graph.nodes[index+1] = node;
}
});
AddCustomContextMenuItems(contextMenu, node); AddCustomContextMenuItems(contextMenu, node);
contextMenu.DropDown(new Rect(Event.current.mousePosition, Vector2.zero)); contextMenu.DropDown(new Rect(Event.current.mousePosition, Vector2.zero));
} }

View File

@ -11,10 +11,12 @@ namespace XNode {
/// See: <see cref="AddNode{T}"/> </summary> /// See: <see cref="AddNode{T}"/> </summary>
[SerializeField] public List<Node> nodes = new List<Node>(); [SerializeField] public List<Node> nodes = new List<Node>();
/// <summary> Add a node to the graph by type </summary>
public T AddNode<T>() where T : Node { public T AddNode<T>() where T : Node {
return AddNode(typeof(T)) as T; return AddNode(typeof(T)) as T;
} }
/// <summary> Add a node to the graph by type </summary>
public virtual Node AddNode(Type type) { public virtual Node AddNode(Type type) {
Node node = ScriptableObject.CreateInstance(type) as Node; Node node = ScriptableObject.CreateInstance(type) as Node;
#if UNITY_EDITOR #if UNITY_EDITOR
@ -28,6 +30,21 @@ namespace XNode {
return node; return node;
} }
/// <summary> Creates a copy of the original node in the graph </summary>
public virtual Node CopyNode(Node original) {
Node node = ScriptableObject.Instantiate(original);
node.ClearConnections();
#if UNITY_EDITOR
if (!Application.isPlaying) {
UnityEditor.AssetDatabase.AddObjectToAsset(node, this);
UnityEditor.AssetDatabase.SaveAssets();
}
#endif
nodes.Add(node);
node.graph = this;
return node;
}
/// <summary> Safely remove a node and all its connections </summary> /// <summary> Safely remove a node and all its connections </summary>
/// <param name="node"></param> /// <param name="node"></param>
public void RemoveNode(Node node) { public void RemoveNode(Node node) {