public static void CreateNode(NodeGraph _currGraph, NodeType _nodeType, Vector2 _pos) { if (_currGraph != null) { BaseNode curNode = null; switch (_nodeType) { case NodeType.ROOT_NODE: curNode = ScriptableObject.CreateInstance <RootNode>() as RootNode; break; case NodeType.ADD_NODE: curNode = ScriptableObject.CreateInstance <AddNode>() as AddNode; break; case NodeType.SELECTOR_NODE: curNode = ScriptableObject.CreateInstance <SelectorNode>() as SelectorNode; break; case NodeType.SEQUENCE_NODE: curNode = ScriptableObject.CreateInstance <SequenceNode>() as SequenceNode; break; case NodeType.INVERTER_NODE: curNode = ScriptableObject.CreateInstance <InverterNode>() as InverterNode; break; case NodeType.ACTION_NODE: curNode = ScriptableObject.CreateInstance <ActionNode>() as ActionNode; break; default: break; } if (curNode != null) { curNode.InitNode(); curNode.SetNodeRect( (int)_pos.x, (int)_pos.y, (int)curNode.GetNodeRect().width, (int)curNode.GetNodeRect().height); curNode.SetParentGraph(_currGraph); _currGraph.m_nodes.Add(curNode); AssetDatabase.AddObjectToAsset(curNode, _currGraph); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } }
public override void UpdateGUI(BaseNode _node, NodeEditorWindow _curWindow) { Rect nodeRect = _node.GetNodeRect(); Rect tmp = new Rect(); tmp.width = 10f; tmp.height = 10f; float offset = 5f; float centerOfNode = nodeRect.x + (nodeRect.width / 2); float centerOfOutput = tmp.width / 2; float totalWidthOfOutputs = (_node.m_outputs.Count - 1) * (tmp.width + offset); int indexOfThis = _node.m_outputs.IndexOf(this); tmp.x = (centerOfNode - centerOfOutput) - (totalWidthOfOutputs / 2) + ((tmp.width + offset) * indexOfThis); tmp.y = nodeRect.y + (nodeRect.height + offset); m_IORect = tmp; base.UpdateGUI(_node, _curWindow); if (m_connectedTo != null && m_isOccupied) { UnityEditor.Handles.DrawLine(m_IORect.center, m_connectedTo.m_IORect.center); } }
public override void UpdateGUI(BaseNode _node, NodeEditorWindow _curWindow) { if (_node.GetNodeType() != NodeType.ROOT_NODE) { Rect nodeRect = _node.GetNodeRect(); Rect tmp = new Rect(); tmp.width = 13f; tmp.height = 13f; float offset = 5f; float centerOfNode = nodeRect.x + (nodeRect.width / 2); float centerOfOutput = tmp.width / 2; tmp.x = centerOfNode - centerOfOutput; tmp.y = nodeRect.y - (tmp.height + offset); m_IORect = tmp; base.UpdateGUI(_node, _curWindow); } }