Files
Enigmos/Modules/ControllingModules/SinglePoleDoubleThrowSwitchModule.cs
2024-06-29 06:35:23 +08:00

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;
}
}