mirror of
https://github.com/Siccity/xNode.git
synced 2025-12-21 01:36:03 +08:00
Merge pull request #55 from ddalacu/master
Fix the frame delay in noodle end points
This commit is contained in:
commit
83acd16d4b
@ -81,11 +81,32 @@ namespace XNodeEditor {
|
|||||||
for (int i = 0; i < Selection.objects.Length; i++) {
|
for (int i = 0; i < Selection.objects.Length; i++) {
|
||||||
if (Selection.objects[i] is XNode.Node) {
|
if (Selection.objects[i] is XNode.Node) {
|
||||||
XNode.Node node = Selection.objects[i] as XNode.Node;
|
XNode.Node node = Selection.objects[i] as XNode.Node;
|
||||||
|
Vector2 initial = node.position;
|
||||||
node.position = mousePos + dragOffset[i];
|
node.position = mousePos + dragOffset[i];
|
||||||
if (gridSnap) {
|
if (gridSnap) {
|
||||||
node.position.x = (Mathf.Round((node.position.x + 8) / 16) * 16) - 8;
|
node.position.x = (Mathf.Round((node.position.x + 8) / 16) * 16) - 8;
|
||||||
node.position.y = (Mathf.Round((node.position.y + 8) / 16) * 16) - 8;
|
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){
|
||||||
|
Rect rect;
|
||||||
|
if (portConnectionPoints.TryGetValue(output, out rect)) {
|
||||||
|
rect.position += offset;
|
||||||
|
portConnectionPoints[output] = rect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (XNode.NodePort input in node.Inputs) {
|
||||||
|
Rect rect;
|
||||||
|
if (portConnectionPoints.TryGetValue(input, out rect)) {
|
||||||
|
rect.position += offset;
|
||||||
|
portConnectionPoints[input] = rect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Move selected reroutes with offset
|
// Move selected reroutes with offset
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEditor.Callbacks;
|
using UnityEditor.Callbacks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -11,6 +11,51 @@ namespace XNodeEditor {
|
|||||||
/// <summary> Stores node positions for all nodePorts. </summary>
|
/// <summary> Stores node positions for all nodePorts. </summary>
|
||||||
public Dictionary<XNode.NodePort, Rect> portConnectionPoints { get { return _portConnectionPoints; } }
|
public Dictionary<XNode.NodePort, Rect> portConnectionPoints { get { return _portConnectionPoints; } }
|
||||||
private Dictionary<XNode.NodePort, Rect> _portConnectionPoints = new Dictionary<XNode.NodePort, Rect>();
|
private Dictionary<XNode.NodePort, Rect> _portConnectionPoints = new Dictionary<XNode.NodePort, Rect>();
|
||||||
|
[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;
|
||||||
|
|
||||||
|
public NodePortReference(XNode.NodePort nodePort) {
|
||||||
|
_node = nodePort.node;
|
||||||
|
_name = nodePort.fieldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public XNode.NodePort GetNodePort() {
|
||||||
|
if (_node == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return _node.GetPort(_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable() {
|
||||||
|
// Cache portConnectionPoints before serialization starts
|
||||||
|
int count = portConnectionPoints.Count;
|
||||||
|
_references = new NodePortReference[count];
|
||||||
|
_rects = new Rect[count];
|
||||||
|
int index = 0;
|
||||||
|
foreach (var portConnectionPoint in portConnectionPoints) {
|
||||||
|
_references[index] = new NodePortReference(portConnectionPoint.Key);
|
||||||
|
_rects[index] = portConnectionPoint.Value;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
if (nodePort != null)
|
||||||
|
_portConnectionPoints.Add(nodePort, _rects[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Dictionary<XNode.Node, Vector2> nodeSizes { get { return _nodeSizes; } }
|
public Dictionary<XNode.Node, Vector2> nodeSizes { get { return _nodeSizes; } }
|
||||||
private Dictionary<XNode.Node, Vector2> _nodeSizes = new Dictionary<XNode.Node, Vector2>();
|
private Dictionary<XNode.Node, Vector2> _nodeSizes = new Dictionary<XNode.Node, Vector2>();
|
||||||
public XNode.NodeGraph graph;
|
public XNode.NodeGraph graph;
|
||||||
@ -25,7 +70,6 @@ namespace XNodeEditor {
|
|||||||
if (graphEditor != null && NodeEditorPreferences.GetSettings().autoSave) AssetDatabase.SaveAssets();
|
if (graphEditor != null && NodeEditorPreferences.GetSettings().autoSave) AssetDatabase.SaveAssets();
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void OnEnable();
|
|
||||||
/// <summary> Create editor window </summary>
|
/// <summary> Create editor window </summary>
|
||||||
public static NodeEditorWindow Init() {
|
public static NodeEditorWindow Init() {
|
||||||
NodeEditorWindow w = CreateInstance<NodeEditorWindow>();
|
NodeEditorWindow w = CreateInstance<NodeEditorWindow>();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user