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