Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

GraphInput.cs 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Linq;
  2. namespace Unity.VisualScripting
  3. {
  4. /// <summary>
  5. /// Fetches input values from the parent super unit for this graph.
  6. /// </summary>
  7. [UnitCategory("Nesting")]
  8. [UnitOrder(1)]
  9. [UnitTitle("Input")]
  10. public sealed class GraphInput : Unit
  11. {
  12. public override bool canDefine => graph != null;
  13. protected override void Definition()
  14. {
  15. isControlRoot = true;
  16. foreach (var controlInputDefinition in graph.validPortDefinitions.OfType<ControlInputDefinition>())
  17. {
  18. ControlOutput(controlInputDefinition.key);
  19. }
  20. foreach (var valueInputDefinition in graph.validPortDefinitions.OfType<ValueInputDefinition>())
  21. {
  22. var key = valueInputDefinition.key;
  23. var type = valueInputDefinition.type;
  24. ValueOutput(type, key, (flow) =>
  25. {
  26. var superUnit = flow.stack.GetParent<SubgraphUnit>();
  27. if (flow.enableDebug)
  28. {
  29. var editorData = flow.stack.GetElementDebugData<IUnitDebugData>(superUnit);
  30. editorData.lastInvokeFrame = EditorTimeBinding.frame;
  31. editorData.lastInvokeTime = EditorTimeBinding.time;
  32. }
  33. flow.stack.ExitParentElement();
  34. superUnit.EnsureDefined();
  35. var value = flow.GetValue(superUnit.valueInputs[key], type);
  36. flow.stack.EnterParentElement(superUnit);
  37. return value;
  38. });
  39. }
  40. }
  41. protected override void AfterDefine()
  42. {
  43. graph.onPortDefinitionsChanged += Define;
  44. }
  45. protected override void BeforeUndefine()
  46. {
  47. graph.onPortDefinitionsChanged -= Define;
  48. }
  49. }
  50. }