diff --git a/Scripts/Editor/NodeEditorAction.cs b/Scripts/Editor/NodeEditorAction.cs
index a13d2d7..0ba2428 100644
--- a/Scripts/Editor/NodeEditorAction.cs
+++ b/Scripts/Editor/NodeEditorAction.cs
@@ -88,6 +88,7 @@ namespace XNodeEditor {
node.position.y = (Mathf.Round((node.position.y + 8) / 16) * 16) - 8;
}
+ // Offset portConnectionPoints instantly if a node is dragged so they aren't delayed by a frame.
Vector2 offset = node.position - initial;
if (offset.sqrMagnitude > 0){
foreach (XNode.NodePort output in node.Outputs){
@@ -103,7 +104,6 @@ namespace XNodeEditor {
reroutePoints[index] += offset;
}
}
-
}
foreach (XNode.NodePort input in node.Inputs) {
diff --git a/Scripts/Editor/NodeEditorWindow.cs b/Scripts/Editor/NodeEditorWindow.cs
index b9ea2a5..72fd4ce 100644
--- a/Scripts/Editor/NodeEditorWindow.cs
+++ b/Scripts/Editor/NodeEditorWindow.cs
@@ -10,16 +10,13 @@ namespace XNodeEditor {
/// Stores node positions for all nodePorts.
public Dictionary portConnectionPoints { get { return _portConnectionPoints; } }
-
private Dictionary _portConnectionPoints = new Dictionary();
+ [SerializeField] private NodePortReference[] _references = new NodePortReference[0];
+ [SerializeField] private Rect[] _rects = new Rect[0];
- [System.Serializable]
- private class NodePortReference {
- [SerializeField]
- private XNode.Node _node;
- [SerializeField]
- private string _name;
-
+ [System.Serializable] private class NodePortReference {
+ [SerializeField] private XNode.Node _node;
+ [SerializeField] private string _name;
public NodePortReference(XNode.NodePort nodePort) {
_node = nodePort.node;
@@ -30,18 +27,12 @@ namespace XNodeEditor {
if (_node == null) {
return null;
}
-
return _node.GetPort(_name);
}
-
}
- [SerializeField]
- private NodePortReference[] _references = new NodePortReference[0];
- [SerializeField]
- private Rect[] _rects = new Rect[0];
-
private void OnDisable() {
+ // Cache portConnectionPoints before serialization starts
int count = portConnectionPoints.Count;
_references = new NodePortReference[count];
_rects = new Rect[count];
@@ -54,8 +45,8 @@ namespace XNodeEditor {
}
private void OnEnable() {
+ // Reload portConnectionPoints if there are any
int length = _references.Length;
-
if (length == _rects.Length) {
for (int i = 0; i < length; i++) {
XNode.NodePort nodePort = _references[i].GetNodePort();
@@ -79,7 +70,6 @@ namespace XNodeEditor {
if (graphEditor != null && NodeEditorPreferences.GetSettings().autoSave) AssetDatabase.SaveAssets();
}
- //partial void OnEnable();
/// Create editor window
public static NodeEditorWindow Init() {
NodeEditorWindow w = CreateInstance();