Split project
This commit is contained in:
12
Modules/ControllingModules/ActionModules/ActionModule.cs
Normal file
12
Modules/ControllingModules/ActionModules/ActionModule.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
|
||||
public abstract partial class ActionModule : ControllingModule
|
||||
{
|
||||
protected abstract void Execute(RootModule root);
|
||||
protected override void Route(RootModule root)
|
||||
{
|
||||
if(!root.ActionFinished)
|
||||
Execute(root);
|
||||
root.ActionFinished = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using TabulaSmaragdina.Constants;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
public partial class AttackActionModule : ActionModule
|
||||
{
|
||||
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 override IEnumerable<BasePort> Ports =>
|
||||
new BasePort[] { SignalIn1, SignalIn2, SignalIn3, SignalIn4, Input1 };
|
||||
|
||||
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);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
|
||||
protected override void Execute(RootModule root) =>
|
||||
root.ManagedBy.Action.Attack(Input1.GetData(root).R2);
|
||||
}
|
||||
41
Modules/ControllingModules/ActionModules/MoveActionModule.cs
Normal file
41
Modules/ControllingModules/ActionModules/MoveActionModule.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Skeleton.Algebra;
|
||||
using Skeleton.Algebra.DimensionProviders;
|
||||
using TabulaSmaragdina.Constants;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||
using R2 = CategoryOf<IDim2>.OnField<double>.FVector;
|
||||
public partial class MoveActionModule : ActionModule
|
||||
{
|
||||
|
||||
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 override IEnumerable<BasePort> Ports => new BasePort[] { Input1, SignalIn1, SignalIn2, SignalIn3, SignalIn4 };
|
||||
|
||||
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);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
|
||||
public override string GetDescription => "";
|
||||
|
||||
protected override void Execute(RootModule root)
|
||||
{
|
||||
R2 direction = Input1.GetData(root).R2;
|
||||
root.ManagedBy.Action.Move(direction);
|
||||
}
|
||||
}
|
||||
30
Modules/ControllingModules/ControllingModule.cs
Normal file
30
Modules/ControllingModules/ControllingModule.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using Enigmos.Exceptions;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
|
||||
public abstract partial class ControllingModule : BaseModule
|
||||
{
|
||||
|
||||
protected abstract void Route(RootModule root);
|
||||
public bool Visited { get; set; }
|
||||
protected override void TimeoutHandler(ModuleExecutionTimeout timeout)
|
||||
{
|
||||
Visited = false;
|
||||
base.TimeoutHandler(timeout);
|
||||
}
|
||||
|
||||
public void RouteWithTimeoutHandle(RootModule root)
|
||||
{
|
||||
if (Visited)
|
||||
return;
|
||||
TimeoutCheck(root);
|
||||
try
|
||||
{
|
||||
Route(root);
|
||||
}
|
||||
catch (ModuleExecutionTimeout timeOut)
|
||||
{
|
||||
TimeoutHandler(timeOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
34
Modules/ControllingModules/RootModule.cs
Normal file
34
Modules/ControllingModules/RootModule.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using System.Diagnostics;
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using Nocturnis.Creatures;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
public partial class RootModule : ControllingModule
|
||||
{
|
||||
public bool ActionFinished { get; set; }
|
||||
public IBaseCreature ManagedBy { get; set; }
|
||||
protected override bool Draggable() => false;
|
||||
private SignalOutPort SignalOut1 { get; set; }
|
||||
public override IEnumerable<BasePort> Ports => new[] { SignalOut1 };
|
||||
public Stopwatch Timer { get; set; }
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
ActionFinished = true;
|
||||
SignalOut1 = GetPort<SignalOutPort>("SignalOut1");
|
||||
PostInit();
|
||||
}
|
||||
|
||||
protected override void Route(RootModule r)
|
||||
{
|
||||
if(!SignalOut1.Connected)
|
||||
{
|
||||
ActionFinished = true;
|
||||
return;
|
||||
}
|
||||
Visited = true;
|
||||
SignalOut1.ConnectedPort.Module.RouteWithTimeoutHandle(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using Enigmos.Ports;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Enigmos.Ports.SignalPorts;
|
||||
using TabulaSmaragdina.Constants;
|
||||
|
||||
namespace Enigmos.Modules.ControllingModules;
|
||||
|
||||
public partial class SinglePoleSingleThrowSwitchModule : ControllingModule
|
||||
{
|
||||
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 void Init()
|
||||
{
|
||||
base.Init();
|
||||
SignalIn = GetPort<SignalInPort>("SignalIn");
|
||||
SignalOut = GetPort<SignalOutPort>("SignalOut");
|
||||
ControlInput = GetPort<DataInPort>("ControlInput");
|
||||
ControlInput.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
PostInit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected override void Route(RootModule root)
|
||||
{
|
||||
Visited = true;
|
||||
if (ControlInput.GetData(root).Bit && SignalOut.Connected)
|
||||
SignalOut.ConnectedPort.Module.RouteWithTimeoutHandle(root);
|
||||
else
|
||||
root.ActionFinished = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user