ParameterNodeView.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 System.Linq;
  10. [NodeCustomEditor(typeof(ParameterNode))]
  11. public class ParameterNodeView : BaseNodeView
  12. {
  13. ParameterNode parameterNode;
  14. public override void Enable(bool fromInspector = false)
  15. {
  16. parameterNode = nodeTarget as ParameterNode;
  17. EnumField accessorSelector = new EnumField(parameterNode.accessor);
  18. accessorSelector.SetValueWithoutNotify(parameterNode.accessor);
  19. accessorSelector.RegisterValueChangedCallback(evt =>
  20. {
  21. parameterNode.accessor = (ParameterAccessor)evt.newValue;
  22. UpdatePort();
  23. controlsContainer.MarkDirtyRepaint();
  24. ForceUpdatePorts();
  25. });
  26. UpdatePort();
  27. controlsContainer.Add(accessorSelector);
  28. // Find and remove expand/collapse button
  29. titleContainer.Remove(titleContainer.Q("title-button-container"));
  30. // Remove Port from the #content
  31. topContainer.parent.Remove(topContainer);
  32. // Add Port to the #title
  33. titleContainer.Add(topContainer);
  34. parameterNode.onParameterChanged += UpdateView;
  35. UpdateView();
  36. }
  37. void UpdateView()
  38. {
  39. title = parameterNode.parameter?.name;
  40. }
  41. void UpdatePort()
  42. {
  43. if(parameterNode.accessor == ParameterAccessor.Set)
  44. {
  45. titleContainer.AddToClassList("input");
  46. }
  47. else
  48. {
  49. titleContainer.RemoveFromClassList("input");
  50. }
  51. }
  52. }