source generator
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using Enigmos.Modules.SubModules;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Enigmos.Boards;
|
||||
using Enigmos.Modules.SubModules;
|
||||
using Godot;
|
||||
using Nocturnis.DataStructures;
|
||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||
@@ -11,7 +12,6 @@ namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||
public partial class FilterInputProviderModule : SubModule, IComputationalModule
|
||||
{
|
||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||
public override IEnumerable<IBasePort> Ports => DataOutPorts;
|
||||
public IDataOutPort? Output { get; set; }
|
||||
|
||||
public FilterModuleBoard? ParentBoard { get; set; }
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Enigmos.Boards;
|
||||
using Enigmos.Modules.InterlayerModules;
|
||||
using Enigmos.Modules.SubModules;
|
||||
using Nocturnis.DataStructures;
|
||||
using Nocturnis.DataStructures.DataPortGroups;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
@@ -12,18 +13,21 @@ using Nocturnis.GlobalManagement.Providers;
|
||||
|
||||
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||
|
||||
public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFilterModule
|
||||
public partial class FilterModule : ProgrammableModule,
|
||||
IPolymorphismModule,
|
||||
IInternalComputationalModule,
|
||||
IEnumerableProcessingModule
|
||||
{
|
||||
public IDataInPort? InputArray { get; set; }
|
||||
public FilterOutputModule? OutputArrayModule { get; set; }
|
||||
public OutputSubModule? OutputArrayModule { get; set; }
|
||||
private IInterlayerDataInModule[] ExplicitInputs { get; set; } = Array.Empty<IInterlayerDataInModule>();
|
||||
|
||||
private IDataPortGroup[] InterLayerGroups { get; set; } = Array.Empty<IDataPortGroup>();
|
||||
private IDataPortGroup? ArrayGroup { get; set; }
|
||||
public IData[] CachedInputArray { get; set; } = Array.Empty<IData>();
|
||||
public IData[] CachedResult { get; set; } = Array.Empty<IData>();
|
||||
public bool FilterFinished { get; set; }
|
||||
public bool FilterStarted { get; set; }
|
||||
public IData? CachedResult { get; set; }
|
||||
public bool ComputationFinished { get; set; }
|
||||
public bool ComputationStarted { get; set; }
|
||||
|
||||
private List<IData> CachedListResult { get; set; } = new();
|
||||
public int ProcessingIndex { get; set; }
|
||||
@@ -33,18 +37,14 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
||||
get => (base.UnderlyingBoard as FilterModuleBoard)!;
|
||||
set => base.UnderlyingBoard = value;
|
||||
}
|
||||
|
||||
public override IEnumerable<IBasePort> Ports => new IBasePort[] { InputArray!, OutputArrayModule!.Output! };
|
||||
|
||||
public override IBaseModule[] SubModules => ExplicitInputs;
|
||||
|
||||
public override IEnumerable<IBasePort> ExplicitPorts =>
|
||||
new IBasePort[] { InputArray!, OutputArrayModule!.Output! }
|
||||
new IBasePort[] { InputArray!, OutputArrayModule!.Out! }
|
||||
.Union(ExplicitInputs.Select(c => c.DataIn))!
|
||||
.ToArray<IBasePort>();
|
||||
|
||||
public override IEnumerable<IBasePort> ImplicitPorts =>
|
||||
new IBasePort[] { OutputArrayModule!.Output!, InputArray! }
|
||||
new IBasePort[] { OutputArrayModule!.Out!, InputArray! }
|
||||
.Union(UnderlyingBoard.FilterInputProxy.Select(c => c.DataOut))
|
||||
.ToArray()!;
|
||||
|
||||
@@ -54,14 +54,14 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
||||
{
|
||||
}
|
||||
|
||||
public void Filter()
|
||||
public void Compute()
|
||||
{
|
||||
if (!FilterStarted)
|
||||
if (!ComputationStarted)
|
||||
{
|
||||
CachedInputArray = InputArray!.GetData.Get!.Array;
|
||||
ProcessingIndex = 0;
|
||||
CachedListResult = new List<IData>();
|
||||
FilterStarted = true;
|
||||
ComputationStarted = true;
|
||||
}
|
||||
|
||||
while (ProcessingIndex < CachedInputArray.Length)
|
||||
@@ -74,9 +74,10 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
||||
ProcessingIndex += 1;
|
||||
}
|
||||
|
||||
CachedResult = CachedListResult.ToArray();
|
||||
FilterFinished = true;
|
||||
FilterStarted = false;
|
||||
CachedResult.Data = CachedListResult.ToArray();
|
||||
//TODO CachedResult.Type
|
||||
ComputationFinished = true;
|
||||
ComputationStarted = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,18 +87,18 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
||||
{
|
||||
base.Init();
|
||||
InputArray = this.GetPort<IDataInPort>("InputArray");
|
||||
OutputArrayModule = GetModule<FilterOutputModule>("OutputArray");
|
||||
UnderlyingBoard = GlobalProvider.SceneProvider!
|
||||
.AssetMapper<FilterModuleBoard>()
|
||||
OutputArrayModule = GetModule<OutputSubModule>("OutputArray");
|
||||
UnderlyingBoard = GlobalProvider
|
||||
.AssetMapper<FilterModuleBoard>.Scene
|
||||
.Instantiate<FilterModuleBoard>();
|
||||
ExplicitInputs = new IInterlayerDataInModule[3];
|
||||
for (int i = 0; i < 3; i++)
|
||||
ExplicitInputs[i] = GetModule<InterlayerDataInModule>($"EI{i + 1}");
|
||||
OutputArrayModule.Init(this);
|
||||
OutputArrayModule.Init();
|
||||
UnderlyingBoard.Init(this);
|
||||
|
||||
FilterFinished = false;
|
||||
FilterStarted = false;
|
||||
ComputationFinished = false;
|
||||
ComputationStarted = false;
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
@@ -113,7 +114,7 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
||||
|
||||
ArrayGroup = GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
||||
this,
|
||||
new IDataPort[] { InputArray, OutputArrayModule.Output! },
|
||||
new IDataPort[] { InputArray, OutputArrayModule.Out! },
|
||||
"Array Type",
|
||||
EnigmosConstant.DataPortTypes.RealArray,
|
||||
EnigmosConstant.DataPortTypes.AnyArray
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
using Godot;
|
||||
using Nocturnis.Enigmos.Modules;
|
||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||
using Nocturnis.Enigmos.Ports;
|
||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||
using Nocturnis.GlobalManagement.Constants;
|
||||
using Skeleton.DataStructure;
|
||||
|
||||
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||
|
||||
public partial class FilterOutputModule : SubModule, IComputationalModule
|
||||
{
|
||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||
public IDataOutPort? Output { get; set; }
|
||||
public override IEnumerable<IBasePort> Ports => DataOutPorts;
|
||||
public new IFilterModule? ParentModule {
|
||||
get => base.ParentModule as IFilterModule;
|
||||
set => base.ParentModule = value;
|
||||
}
|
||||
|
||||
public void Init(IFilterModule parent)
|
||||
{
|
||||
base.Init();
|
||||
this.DataOutInit("Output", 1);
|
||||
Output = DataOutPorts[0];
|
||||
ParentModule = parent;
|
||||
PostInit();
|
||||
}
|
||||
|
||||
public void Define()
|
||||
{
|
||||
(object, StringName) Func(CacheItem c)
|
||||
{
|
||||
if (!ParentModule!.FilterFinished)
|
||||
ParentModule!.Filter();
|
||||
return (ParentModule!.CachedResult, EnigmosConstant.DataPortTypes.AnyArrayType);
|
||||
}
|
||||
Output!.OutData.UpdateCalculation(Func);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user