Split project

This commit is contained in:
h z
2024-06-29 06:35:23 +08:00
parent b26404abd2
commit 117835b503
45 changed files with 1972 additions and 26 deletions

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

View File

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

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

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

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

View File

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

View File

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