refactor programmable modules
This commit is contained in:
111
Modules/ProgrammableModules/FunctionModule/FunctionModule.cs
Normal file
111
Modules/ProgrammableModules/FunctionModule/FunctionModule.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using Enigmos.Boards;
|
||||
using Enigmos.Modules.InterlayerModules;
|
||||
using Godot;
|
||||
using Nocturnis.DataStructures.DataPortGroups;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Nocturnis.GlobalManagement.Providers;
|
||||
|
||||
namespace Enigmos.Modules.ProgrammableModules.FunctionModule;
|
||||
public partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
||||
{
|
||||
private IDataPortGroup[] ExteriorToInterior { get; set; } = Array.Empty<IDataPortGroup>();
|
||||
private IDataPortGroup[] InteriorToExterior { get; set; } = Array.Empty<IDataPortGroup>();
|
||||
public void Inference(){}
|
||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||
|
||||
public override IEnumerable<IBasePort> ExplicitPorts =>
|
||||
ExplicitDataInModules
|
||||
.SelectMany(module => module.Ports)
|
||||
.Union(ExplicitDataOutModules.SelectMany(module => module.Ports))
|
||||
.Union(ExplicitSignalInModules.SelectMany(module => module.Ports))
|
||||
.Union(ExplicitSignalOutModules.SelectMany(module => module.Ports));
|
||||
|
||||
public override IEnumerable<IBasePort> ImplicitPorts =>
|
||||
UnderlyingBoard.DataIns
|
||||
.SelectMany(module => module.Ports)
|
||||
.Union(UnderlyingBoard.DataOuts.SelectMany(module => module.Ports))
|
||||
.Union(UnderlyingBoard.SignalIns.SelectMany(module => module.Ports))
|
||||
.Union(UnderlyingBoard.SignalOuts.SelectMany(module => module.Ports));
|
||||
|
||||
|
||||
private static readonly PackedScene FunctionModuleBoardScene = GlobalProvider.SceneProvider!
|
||||
.AssetMapper<FunctionModuleBoard>();
|
||||
|
||||
public override BaseModule[] SubModules =>
|
||||
ExplicitDataInModules
|
||||
.Union<BaseModule>(ExplicitDataOutModules)
|
||||
.Union(ExplicitSignalInModules)
|
||||
.Union(ExplicitSignalOutModules)
|
||||
.ToArray();
|
||||
|
||||
private InterlayerDataInModule[] ExplicitDataInModules { get; set; } = Array.Empty<InterlayerDataInModule>();
|
||||
private InterlayerDataOutModule[] ExplicitDataOutModules { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||
private InterlayerSignalInModule[] ExplicitSignalInModules { get; set; } = Array.Empty<InterlayerSignalInModule>();
|
||||
|
||||
private InterlayerSignalOutModule[] ExplicitSignalOutModules { get; set; } =
|
||||
Array.Empty<InterlayerSignalOutModule>();
|
||||
|
||||
protected new FunctionModuleBoard UnderlyingBoard
|
||||
{
|
||||
get => (base.UnderlyingBoard as FunctionModuleBoard)!;
|
||||
set => base.UnderlyingBoard = value;
|
||||
}
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
UnderlyingBoard = FunctionModuleBoardScene.Instantiate<FunctionModuleBoard>();
|
||||
UnderlyingBoard.Init();
|
||||
ExteriorToInterior = new IDataPortGroup[4];
|
||||
InteriorToExterior = new IDataPortGroup[4];
|
||||
ExplicitDataInModules = new InterlayerDataInModule[4];
|
||||
ExplicitDataOutModules = new InterlayerDataOutModule[4];
|
||||
ExplicitSignalInModules = new InterlayerSignalInModule[4];
|
||||
ExplicitSignalOutModules = new InterlayerSignalOutModule[4];
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
ExplicitDataInModules[i] = GetModule<InterlayerDataInModule>($"EI{i + 1}");
|
||||
ExplicitDataOutModules[i] = GetModule<InterlayerDataOutModule>($"EO{i + 1}");
|
||||
ExplicitSignalInModules[i] = GetModule<InterlayerSignalInModule>($"ESI{i + 1}");
|
||||
ExplicitSignalOutModules[i] = GetModule<InterlayerSignalOutModule>($"ESO{i + 1}");
|
||||
|
||||
ExplicitDataInModules[i].DualModule = UnderlyingBoard.DataOuts[i];
|
||||
ExplicitDataOutModules[i].DualModule = UnderlyingBoard.DataIns[i];
|
||||
ExplicitSignalInModules[i].DualModule = UnderlyingBoard.SignalOuts[i];
|
||||
ExplicitSignalOutModules[i].DualModule = UnderlyingBoard.SignalIns[i];
|
||||
|
||||
UnderlyingBoard.DataOuts[i].DualModule = ExplicitDataInModules[i];
|
||||
UnderlyingBoard.DataIns[i].DualModule = ExplicitDataOutModules[i];
|
||||
UnderlyingBoard.SignalOuts[i].DualModule = ExplicitSignalInModules[i];
|
||||
UnderlyingBoard.SignalIns[i].DualModule = ExplicitSignalOutModules[i];
|
||||
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
ExteriorToInterior[i] = GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
||||
this,
|
||||
new IDataPort[] { ExplicitDataInModules[i].DataIn, UnderlyingBoard.DataOuts[i].DataOut },
|
||||
$"Exterior In -> Interior Out{i + 1}",
|
||||
EnigmosConstant.DataPortTypes.Real,
|
||||
EnigmosConstant.DataPortTypes.AnyType
|
||||
);
|
||||
InteriorToExterior[i] = GlobalProvider.DataStructureProvider.NewDataPortGroup(
|
||||
this,
|
||||
new IDataPort[] { UnderlyingBoard.DataIns[i].DataIn, ExplicitDataOutModules[i].DataOut },
|
||||
$"Interior In -> Exterior Out{i + 1}",
|
||||
EnigmosConstant.DataPortTypes.Real,
|
||||
EnigmosConstant.DataPortTypes.AnyType
|
||||
);
|
||||
}
|
||||
|
||||
ConfigurablePortGroups = ExteriorToInterior.Union(InteriorToExterior).ToHashSet();
|
||||
PostInit();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user