Files
Enigmos/Modules/ControllingModules/SinglePoleDoubleThrowSwitchModule.cs
2024-07-13 09:29:45 +01:00

47 lines
1.4 KiB
C#

using Nocturnis.DataStructures.ConfigurableParameters;
using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
using Nocturnis.GlobalManagement.Constants;
using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Modules.ControllingModules;
public abstract partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParameterizedModule, ITerminalModule
{
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
private IBoolParameter? LeftPortForTrue { get; set; }
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
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(DataTypeConstant.BaseDataTypes.Bit);
ConfigurableParameters = new HashSet<IConfigurableParameter> { LeftPortForTrue };
PostInit();
}
public override void Execute()
{
Visited = true;
ISignalOutPort selectedPort = (LeftPortForTrue!.ParameterValue && DataInPorts[0].GetData.Get!.Bit)
? SignalOutPorts[0]
: SignalOutPorts[1];
selectedPort.Route();
}
}