1
0
mirror of https://github.com/Siccity/xNode.git synced 2025-12-21 01:36:03 +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) {
GenericMenu contextMenu = new GenericMenu();
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);
contextMenu.DropDown(new Rect(Event.current.mousePosition, Vector2.zero));
}

View File

@ -11,10 +11,12 @@ namespace XNode {
/// See: <see cref="AddNode{T}"/> </summary>
[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 {
return AddNode(typeof(T)) as T;
}
/// <summary> Add a node to the graph by type </summary>
public virtual Node AddNode(Type type) {
Node node = ScriptableObject.CreateInstance(type) as Node;
#if UNITY_EDITOR
@ -28,6 +30,21 @@ namespace XNode {
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>
/// <param name="node"></param>
public void RemoveNode(Node node) {