Nodes/Core/Relay/Relay.cs
namespace Nodebox.Nodes;

[Register]
[Tag("Core")]
[Alias("Reroute")]
[Polymorphic(true)]
public class Relay : Node
{
	public override Vector2 SizeMultiplier => new(0.25f, 0.66f);

	public override (Pin[] In, Pin[] Out) InitialPins => (
        new Pin[] {
            Pin.New<Polymorphic>(""),
        },
        
        new Pin[] {
            Pin.New<Polymorphic>(""),
        }
    );

	public override Node Polymorph(PinWireChange change) =>
        PolymorphHelpers.ToConnectedTypeIfRegistered(typeof(Relay<>), change);
}

[Register(typeof(Library.All))]
[Polymorphic(typeof(Relay))]
public class Relay<T> : Relay
{
	public override (Pin[] In, Pin[] Out) InitialPins => base.InitialPins.SubstitutePolymorphic<T>();
    
    public override Node Polymorph(PinWireChange change) =>
        PolymorphHelpers.ToNonGenericIfAllDisconnected<E>(change);

	public override void Evaluate() => SetOutput(0, GetInput<T>(0));
}