A game about forced loneliness, made by TACStudios
1using System.Linq;
2
3namespace Unity.VisualScripting
4{
5 /// <summary>
6 /// Passes output values from this graph to the parent super unit.
7 /// </summary>
8 [UnitCategory("Nesting")]
9 [UnitOrder(2)]
10 [UnitTitle("Output")]
11 public sealed class GraphOutput : Unit
12 {
13 public override bool canDefine => graph != null;
14
15 protected override void Definition()
16 {
17 isControlRoot = true;
18
19 foreach (var controlOutputDefinition in graph.validPortDefinitions.OfType<ControlOutputDefinition>())
20 {
21 var key = controlOutputDefinition.key;
22
23 ControlInput(key, (flow) =>
24 {
25 var superUnit = flow.stack.GetParent<SubgraphUnit>();
26
27 flow.stack.ExitParentElement();
28
29 superUnit.EnsureDefined();
30
31 return superUnit.controlOutputs[key];
32 });
33 }
34
35 foreach (var valueOutputDefinition in graph.validPortDefinitions.OfType<ValueOutputDefinition>())
36 {
37 var key = valueOutputDefinition.key;
38 var type = valueOutputDefinition.type;
39
40 ValueInput(type, key);
41 }
42 }
43
44 protected override void AfterDefine()
45 {
46 graph.onPortDefinitionsChanged += Define;
47 }
48
49 protected override void BeforeUndefine()
50 {
51 graph.onPortDefinitionsChanged -= Define;
52 }
53 }
54}