123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace GraphProcessor
- {
- [System.Serializable]
- public class SerializableEdge : ISerializationCallbackReceiver
- {
- public string GUID;
- [SerializeField]
- BaseGraph owner;
- [SerializeField]
- string inputNodeGUID;
- [SerializeField]
- string outputNodeGUID;
- [System.NonSerialized]
- public BaseNode inputNode;
- [System.NonSerialized]
- public NodePort inputPort;
- [System.NonSerialized]
- public NodePort outputPort;
- //temporary object used to send port to port data when a custom input/output function is used.
- [System.NonSerialized]
- public object passThroughBuffer;
- [System.NonSerialized]
- public BaseNode outputNode;
- public string inputFieldName;
- public string outputFieldName;
- // Use to store the id of the field that generate multiple ports
- public string inputPortIdentifier;
- public string outputPortIdentifier;
- public SerializableEdge() {}
- public static SerializableEdge CreateNewEdge(BaseGraph graph, NodePort inputPort, NodePort outputPort)
- {
- SerializableEdge edge = new SerializableEdge();
- edge.owner = graph;
- edge.GUID = System.Guid.NewGuid().ToString();
- edge.inputNode = inputPort.owner;
- edge.inputFieldName = inputPort.fieldName;
- edge.outputNode = outputPort.owner;
- edge.outputFieldName = outputPort.fieldName;
- edge.inputPort = inputPort;
- edge.outputPort = outputPort;
- edge.inputPortIdentifier = inputPort.portData.identifier;
- edge.outputPortIdentifier = outputPort.portData.identifier;
- return edge;
- }
- public void OnBeforeSerialize()
- {
- if (outputNode == null || inputNode == null)
- return;
- outputNodeGUID = outputNode.GUID;
- inputNodeGUID = inputNode.GUID;
- }
- public void OnAfterDeserialize() {}
- //here our owner have been deserialized
- public void Deserialize()
- {
- if (!owner.nodesPerGUID.ContainsKey(outputNodeGUID) || !owner.nodesPerGUID.ContainsKey(inputNodeGUID))
- return ;
- outputNode = owner.nodesPerGUID[outputNodeGUID];
- inputNode = owner.nodesPerGUID[inputNodeGUID];
- inputPort = inputNode.GetPort(inputFieldName, inputPortIdentifier);
- outputPort = outputNode.GetPort(outputFieldName, outputPortIdentifier);
- }
- public override string ToString() => $"{outputNode.name}:{outputPort.fieldName} -> {inputNode.name}:{inputPort.fieldName}";
- }
- }
|