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}