A game about forced loneliness, made by TACStudios
1using System;
2using System.Linq;
3
4namespace Unity.VisualScripting
5{
6 public sealed class InvalidConnection : UnitConnection<IUnitOutputPort, IUnitInputPort>, IUnitConnection
7 {
8 [Obsolete(Serialization.ConstructorWarning)]
9 public InvalidConnection() : base() { }
10
11 public InvalidConnection(IUnitOutputPort source, IUnitInputPort destination) : base(source, destination) { }
12
13 public override void AfterRemove()
14 {
15 base.AfterRemove();
16 source.unit.RemoveUnconnectedInvalidPorts();
17 destination.unit.RemoveUnconnectedInvalidPorts();
18 }
19
20 #region Ports
21
22 public override IUnitOutputPort source => sourceUnit.outputs.Single(p => p.key == sourceKey);
23
24 public override IUnitInputPort destination => destinationUnit.inputs.Single(p => p.key == destinationKey);
25
26 public IUnitOutputPort validSource => sourceUnit.validOutputs.Single(p => p.key == sourceKey);
27
28 public IUnitInputPort validDestination => destinationUnit.validInputs.Single(p => p.key == destinationKey);
29
30 #endregion
31
32 #region Dependencies
33
34 public override bool sourceExists => sourceUnit.outputs.Any(p => p.key == sourceKey);
35
36 public override bool destinationExists => destinationUnit.inputs.Any(p => p.key == destinationKey);
37
38 public bool validSourceExists => sourceUnit.validOutputs.Any(p => p.key == sourceKey);
39
40 public bool validDestinationExists => destinationUnit.validInputs.Any(p => p.key == destinationKey);
41
42 public override bool HandleDependencies()
43 {
44 // Replace the invalid connection with a valid connection if it can be created instead.
45 if (validSourceExists && validDestinationExists && validSource.CanValidlyConnectTo(validDestination))
46 {
47 validSource.ValidlyConnectTo(validDestination);
48
49 return false;
50 }
51
52 // Add the invalid ports to the nodes if need be
53 if (!sourceExists)
54 {
55 sourceUnit.invalidOutputs.Add(new InvalidOutput(sourceKey));
56 }
57
58 if (!destinationExists)
59 {
60 destinationUnit.invalidInputs.Add(new InvalidInput(destinationKey));
61 }
62
63 return true;
64 }
65
66 #endregion
67 }
68}