namespace Unity.VisualScripting { /// /// Branches flow by checking if a condition is true or false. /// [UnitCategory("Control")] [UnitOrder(0)] [RenamedFrom("Bolt.Branch")] [RenamedFrom("Unity.VisualScripting.Branch")] public sealed class If : Unit, IBranchUnit { /// /// The entry point for the branch. /// [DoNotSerialize] [PortLabelHidden] public ControlInput enter { get; private set; } /// /// The condition to check. /// [DoNotSerialize] [PortLabelHidden] public ValueInput condition { get; private set; } /// /// The action to execute if the condition is true. /// [DoNotSerialize] [PortLabel("True")] public ControlOutput ifTrue { get; private set; } /// /// The action to execute if the condition is false. /// [DoNotSerialize] [PortLabel("False")] public ControlOutput ifFalse { get; private set; } protected override void Definition() { enter = ControlInput(nameof(enter), Enter); condition = ValueInput(nameof(condition)); ifTrue = ControlOutput(nameof(ifTrue)); ifFalse = ControlOutput(nameof(ifFalse)); Requirement(condition, enter); Succession(enter, ifTrue); Succession(enter, ifFalse); } public ControlOutput Enter(Flow flow) { return flow.GetValue(condition) ? ifTrue : ifFalse; } } }