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
    }
}