51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
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 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(EnigmosConstant.DataPortTypes.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];
|
|
if (selectedPort.Connected)
|
|
selectedPort.Route();
|
|
else
|
|
EnigmosControl.Instance.RootModule.ActionFinished = true;
|
|
}
|
|
|
|
}
|