Upgrade structure of code base
This commit is contained in:
@@ -1,21 +1,18 @@
|
||||
using Enigmos.Cables;
|
||||
using Enigmos.Modules;
|
||||
using Enigmos.Modules.ControllingModules;
|
||||
using Enigmos.Modules.ProgrammableModules;
|
||||
using Enigmos.Modules.TerminalModules;
|
||||
using Enigmos.Ports.DataPorts;
|
||||
using Godot;
|
||||
using Nocturnis.DataStructures;
|
||||
using Nocturnis.Enigmos.Boards;
|
||||
using Nocturnis.Enigmos.Cables;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.GlobalManagement.Controls;
|
||||
using Nocturnis.GlobalManagement.Providers;
|
||||
using Nocturnis.Inventories.Items;
|
||||
using Nocturnis.Inventories.Items.Items;
|
||||
using Nocturnis.UIElements;
|
||||
using Nocturnis.UIElements.Layers;
|
||||
using TabulaSmaragdina;
|
||||
using TabulaSmaragdina.Controls;
|
||||
|
||||
namespace Enigmos.Boards;
|
||||
|
||||
@@ -57,10 +54,10 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
||||
Modules
|
||||
.OfType<ProgrammableModule>();
|
||||
|
||||
public IEnumerable<TerminalModule> TerminalModules() =>
|
||||
public IEnumerable<ITerminalModule> TerminalModules =>
|
||||
Modules
|
||||
.OfType<TerminalModule>()
|
||||
.Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard.TerminalModules()));
|
||||
.OfType<ITerminalModule>()
|
||||
.Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard!.TerminalModules));
|
||||
|
||||
protected HashSet<IBasePort> Ports => Modules.SelectMany(module => module.Ports).ToHashSet();
|
||||
public IPanelViewer? PanelViewer { get; set; }
|
||||
@@ -103,6 +100,15 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
||||
|
||||
public virtual void Reset()
|
||||
{
|
||||
foreach (ISourceModule sm in Modules.OfType<ISourceModule>())
|
||||
sm.Reset();
|
||||
foreach (IProgrammableModule pm in Modules.OfType<IProgrammableModule>())
|
||||
pm.Board!.Reset();
|
||||
foreach (IControllingModule cm in Modules.OfType<IControllingModule>())
|
||||
cm.Visited = false;
|
||||
|
||||
|
||||
/*
|
||||
foreach (IBaseModule module in Modules)
|
||||
{
|
||||
if (module is RootModule rootModule)
|
||||
@@ -120,13 +126,13 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
||||
|
||||
if (module is ProgrammableModule programmableModule)
|
||||
{
|
||||
programmableModule.UnderlyingBoard.Reset();
|
||||
foreach (DataOutPort outPort in programmableModule.ExplicitPorts().OfType<DataOutPort>())
|
||||
programmableModule.UnderlyingBoard!.Reset();
|
||||
foreach (DataOutPort outPort in programmableModule.ExplicitPorts.OfType<DataOutPort>())
|
||||
outPort.DataUpdated = false;
|
||||
foreach (DataOutPort outPort in programmableModule.ImplicitPorts().OfType<DataOutPort>())
|
||||
foreach (DataOutPort outPort in programmableModule.ImplicitPorts.OfType<DataOutPort>())
|
||||
outPort.DataUpdated = false;
|
||||
}
|
||||
if (module is ControllingModule controllingModule)
|
||||
if (module is PiplineModule controllingModule)
|
||||
controllingModule.Visited = false;
|
||||
if (module is TerminalModule terminalModule)
|
||||
terminalModule.Finished = false;
|
||||
@@ -134,7 +140,7 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
||||
foreach (DataOutPort port in module.Ports.OfType<DataOutPort>())
|
||||
port.DataUpdated = false;
|
||||
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
||||
|
||||
25
Boards/FilterModuleBoard.cs
Normal file
25
Boards/FilterModuleBoard.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using Enigmos.Modules.InterlayerModules;
|
||||
using Enigmos.Modules.Other;
|
||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
|
||||
namespace Enigmos.Boards;
|
||||
public partial class FilterModuleBoard : BaseBoard
|
||||
{
|
||||
public IInterlayerDataOutModule[] Outputs { get; set; } = Array.Empty<IInterlayerDataOutModule>();
|
||||
public IterativeOutputModule? IterativeOutput { get; set; }
|
||||
public IndicateInputModule? Indicate { get; set; }
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
Outputs = new IInterlayerDataOutModule[3];
|
||||
for (int i = 1; i <= 3; i++)
|
||||
Outputs[i-1] = GetModule<InterlayerDataOutModule>($"IO{i}");
|
||||
base.Init();
|
||||
IterativeOutput = GetModule<IterativeOutputModule>("IterativeOutput");
|
||||
Indicate = GetModule<IndicateInputModule>("Indicate");
|
||||
Indicate.Input!.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
||||
}
|
||||
|
||||
}
|
||||
28
Boards/FunctionModuleBoard.cs
Normal file
28
Boards/FunctionModuleBoard.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using Enigmos.Modules.InterlayerModules;
|
||||
|
||||
namespace Enigmos.Boards;
|
||||
|
||||
public partial class FunctionModuleBoard : BaseBoard
|
||||
{
|
||||
public InterlayerDataInModule[] DataIns { get; set; } = Array.Empty<InterlayerDataInModule>();
|
||||
public InterlayerDataOutModule[] DataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||
public InterlayerSignalInModule[] SignalIns { get; set; } = Array.Empty<InterlayerSignalInModule>();
|
||||
public InterlayerSignalOutModule[] SignalOuts { get; set; } = Array.Empty<InterlayerSignalOutModule>();
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
DataIns = new InterlayerDataInModule[4];
|
||||
DataOuts = new InterlayerDataOutModule[4];
|
||||
SignalIns = new InterlayerSignalInModule[4];
|
||||
SignalOuts = new InterlayerSignalOutModule[4];
|
||||
for (int i = 1; i <= 4; i++)
|
||||
{
|
||||
DataIns[i - 1] = GetModule<InterlayerDataInModule>($"II{i}");
|
||||
DataOuts[i - 1] = GetModule<InterlayerDataOutModule>($"IO{i}");
|
||||
SignalIns[i - 1] = GetModule<InterlayerSignalInModule>($"ISI{i}");
|
||||
SignalOuts[i - 1] = GetModule<InterlayerSignalOutModule>($"ISO{i}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
24
Boards/OptimizationModuleBoard.cs
Normal file
24
Boards/OptimizationModuleBoard.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using Enigmos.Modules.InterlayerModules;
|
||||
using Enigmos.Modules.Other;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
|
||||
namespace Enigmos.Boards;
|
||||
|
||||
public partial class OptimizationModuleBoard : BaseBoard
|
||||
{
|
||||
public IterativeOutputModule? IterOut { get; set; }
|
||||
public OptimizationValueInputModule? ValueIn { get; set; }
|
||||
public InterlayerDataOutModule[] ImplicitDataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||
public override void Init()
|
||||
{
|
||||
|
||||
ImplicitDataOuts = new InterlayerDataOutModule[3];
|
||||
base.Init();
|
||||
for (int i = 0; i < 3; i++)
|
||||
ImplicitDataOuts[i] = GetModule<InterlayerDataOutModule>($"IO{i + 1}");
|
||||
IterOut = GetModule<IterativeOutputModule>("IterOut");
|
||||
ValueIn = GetModule<OptimizationValueInputModule>("ValueIn");
|
||||
IterOut.Output!.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
||||
ValueIn.DataIn.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
||||
}
|
||||
}
|
||||
52
Boards/PrimaryModuleBoard.cs
Normal file
52
Boards/PrimaryModuleBoard.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using Enigmos.Modules.ControllingModules;
|
||||
using Enigmos.Modules.TerminalModules;
|
||||
using Nocturnis.Creatures;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Nocturnis.GlobalManagement.Controls;
|
||||
|
||||
namespace Enigmos.Boards;
|
||||
|
||||
public partial class PrimaryModuleBoard : BaseBoard
|
||||
{
|
||||
private IBaseCreature? ManagedBy { get; set; }
|
||||
public IRootModule? Root { get; set; }
|
||||
public EngineModule? Engine { get; set; }
|
||||
|
||||
|
||||
public void Init(IBaseCreature manager)
|
||||
{
|
||||
Init();
|
||||
Root = GetModule<RootModule>("Root");
|
||||
Engine = GetModule<EngineModule>("Engine");
|
||||
Root.ManagedBy = manager;
|
||||
ManagedBy = manager;
|
||||
}
|
||||
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!Root!.ActionFinished)
|
||||
return;
|
||||
//Root.Timer = Stopwatch.StartNew();
|
||||
Engine!.Drain();
|
||||
if (EnigmosControl.Instance.Energy < EnigmosConstant.IdlePower)
|
||||
{
|
||||
Root!.ActionFinished = true;
|
||||
EnigmosControl.Instance.ShutDownEngine();
|
||||
return;
|
||||
}
|
||||
Root.Start();
|
||||
foreach (ITerminalModule tm in TerminalModules)
|
||||
{
|
||||
tm.Consume();
|
||||
}
|
||||
|
||||
|
||||
//Root.RouteWithTimeoutHandle(Root);
|
||||
//Root.Timer.Reset();
|
||||
//foreach (TerminalModule module in TerminalModules())
|
||||
// module.ConsumeWithTimeoutHandle(Root);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user