暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

InvalidConnection.cs 2.3KB

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