SerializableEdge.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace GraphProcessor
  5. {
  6. [System.Serializable]
  7. public class SerializableEdge : ISerializationCallbackReceiver
  8. {
  9. public string GUID;
  10. [SerializeField]
  11. BaseGraph owner;
  12. [SerializeField]
  13. string inputNodeGUID;
  14. [SerializeField]
  15. string outputNodeGUID;
  16. [System.NonSerialized]
  17. public BaseNode inputNode;
  18. [System.NonSerialized]
  19. public NodePort inputPort;
  20. [System.NonSerialized]
  21. public NodePort outputPort;
  22. //temporary object used to send port to port data when a custom input/output function is used.
  23. [System.NonSerialized]
  24. public object passThroughBuffer;
  25. [System.NonSerialized]
  26. public BaseNode outputNode;
  27. public string inputFieldName;
  28. public string outputFieldName;
  29. // Use to store the id of the field that generate multiple ports
  30. public string inputPortIdentifier;
  31. public string outputPortIdentifier;
  32. public SerializableEdge() {}
  33. public static SerializableEdge CreateNewEdge(BaseGraph graph, NodePort inputPort, NodePort outputPort)
  34. {
  35. SerializableEdge edge = new SerializableEdge();
  36. edge.owner = graph;
  37. edge.GUID = System.Guid.NewGuid().ToString();
  38. edge.inputNode = inputPort.owner;
  39. edge.inputFieldName = inputPort.fieldName;
  40. edge.outputNode = outputPort.owner;
  41. edge.outputFieldName = outputPort.fieldName;
  42. edge.inputPort = inputPort;
  43. edge.outputPort = outputPort;
  44. edge.inputPortIdentifier = inputPort.portData.identifier;
  45. edge.outputPortIdentifier = outputPort.portData.identifier;
  46. return edge;
  47. }
  48. public void OnBeforeSerialize()
  49. {
  50. if (outputNode == null || inputNode == null)
  51. return;
  52. outputNodeGUID = outputNode.GUID;
  53. inputNodeGUID = inputNode.GUID;
  54. }
  55. public void OnAfterDeserialize() {}
  56. //here our owner have been deserialized
  57. public void Deserialize()
  58. {
  59. if (!owner.nodesPerGUID.ContainsKey(outputNodeGUID) || !owner.nodesPerGUID.ContainsKey(inputNodeGUID))
  60. return ;
  61. outputNode = owner.nodesPerGUID[outputNodeGUID];
  62. inputNode = owner.nodesPerGUID[inputNodeGUID];
  63. inputPort = inputNode.GetPort(inputFieldName, inputPortIdentifier);
  64. outputPort = outputNode.GetPort(outputFieldName, outputPortIdentifier);
  65. }
  66. public override string ToString() => $"{outputNode.name}:{outputPort.fieldName} -> {inputNode.name}:{inputPort.fieldName}";
  67. }
  68. }