ComparisonView.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5. using UnityEditor.UIElements;
  6. using UnityEditor.Experimental.GraphView;
  7. using UnityEngine.UIElements;
  8. using GraphProcessor;
  9. using NodeGraphProcessor.Examples;
  10. [NodeCustomEditor(typeof(Comparison))]
  11. public class ComparisonView : BaseNodeView
  12. {
  13. public override void Enable()
  14. {
  15. Comparison comparisonNode = nodeTarget as Comparison;
  16. DrawDefaultInspector();
  17. var inputA = new FloatField("In A") { value = comparisonNode.inA };
  18. var inputB = new FloatField("In B") { value = comparisonNode.inB };
  19. inputA.RegisterValueChangedCallback(v => {
  20. owner.RegisterCompleteObjectUndo("Change InA value");
  21. comparisonNode.inA = v.newValue;
  22. });
  23. inputB.RegisterValueChangedCallback(v => {
  24. owner.RegisterCompleteObjectUndo("Change InB value");
  25. comparisonNode.inB = v.newValue;
  26. });
  27. nodeTarget.onAfterEdgeConnected += UpdateVisibleFields;
  28. nodeTarget.onAfterEdgeDisconnected += UpdateVisibleFields;
  29. UpdateVisibleFields(null);
  30. void UpdateVisibleFields(SerializableEdge _)
  31. {
  32. var inA = nodeTarget.GetPort(nameof(comparisonNode.inA), null);
  33. var inB = nodeTarget.GetPort(nameof(comparisonNode.inB), null);
  34. controlsContainer.Add(inputA);
  35. controlsContainer.Add(inputB);
  36. if (inA.GetEdges().Count > 0)
  37. controlsContainer.Remove(inputA);
  38. if (inB.GetEdges().Count > 0)
  39. controlsContainer.Remove(inputB);
  40. }
  41. }
  42. }