using Nocturnis.DataStructures.ConfigurableParameters; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Nocturnis.Enigmos.Ports.SignalPorts.Directions; using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Controls; using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Modules.ControllingModules; public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParameterizedModule, ITerminalModule { public HashSet ConfigurableParameters { get; set; } = new(); private IBoolParameter? LeftPortForTrue { get; set; } public IDataInPort[] DataInPorts { get; set; } = Array.Empty(); public void Drain() { foreach (IDataInPort ip in DataInPorts) _ = ip.GetData.Get; } public bool Finished { get; set; } public override void Init() { base.Init(); this.SignalInInit("SignalIn", 1); this.SignalOutInit("SignalOut", 2); this.DataInInit("Input", 1); LeftPortForTrue = GlobalProvider.DataStructureProvider!.NewBoolParameter("Redirect to:", "Left", "Right", true); DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit); ConfigurableParameters = new HashSet { LeftPortForTrue }; PostInit(); } public override void Execute() { Visited = true; ISignalOutPort selectedPort = (LeftPortForTrue!.ParameterValue && DataInPorts[0].GetData.Get!.Bit) ? SignalOutPorts[0] : SignalOutPorts[1]; if (selectedPort.Connected) selectedPort.Route(); else EnigmosControl.Instance.RootModule.ActionFinished = true; } }