Nodes/Math/Operator/Comparison/Ternary.cs
namespace Nodebox.Nodes;
[Register]
[Tag("Operator")]
[Alias("?:", "Switch")]
[Polymorphic(true)]
public class Ternary : Node
{
public override (Pin[] In, Pin[] Out) InitialPins => (
new Pin[] {
Pin.New<bool>("Condition"),
Pin.New<Polymorphic>("True"),
Pin.New<Polymorphic>("False"),
},
new Pin[] {
Pin.New<Polymorphic>("*")
}
);
public override Node Polymorph(PinWireChange change) {
if (change.PinIndex == 0) return null;
return PolymorphHelpers.ToConnectedTypeIfRegistered(typeof(Ternary<>), change);
}
}
[Register(typeof(Library.All))]
[Polymorphic(typeof(Ternary))]
public class Ternary<T> : Ternary
{
public override (Pin[] In, Pin[] Out) InitialPins => base.InitialPins.SubstitutePolymorphic<T>();
public override void Evaluate() {
SetOutput(0, GetInput<bool>(0) ? GetInput<T>(1) : GetInput<T>(2));
}
public override Node Polymorph(PinWireChange change) {
if (change.Target.GetOutputWires().Any()) return null;
if (change.Target.GetInputWires().Where(x => x.ToIndex != 0).Any()) return null;
return PolymorphHelpers.ToNonGeneric<Ternary>();
}
}