Upgrade structure of code base
This commit is contained in:
@@ -1,14 +1,12 @@
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
|
||||
public abstract partial class ActionModule : ControllingModule
|
||||
public abstract partial class ActionModule : BaseModule, IActionModule
|
||||
{
|
||||
protected abstract void Execute(IRootModule root);
|
||||
protected override void Route(IRootModule root)
|
||||
{
|
||||
if(!root.ActionFinished)
|
||||
Execute(root);
|
||||
root.ActionFinished = true;
|
||||
}
|
||||
public abstract void Act();
|
||||
public ISignalInPort[] SignalInPorts { get; set; } = Array.Empty<ISignalInPort>();
|
||||
public void Execute() => Act();
|
||||
public bool Visited { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,35 +1,34 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using TabulaSmaragdina.Constants;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Nocturnis.GlobalManagement.Controls;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
public partial class AttackActionModule : ActionModule
|
||||
public partial class AttackActionModule : ActionModule, ITerminalModule
|
||||
{
|
||||
private SignalInPort SignalIn1 { get; set; }
|
||||
private SignalInPort SignalIn2 { get; set; }
|
||||
private SignalInPort SignalIn3 { get; set; }
|
||||
private SignalInPort SignalIn4 { get; set; }
|
||||
|
||||
private DataInPort Input1 { get; set; }
|
||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||
public void Drain()
|
||||
{
|
||||
foreach (IDataInPort ip in DataInPorts)
|
||||
_ = ip.GetData.Get;
|
||||
}
|
||||
|
||||
public override IEnumerable<BasePort> Ports =>
|
||||
new BasePort[] { SignalIn1, SignalIn2, SignalIn3, SignalIn4, Input1 };
|
||||
public override IEnumerable<IBasePort> Ports => SignalInPorts.Union(DataInPorts.Cast<IBasePort>()).ToArray();
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
SignalIn1 = GetNode<SignalInPort>("SignalIn1");
|
||||
SignalIn2 = GetNode<SignalInPort>("SignalIn2");
|
||||
SignalIn3 = GetNode<SignalInPort>("SignalIn3");
|
||||
SignalIn4 = GetNode<SignalInPort>("SignalIn4");
|
||||
Input1 = GetNode<DataInPort>("Input1");
|
||||
Input1.SetDataType(EnigmosConstant.DataPortTypes.R2);
|
||||
this.SignalInInit("SignalIn", 4);
|
||||
this.DataInInit("Input", 1);
|
||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.R2);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
public override void Act()
|
||||
{
|
||||
CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2);
|
||||
}
|
||||
|
||||
protected override void Execute(IRootModule root) =>
|
||||
root.ManagedBy.Action.Attack(Input1.GetData(root).R2);
|
||||
}
|
||||
|
||||
@@ -1,42 +1,39 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Skeleton.Algebra;
|
||||
using Skeleton.Algebra.DimensionProviders;
|
||||
using TabulaSmaragdina.Constants;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Nocturnis.GlobalManagement.Controls;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
using R2 = CategoryOf<IDim2>.OnField<double>.FVector;
|
||||
public partial class MoveActionModule : ActionModule
|
||||
|
||||
public partial class MoveActionModule : ActionModule, ITerminalModule
|
||||
{
|
||||
|
||||
private DataInPort? Input1 { get; set; }
|
||||
private SignalInPort? SignalIn1 { get; set; }
|
||||
private SignalInPort? SignalIn2 { get; set; }
|
||||
private SignalInPort? SignalIn3 { get; set; }
|
||||
private SignalInPort? SignalIn4 { get; set; }
|
||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||
public void Drain()
|
||||
{
|
||||
foreach (IDataInPort ip in DataInPorts)
|
||||
_ = ip.GetData.Get;
|
||||
}
|
||||
|
||||
public override IEnumerable<BasePort> Ports => new BasePort[] { Input1, SignalIn1, SignalIn2, SignalIn3, SignalIn4 };
|
||||
public override IEnumerable<IBasePort> Ports => DataInPorts.Union(SignalInPorts.Cast<IBasePort>());
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
Input1 = GetPort<DataInPort>("Input1");
|
||||
SignalIn1 = GetPort<SignalInPort>("SignalIn1");
|
||||
SignalIn2 = GetPort<SignalInPort>("SignalIn2");
|
||||
SignalIn3 = GetPort<SignalInPort>("SignalIn3");
|
||||
SignalIn4 = GetPort<SignalInPort>("SignalIn4");
|
||||
Input1.SetDataType(EnigmosConstant.DataPortTypes.R2);
|
||||
this.DataInInit("Input", 1);
|
||||
this.SignalInInit("SignalIn", 4);
|
||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.R2);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
|
||||
public override string GetDescription => "";
|
||||
|
||||
protected override void Execute(IRootModule root)
|
||||
public override void Act()
|
||||
{
|
||||
R2 direction = Input1.GetData(root).R2;
|
||||
root.ManagedBy.Action.Move(direction);
|
||||
CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
using Enigmos.Exceptions;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
|
||||
public abstract partial class ControllingModule : BaseModule, IControllingModule
|
||||
{
|
||||
|
||||
protected abstract void Route(IRootModule root);
|
||||
public bool Visited { get; set; }
|
||||
protected override void TimeoutHandler(ModuleExecutionTimeout timeout)
|
||||
{
|
||||
Visited = false;
|
||||
base.TimeoutHandler(timeout);
|
||||
}
|
||||
|
||||
public void RouteWithTimeoutHandle(IRootModule root)
|
||||
{
|
||||
if (Visited)
|
||||
return;
|
||||
TimeoutCheck(root);
|
||||
try
|
||||
{
|
||||
Route(root);
|
||||
}
|
||||
catch (ModuleExecutionTimeout timeOut)
|
||||
{
|
||||
TimeoutHandler(timeOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Modules/ControllingModules/PiplineModule.cs
Normal file
16
Modules/ControllingModules/PiplineModule.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
|
||||
public abstract partial class PiplineModule : BaseModule,
|
||||
IControllingModule,
|
||||
IRoutingModule
|
||||
{
|
||||
public ISignalInPort[] SignalInPorts { get; set; } = Array.Empty<ISignalInPort>();
|
||||
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
||||
public abstract void Execute();
|
||||
public bool Visited { get; set; }
|
||||
|
||||
|
||||
}
|
||||
@@ -1,35 +1,32 @@
|
||||
using System.Diagnostics;
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.Creatures;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
public partial class RootModule : ControllingModule, IRootModule
|
||||
public partial class RootModule : BaseModule, IRootModule
|
||||
{
|
||||
public bool ActionFinished { get; set; }
|
||||
public IBaseCreature? ManagedBy { get; set; }
|
||||
public void Start()
|
||||
{
|
||||
SignalOutPorts[0].Route();
|
||||
}
|
||||
|
||||
protected override bool Draggable => false;
|
||||
private SignalOutPort? SignalOut1 { get; set; }
|
||||
public override IEnumerable<BasePort> Ports => new[] { SignalOut1 }!;
|
||||
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
||||
public override IEnumerable<IBasePort> Ports => SignalOutPorts;
|
||||
public Stopwatch? Timer { get; set; }
|
||||
public bool Visited { get; set; }
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
ActionFinished = true;
|
||||
SignalOut1 = GetPort<SignalOutPort>("SignalOut1");
|
||||
Visited = false;
|
||||
this.SignalOutInit("SignalOut", 1);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
protected override void Route(IRootModule r)
|
||||
{
|
||||
if(!SignalOut1!.Connected)
|
||||
{
|
||||
ActionFinished = true;
|
||||
return;
|
||||
}
|
||||
Visited = true;
|
||||
SignalOut1.ConnectedPort!.Module.RouteWithTimeoutHandle(this);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,47 +1,50 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using TabulaSmaragdina;
|
||||
using TabulaSmaragdina.Constants;
|
||||
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 : ControllingModule, IParameterizedModule
|
||||
public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParameterizedModule, ITerminalModule
|
||||
{
|
||||
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 HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
||||
private IBoolParameter? LeftPortForTrue { get; set; }
|
||||
public override IEnumerable<IBasePort> Ports =>
|
||||
SignalInPorts.Union(SignalOutPorts.Cast<IBasePort>()).Union(DataInPorts).ToArray();
|
||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||
public void Drain()
|
||||
{
|
||||
foreach (IDataInPort ip in DataInPorts)
|
||||
_ = ip.GetData.Get;
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
SignalIn = GetPort<SignalInPort>("SignalIn");
|
||||
SignalOut1 = GetPort<SignalOutPort>("SignalOut1");
|
||||
SignalOut2 = GetPort<SignalOutPort>("SignalOut2");
|
||||
ControlInput = GetPort<DataInPort>("ControlInput");
|
||||
this.SignalInInit("SignalIn", 1);
|
||||
this.SignalOutInit("SignalOut", 2);
|
||||
this.DataInInit("Input", 1);
|
||||
LeftPortForTrue =
|
||||
GlobalProvider.DataStructureProvider.NewBoolParameter("Redirect to:", "Left", "Right", true);
|
||||
ControlInput.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
GlobalProvider.DataStructureProvider!.NewBoolParameter("Redirect to:", "Left", "Right", true);
|
||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
ConfigurableParameters = new HashSet<IConfigurableParameter> { LeftPortForTrue };
|
||||
PostInit();
|
||||
}
|
||||
|
||||
protected override void Route(IRootModule root)
|
||||
public override void Execute()
|
||||
{
|
||||
Visited = true;
|
||||
SignalOutPort selectedPort = (LeftPortForTrue.ParameterValue && ControlInput.GetData(root).Bit)
|
||||
? SignalOut1
|
||||
: SignalOut2;
|
||||
ISignalOutPort selectedPort = (LeftPortForTrue!.ParameterValue && DataInPorts[0].GetData.Get!.Bit)
|
||||
? SignalOutPorts[0]
|
||||
: SignalOutPorts[1];
|
||||
if (selectedPort.Connected)
|
||||
selectedPort.ConnectedPort.Module.RouteWithTimeoutHandle(root);
|
||||
selectedPort.Route();
|
||||
else
|
||||
root.ActionFinished = true;
|
||||
EnigmosControl.Instance.RootModule.ActionFinished = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,36 +1,40 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using TabulaSmaragdina.Constants;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Nocturnis.GlobalManagement.Controls;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
|
||||
public partial class SinglePoleSingleThrowSwitchModule : ControllingModule
|
||||
public partial class SinglePoleSingleThrowSwitchModule : PiplineModule, ITerminalModule
|
||||
{
|
||||
private SignalInPort SignalIn { get; set; }
|
||||
private SignalOutPort SignalOut { get; set; }
|
||||
private DataInPort ControlInput { get; set; }
|
||||
public override IEnumerable<BasePort> Ports => new BasePort[] { SignalIn, SignalOut, ControlInput };
|
||||
public override IEnumerable<IBasePort> Ports =>
|
||||
SignalInPorts.Union(SignalOutPorts.Cast<IBasePort>()).Union(DataInPorts);
|
||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||
|
||||
public void Drain()
|
||||
{
|
||||
foreach (IDataInPort ip in DataInPorts)
|
||||
_ = ip.GetData.Get;
|
||||
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
SignalIn = GetPort<SignalInPort>("SignalIn");
|
||||
SignalOut = GetPort<SignalOutPort>("SignalOut");
|
||||
ControlInput = GetPort<DataInPort>("ControlInput");
|
||||
ControlInput.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
this.DataInInit("Input", 1);
|
||||
this.SignalInInit("SignalIn", 1);
|
||||
this.SignalOutInit("SignalOut", 1);
|
||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected override void Route(IRootModule root)
|
||||
public override void Execute()
|
||||
{
|
||||
Visited = true;
|
||||
if (ControlInput.GetData(root).Bit && SignalOut.Connected)
|
||||
SignalOut.ConnectedPort.Module.RouteWithTimeoutHandle(root);
|
||||
if (DataInPorts[0].GetData.Get!.Bit && SignalOutPorts[0].Connected)
|
||||
SignalOutPorts[0].Route();
|
||||
else
|
||||
root.ActionFinished = true;
|
||||
EnigmosControl.Instance.RootModule.ActionFinished = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user