48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
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<IConfigurableParameter> ConfigurableParameters { get; set; }
|
|
private IBoolParameter LeftPortForTrue { get; set; }
|
|
public override IEnumerable<BasePort> Ports => new BasePort[] { SignalIn, SignalOut1, SignalOut2, ControlInput };
|
|
|
|
public override void Init()
|
|
{
|
|
base.Init();
|
|
SignalIn = GetPort<SignalInPort>("SignalIn");
|
|
SignalOut1 = GetPort<SignalOutPort>("SignalOut1");
|
|
SignalOut2 = GetPort<SignalOutPort>("SignalOut2");
|
|
ControlInput = GetPort<DataInPort>("ControlInput");
|
|
LeftPortForTrue =
|
|
GlobalProvider.DataStructureProvider.NewBoolParameter("Redirect to:", "Left", "Right", true);
|
|
ControlInput.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
|
ConfigurableParameters = new HashSet<IConfigurableParameter> { LeftPortForTrue };
|
|
PostInit();
|
|
}
|
|
|
|
protected override void Route(RootModule 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;
|
|
}
|
|
|
|
}
|