using Enigmos.Ports; using Enigmos.Ports.DataPorts; using Enigmos.Ports.SignalPorts; using Nocturnis.DataStructures.ConfigurableParameters; using Nocturnis.Enigmos.Modules; using TabulaSmaragdina; using TabulaSmaragdina.Constants; namespace Enigmos.Modules.ControllingModules; public partial class SinglePoleDoubleThrowSwitchModule : ControllingModule, IParameterizedModule { private DataInPort ControlInput { get; set; } private SignalInPort SignalIn { get; set; } private SignalOutPort SignalOut1 { get; set; } private SignalOutPort SignalOut2 { get; set; } public HashSet ConfigurableParameters { get; set; } private IBoolParameter LeftPortForTrue { get; set; } public override IEnumerable Ports => new BasePort[] { SignalIn, SignalOut1, SignalOut2, ControlInput }; public override void Init() { base.Init(); SignalIn = GetPort("SignalIn"); SignalOut1 = GetPort("SignalOut1"); SignalOut2 = GetPort("SignalOut2"); ControlInput = GetPort("ControlInput"); LeftPortForTrue = GlobalProvider.DataStructureProvider.NewBoolParameter("Redirect to:", "Left", "Right", true); ControlInput.SetDataType(EnigmosConstant.DataPortTypes.Bit); ConfigurableParameters = new HashSet { LeftPortForTrue }; PostInit(); } protected override void Route(IRootModule root) { Visited = true; SignalOutPort selectedPort = (LeftPortForTrue.ParameterValue && ControlInput.GetData(root).Bit) ? SignalOut1 : SignalOut2; if (selectedPort.Connected) selectedPort.ConnectedPort.Module.RouteWithTimeoutHandle(root); else root.ActionFinished = true; } }