Compare commits
10 Commits
3eec8a1345
...
75d7033601
| Author | SHA1 | Date | |
|---|---|---|---|
| 75d7033601 | |||
| acaef122ae | |||
| cd726f5d33 | |||
| 097e3522a5 | |||
| f6a8f3e899 | |||
| 1df3c08a9e | |||
| 5548a7243b | |||
| bd5ab1e940 | |||
| a8688d7f95 | |||
| 401e48e0ba |
@@ -6,6 +6,7 @@ using Nocturnis.DataStructures;
|
|||||||
using Nocturnis.Enigmos.Boards;
|
using Nocturnis.Enigmos.Boards;
|
||||||
using Nocturnis.Enigmos.Cables;
|
using Nocturnis.Enigmos.Cables;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -37,7 +38,6 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
foreach (BaseModule module in GetChildren().OfType<BaseModule>())
|
foreach (BaseModule module in GetChildren().OfType<BaseModule>())
|
||||||
if(module.HasLabel)
|
if(module.HasLabel)
|
||||||
module.Label!.Visible = !mode;
|
module.Label!.Visible = !mode;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCable(IBaseCable cable)
|
public void AddCable(IBaseCable cable)
|
||||||
@@ -46,25 +46,35 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
cable.Modulate = Color.Color8(255, 255, 255, (Byte)(CableVisualMode ? 20 : 255));
|
cable.Modulate = Color.Color8(255, 255, 255, (Byte)(CableVisualMode ? 20 : 255));
|
||||||
}
|
}
|
||||||
|
|
||||||
public IModuleManualLayer? ModuleManualLayer { get; set; }
|
public IModuleManualLayer ModuleManualLayer { get; set; }
|
||||||
public bool ManualOpened { get; set; }
|
public bool ManualOpened { get; set; }
|
||||||
protected HashSet<IBaseModule> Modules { get; set; } = new();
|
protected HashSet<IBaseModule> Modules { get; set; } = new();
|
||||||
|
|
||||||
protected IEnumerable<ProgrammableModule> ProgrammableModules() =>
|
protected IEnumerable<ProgrammableModule> ProgrammableModules =>
|
||||||
Modules
|
Modules
|
||||||
.OfType<ProgrammableModule>();
|
.OfType<ProgrammableModule>();
|
||||||
|
|
||||||
public IEnumerable<ITerminalModule> TerminalModules =>
|
public IEnumerable<ITerminalModule> TerminalModules =>
|
||||||
Modules
|
Modules
|
||||||
.OfType<ITerminalModule>()
|
.OfType<ITerminalModule>()
|
||||||
.Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard!.TerminalModules));
|
.Union(ProgrammableModules.SelectMany(module => module.UnderlyingBoard!.TerminalModules));
|
||||||
|
|
||||||
protected HashSet<IBasePort> Ports => Modules.SelectMany(module => module.Ports).ToHashSet();
|
public IPanelViewer PanelViewer { get; set; }
|
||||||
public IPanelViewer? PanelViewer { get; set; }
|
|
||||||
public Dictionary<IBasePort, IBaseCable> CablePairing { get; set; } = new();
|
public Dictionary<IBasePort, IBaseCable> CablePairing { get; set; } = new();
|
||||||
public IBasePort? ConnectPending { get; set; }
|
|
||||||
public IBoardControlLayer? CircuitBoardControlLayer { get; set; }
|
public IEnumerable<IBasePort> OnBoardPorts
|
||||||
public IModuleMovingLayer? ModuleMovingLayer { get; set; }
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
IEnumerable<IBasePort> res = Array.Empty<IBasePort>();
|
||||||
|
foreach (IInterlayerModule im in GetChildren().OfType<IInterlayerModule>())
|
||||||
|
res = res.Union(im.Ports);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public IBasePort ConnectPending { get; set; }
|
||||||
|
public IBoardControlLayer CircuitBoardControlLayer { get; set; }
|
||||||
|
public IModuleMovingLayer ModuleMovingLayer { get; set; }
|
||||||
|
|
||||||
public virtual void Init()
|
public virtual void Init()
|
||||||
{
|
{
|
||||||
@@ -72,18 +82,13 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
Modules = new HashSet<IBaseModule>();
|
Modules = new HashSet<IBaseModule>();
|
||||||
FocusedCables = new HashSet<IBaseCable>();
|
FocusedCables = new HashSet<IBaseCable>();
|
||||||
ConnectPending = null;
|
ConnectPending = null;
|
||||||
}
|
|
||||||
|
|
||||||
public override void _Ready()
|
|
||||||
{
|
|
||||||
base._Ready();
|
|
||||||
ModuleManualLayer = GetNode<IModuleManualLayer>("ModuleManualLayer");
|
ModuleManualLayer = GetNode<IModuleManualLayer>("ModuleManualLayer");
|
||||||
ModuleMovingLayer = GetNode<IModuleMovingLayer>("ModuleMovingLayer");
|
ModuleMovingLayer = GetNode<IModuleMovingLayer>("ModuleMovingLayer");
|
||||||
ModuleMovingLayer.Board = this;
|
ModuleMovingLayer.Board = this;
|
||||||
PanelViewer = GetNode<IPanelViewer>("PanelViewer");
|
PanelViewer = GetNode<IPanelViewer>("PanelViewer");
|
||||||
CircuitBoardControlLayer = GetNode<IBoardControlLayer>("CircuitBoardControlLayer");
|
CircuitBoardControlLayer = GetNode<IBoardControlLayer>("CircuitBoardControlLayer");
|
||||||
CircuitBoardControlLayer.Board = this;
|
CircuitBoardControlLayer.Board = this;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void AddModule(IBaseModule module, Vector2 pos)
|
protected virtual void AddModule(IBaseModule module, Vector2 pos)
|
||||||
@@ -105,55 +110,23 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
pm.Board!.Reset();
|
pm.Board!.Reset();
|
||||||
foreach (IControllingModule cm in Modules.OfType<IControllingModule>())
|
foreach (IControllingModule cm in Modules.OfType<IControllingModule>())
|
||||||
cm.Visited = false;
|
cm.Visited = false;
|
||||||
|
foreach (ITerminalModule tm in Modules.OfType<ITerminalModule>())
|
||||||
|
tm.Finished = true;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
foreach (IBaseModule module in Modules)
|
|
||||||
{
|
|
||||||
if (module is RootModule rootModule)
|
|
||||||
rootModule.ActionFinished = false;
|
|
||||||
if (module is ICompositeModule compositeModule)
|
|
||||||
{
|
|
||||||
foreach (IBaseModule subModule in compositeModule.SubModules())
|
|
||||||
{
|
|
||||||
foreach (DataOutPort port in subModule.Ports.OfType<DataOutPort>())
|
|
||||||
{
|
|
||||||
port.DataUpdated = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (module is ProgrammableModule programmableModule)
|
|
||||||
{
|
|
||||||
programmableModule.UnderlyingBoard!.Reset();
|
|
||||||
foreach (DataOutPort outPort in programmableModule.ExplicitPorts.OfType<DataOutPort>())
|
|
||||||
outPort.DataUpdated = false;
|
|
||||||
foreach (DataOutPort outPort in programmableModule.ImplicitPorts.OfType<DataOutPort>())
|
|
||||||
outPort.DataUpdated = false;
|
|
||||||
}
|
|
||||||
if (module is PiplineModule controllingModule)
|
|
||||||
controllingModule.Visited = false;
|
|
||||||
if (module is TerminalModule terminalModule)
|
|
||||||
terminalModule.Finished = false;
|
|
||||||
|
|
||||||
foreach (DataOutPort port in module.Ports.OfType<DataOutPort>())
|
|
||||||
port.DataUpdated = false;
|
|
||||||
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
public override bool _CanDropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
IVariantWithType vData = data.As<IVariantWithType>();
|
VariantWithType vData = data.As<VariantWithType>();
|
||||||
if (vData.TypeHint != "Module")
|
if (vData.TypeHint != "Module")
|
||||||
{
|
{
|
||||||
if(vData.TypeHint != "Item")
|
if(vData.TypeHint != "Item")
|
||||||
return false;
|
return false;
|
||||||
IBaseItem item = vData.UnderlyingData.As<IBaseItem>();
|
IBaseItem item = vData.UnderlyingData.As<Node>() as IBaseItem;
|
||||||
if (item is IBaseModuleItem moduleItem)
|
if (item is IBaseModuleItem moduleItem)
|
||||||
{
|
{
|
||||||
foreach (IBaseModule module in Modules)
|
foreach (IBaseModule module in Modules)
|
||||||
if (GlobalProvider.UIProvider.Overlap(atPosition, moduleItem.ContentModule.Size, module.Position, module.Size))
|
if (GlobalProvider.UIProvider!.Overlap(atPosition, moduleItem.ContentModule.Size, module.Position, module.Size))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -175,7 +148,7 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
}
|
}
|
||||||
public override void _DropData(Vector2 atPosition, Variant data)
|
public override void _DropData(Vector2 atPosition, Variant data)
|
||||||
{
|
{
|
||||||
IVariantWithType vData = data.As<IVariantWithType>();
|
VariantWithType vData = data.As<VariantWithType>();
|
||||||
if(vData.TypeHint == "Module")
|
if(vData.TypeHint == "Module")
|
||||||
{
|
{
|
||||||
BaseModule vModule = vData.UnderlyingData.As<BaseModule>();
|
BaseModule vModule = vData.UnderlyingData.As<BaseModule>();
|
||||||
@@ -184,7 +157,7 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IBaseModuleItem moduleItem = vData.UnderlyingData.As<IBaseModuleItem>();
|
IBaseModuleItem moduleItem = vData.UnderlyingData.As<Node>() as IBaseModuleItem;
|
||||||
AddModule(moduleItem.ContentModule, atPosition);
|
AddModule(moduleItem.ContentModule, atPosition);
|
||||||
ItemDraggingControl.Instance.DraggingFrom!.Item = null;
|
ItemDraggingControl.Instance.DraggingFrom!.Item = null;
|
||||||
}
|
}
|
||||||
@@ -198,4 +171,17 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
|
|||||||
res.Board = this;
|
res.Board = this;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public T[] GetModules<T>() where T : BaseModule
|
||||||
|
{
|
||||||
|
T[] res = GetChildren().OfType<T>().OrderBy(x => x.Name).ToArray();
|
||||||
|
foreach (T m in res)
|
||||||
|
{
|
||||||
|
m.Init();
|
||||||
|
Modules.Add(m);
|
||||||
|
m.Board = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,21 @@
|
|||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
using Enigmos.Modules.ProgrammableModules.FilterModule;
|
using Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
|
|
||||||
namespace Enigmos.Boards;
|
namespace Enigmos.Boards;
|
||||||
public partial class FilterModuleBoard : BaseBoard
|
public partial class FilterModuleBoard : BaseBoard, ISceneConcept
|
||||||
{
|
{
|
||||||
public IFilterModule? FilterModule { get; set; }
|
public FilterModule FilterModule { get; set; }
|
||||||
|
|
||||||
public FilterInputProviderModule? InputProvider { get; set; }
|
public FilterInputProviderModule InputProvider { get; set; }
|
||||||
|
|
||||||
public IInterlayerDataOutModule[] FilterInputProxy { get; set; } = Array.Empty<IInterlayerDataOutModule>();
|
public IInterlayerDataOutModule[] FilterInputProxy { get; set; } = Array.Empty<IInterlayerDataOutModule>();
|
||||||
//public IInterlayerDataOutModule[] Outputs { get; set; } = Array.Empty<IInterlayerDataOutModule>();
|
|
||||||
|
|
||||||
//public XIterativeOutputModule? IterativeOutput { get; set; }
|
public FilterIndicateModule Indicate { get; set; }
|
||||||
//public IDataInPort? Indicate { get; set; }
|
|
||||||
//public IndicateInputModule? Indicate { get; set; }
|
|
||||||
public FilterIndicateModule? Indicate { get; set; }
|
|
||||||
|
|
||||||
public void Init(IFilterModule filterModule)
|
public void Init(FilterModule filterModule)
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
FilterModule = filterModule;
|
FilterModule = filterModule;
|
||||||
@@ -29,9 +25,8 @@ public partial class FilterModuleBoard : BaseBoard
|
|||||||
for (int i = 1; i <= 3; i++)
|
for (int i = 1; i <= 3; i++)
|
||||||
FilterInputProxy[i - 1] = GetModule<InterlayerDataOutModule>($"IO{i}");
|
FilterInputProxy[i - 1] = GetModule<InterlayerDataOutModule>($"IO{i}");
|
||||||
base.Init();
|
base.Init();
|
||||||
//IterativeOutput = GetModule<XIterativeOutputModule>("IterativeOutput");
|
|
||||||
Indicate = GetModule<FilterIndicateModule>("Indicate");
|
Indicate = GetModule<FilterIndicateModule>("Indicate");
|
||||||
Indicate.Indicate!.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
Indicate.Indicate!.SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
|
using Nocturnis;
|
||||||
|
|
||||||
namespace Enigmos.Boards;
|
namespace Enigmos.Boards;
|
||||||
|
|
||||||
public partial class FunctionModuleBoard : BaseBoard
|
public partial class FunctionModuleBoard : BaseBoard, ISceneConcept
|
||||||
{
|
{
|
||||||
public InterlayerDataInModule[] DataIns { get; set; } = Array.Empty<InterlayerDataInModule>();
|
public InterlayerDataInModule[] DataIns { get; set; } = Array.Empty<InterlayerDataInModule>();
|
||||||
public InterlayerDataOutModule[] DataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
public InterlayerDataOutModule[] DataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||||
|
|||||||
@@ -1,26 +1,27 @@
|
|||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
using Enigmos.Modules.Other;
|
|
||||||
using Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
using Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis;
|
||||||
|
|
||||||
namespace Enigmos.Boards;
|
namespace Enigmos.Boards;
|
||||||
|
|
||||||
public partial class OptimizationModuleBoard : BaseBoard
|
public partial class OptimizationModuleBoard : BaseBoard, ISceneConcept
|
||||||
{
|
{
|
||||||
public OptimizationModule? OptimizationModule { get; set; }
|
public OptimizationModule? OptimizationModule { get; set; }
|
||||||
|
|
||||||
public OptimizationInputProviderModule? InputProvider { get; set; }
|
public OptimizationInputProviderModule? InputProvider { get; set; }
|
||||||
public OptimizationSelectorModule? Selector { get; set; }
|
public OptimizationSelectorModule? Selector { get; set; }
|
||||||
public InterlayerDataOutModule[] ImplicitDataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
public InterlayerDataOutModule[] ImplicitDataOuts { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||||
public override void Init()
|
public void Init(OptimizationModule m)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
OptimizationModule = m;
|
||||||
ImplicitDataOuts = new InterlayerDataOutModule[3];
|
ImplicitDataOuts = new InterlayerDataOutModule[3];
|
||||||
base.Init();
|
base.Init();
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
ImplicitDataOuts[i] = GetModule<InterlayerDataOutModule>($"IO{i + 1}");
|
ImplicitDataOuts[i] = GetModule<InterlayerDataOutModule>($"IO{i + 1}");
|
||||||
InputProvider = GetModule<OptimizationInputProviderModule>("InputProvider");
|
InputProvider = GetModule<OptimizationInputProviderModule>("InputProvider");
|
||||||
Selector = GetModule<OptimizationSelectorModule>("Selector");
|
Selector = GetModule<OptimizationSelectorModule>("Selector");
|
||||||
|
InputProvider.Init(this);
|
||||||
|
Selector.Init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
using Enigmos.Modules.ControllingModules;
|
using Enigmos.Modules.ControllingModules;
|
||||||
using Enigmos.Modules.TerminalModules;
|
using Enigmos.Modules.TerminalModules;
|
||||||
using Nocturnis.Creatures;
|
using Nocturnis.Creatures;
|
||||||
|
using Nocturnis.Enigmos.Boards;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
|
|
||||||
namespace Enigmos.Boards;
|
namespace Enigmos.Boards;
|
||||||
|
|
||||||
public partial class PrimaryModuleBoard : BaseBoard
|
public partial class PrimaryModuleBoard : BaseBoard, IPrimaryModuleBoard
|
||||||
{
|
{
|
||||||
private IBaseCreature? ManagedBy { get; set; }
|
private IBaseCreature ManagedBy { get; set; }
|
||||||
public IRootModule? Root { get; set; }
|
public IRootModule Root { get; set; }
|
||||||
public EngineModule? Engine { get; set; }
|
public IEngineModule Engine { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public void Init(IBaseCreature manager)
|
public void Init(IBaseCreature manager)
|
||||||
@@ -26,11 +27,10 @@ public partial class PrimaryModuleBoard : BaseBoard
|
|||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if (!Root!.ActionFinished)
|
|
||||||
return;
|
|
||||||
//Root.Timer = Stopwatch.StartNew();
|
//Root.Timer = Stopwatch.StartNew();
|
||||||
Engine!.Drain();
|
Engine.Consume();
|
||||||
if (EnigmosControl.Instance.Energy < EnigmosConstant.IdlePower)
|
if (EnigmosControl.Instance.Energy < EnigmosControl.Instance.IdlePower)
|
||||||
{
|
{
|
||||||
Root!.ActionFinished = true;
|
Root!.ActionFinished = true;
|
||||||
EnigmosControl.Instance.ShutDownEngine();
|
EnigmosControl.Instance.ShutDownEngine();
|
||||||
@@ -38,15 +38,14 @@ public partial class PrimaryModuleBoard : BaseBoard
|
|||||||
}
|
}
|
||||||
Root.Start();
|
Root.Start();
|
||||||
foreach (ITerminalModule tm in TerminalModules)
|
foreach (ITerminalModule tm in TerminalModules)
|
||||||
{
|
|
||||||
tm.Consume();
|
tm.Consume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double IdlePower => Modules.Count * 0.05;
|
||||||
|
|
||||||
//Root.RouteWithTimeoutHandle(Root);
|
public override void Reset()
|
||||||
//Root.Timer.Reset();
|
{
|
||||||
//foreach (TerminalModule module in TerminalModules())
|
base.Reset();
|
||||||
// module.ConsumeWithTimeoutHandle(Root);
|
Root.ActionFinished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
33
Cables/DataCable.cs
Normal file
33
Cables/DataCable.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using Godot;
|
||||||
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
|
namespace Enigmos.Cables;
|
||||||
|
|
||||||
|
public partial class DataCable : BaseCable
|
||||||
|
{
|
||||||
|
public new IDataOutPort PortTo
|
||||||
|
{
|
||||||
|
get => (base.PortTo as IDataOutPort)!;
|
||||||
|
set => base.PortTo = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public new IDataInPort PortFrom
|
||||||
|
{
|
||||||
|
get => (base.PortFrom as IDataInPort)!;
|
||||||
|
set => base.PortFrom = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LineUpdate()
|
||||||
|
{
|
||||||
|
Vector2 fromPosition = PortFrom.PositionToBoard;
|
||||||
|
Vector2 toPosition = PortTo.PositionToBoard;
|
||||||
|
Points = new[]
|
||||||
|
{
|
||||||
|
fromPosition,
|
||||||
|
new Vector2((fromPosition.X + toPosition.X) / 2, fromPosition.Y),
|
||||||
|
new Vector2((fromPosition.X + toPosition.X) / 2, toPosition.Y),
|
||||||
|
toPosition
|
||||||
|
};
|
||||||
|
InFill.Points = Points;
|
||||||
|
}
|
||||||
|
}
|
||||||
32
Cables/SignalCable.cs
Normal file
32
Cables/SignalCable.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using Godot;
|
||||||
|
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||||
|
|
||||||
|
namespace Enigmos.Cables;
|
||||||
|
|
||||||
|
public partial class SignalCable : BaseCable
|
||||||
|
{
|
||||||
|
public new ISignalOutPort PortTo
|
||||||
|
{
|
||||||
|
get => (base.PortTo as ISignalOutPort)!;
|
||||||
|
set => base.PortTo = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public new ISignalInPort PortFrom
|
||||||
|
{
|
||||||
|
get => (base.PortFrom as ISignalInPort)!;
|
||||||
|
set => base.PortFrom = value;
|
||||||
|
}
|
||||||
|
public override void LineUpdate()
|
||||||
|
{
|
||||||
|
Vector2 fromPosition = PortFrom.PositionToBoard;
|
||||||
|
Vector2 toPosition = PortTo.PositionToBoard;
|
||||||
|
Points = new []
|
||||||
|
{
|
||||||
|
fromPosition,
|
||||||
|
new Vector2(fromPosition.X, (fromPosition.Y + toPosition.Y) / 2),
|
||||||
|
new Vector2(toPosition.X, (fromPosition.Y + toPosition.Y) / 2),
|
||||||
|
toPosition
|
||||||
|
};
|
||||||
|
InFill.Points = Points;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,19 +1,23 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Godot.NET.Sdk/4.4.0-beta.1">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||||
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
|
<GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="GodotSharp" Version="4.3.0-beta.2" />
|
<PackageReference Include="GodotSharp" Version="4.4.0-beta.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Modules\InternalComputationalModule\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Nocturnis\Nocturnis.csproj" />
|
<ProjectReference Include="..\Nocturnis\Nocturnis.csproj" />
|
||||||
<ProjectReference Include="..\TabulaSmaragdina\TabulaSmaragdina.csproj" />
|
|
||||||
<ProjectReference Include="..\VirtualChemistry\VirtualChemistry.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -12,5 +12,9 @@ Global
|
|||||||
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Release|Any CPU.Build.0 = Release|Any CPU
|
{DD3504AF-4740-4B41-861C-F82C6C73C1C4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C0D139B4-BAC1-4AFE-AAB7-CCA6B3F581CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C0D139B4-BAC1-4AFE-AAB7-CCA6B3F581CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C0D139B4-BAC1-4AFE-AAB7-CCA6B3F581CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C0D139B4-BAC1-4AFE-AAB7-CCA6B3F581CC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.Communicators;
|
using Nocturnis.Communicators;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
public partial class CommunicatorPairTab : Panel, IModuleManualTab
|
public partial class CommunicatorPairTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
public string FullName() => "Pair";
|
public string FullName() => "Pair";
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ErrorHandlerTab : Panel, IModuleManualTab
|
public partial class ErrorHandlerTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
public string FullName() => "Error Handling";
|
public string FullName() => "Error Handling";
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleBoolValueParameterSetter : ModuleParameterSetter
|
public partial class ModuleBoolValueParameterSetter : ModuleParameterSetter, ISceneConcept
|
||||||
{
|
{
|
||||||
private CheckButton ToggleSetter { get; set; }
|
private CheckButton ToggleSetter { get; set; }
|
||||||
private Label TrueLabel { get; set; }
|
private Label TrueLabel { get; set; }
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleCharValueParameterSetter : ModuleParameterSetter
|
public partial class ModuleCharValueParameterSetter : ModuleParameterSetter, ISceneConcept
|
||||||
{
|
{
|
||||||
private LineEdit CharInput { get; set; }
|
private LineEdit CharInput { get; set; }
|
||||||
private Button Apply { get; set; }
|
private Button Apply { get; set; }
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleKeyValueParameterSetter : ModuleParameterSetter
|
public partial class ModuleKeyValueParameterSetter : ModuleParameterSetter, ISceneConcept
|
||||||
{
|
{
|
||||||
public new IKeyParameter UnderlyingParameter
|
public new IKeyParameter UnderlyingParameter
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
using Enigmos.Modules.ProgrammableModules;
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleManual : Panel
|
public abstract partial class ModuleManual : Panel, ISceneConcept, IModuleManual
|
||||||
{
|
{
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
|
|
||||||
@@ -22,9 +22,8 @@ public partial class ModuleManual : Panel
|
|||||||
private TextureButton Close { get; set; }
|
private TextureButton Close { get; set; }
|
||||||
private TabContainer ConfigurationTabs { get; set; }
|
private TabContainer ConfigurationTabs { get; set; }
|
||||||
private IBaseModule Module { get; set; }
|
private IBaseModule Module { get; set; }
|
||||||
private List<IModuleManualTab> Tabs { get; set; }
|
private List<IModuleManualTab> Tabs { get; set; } = new();
|
||||||
private LineEdit LabelString { get; set; }
|
private LineEdit LabelString { get; set; }
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
if(!InitFlag)
|
if(!InitFlag)
|
||||||
@@ -38,58 +37,47 @@ public partial class ModuleManual : Panel
|
|||||||
LabelString = GetNode<LineEdit>("LabelString");
|
LabelString = GetNode<LineEdit>("LabelString");
|
||||||
LabelString.Text = Module.LabelString;
|
LabelString.Text = Module.LabelString;
|
||||||
Tabs = new List<IModuleManualTab>();
|
Tabs = new List<IModuleManualTab>();
|
||||||
PortMaintenanceTab mainTab = GlobalProvider.SceneProvider
|
|
||||||
.AssetMapper<PortMaintenanceTab>()
|
PortMaintenanceTab mainTab =
|
||||||
.Instantiate<PortMaintenanceTab>();
|
GlobalProvider.ProcessProvider.BuildPortMaintenanceTab(Module) as PortMaintenanceTab;
|
||||||
mainTab.Init(Module);
|
|
||||||
Tabs.Add(mainTab);
|
Tabs.Add(mainTab);
|
||||||
ConfigurationTabs.AddChild(mainTab);
|
ConfigurationTabs.AddChild(mainTab);
|
||||||
if (Module is IPolymorphismModule polyModule)
|
if (Module is IPolymorphismModule polyModule)
|
||||||
{
|
{
|
||||||
ModulePolymorphismTab polyTab = GlobalProvider.SceneProvider
|
ModulePolymorphismTab polyTab =
|
||||||
.AssetMapper<ModulePolymorphismTab>()
|
GlobalProvider.ProcessProvider.BuildModulePolymorphismTab(polyModule) as ModulePolymorphismTab;
|
||||||
.Instantiate<ModulePolymorphismTab>();
|
|
||||||
polyTab.Init(polyModule);
|
|
||||||
Tabs.Add(polyTab);
|
Tabs.Add(polyTab);
|
||||||
ConfigurationTabs.AddChild(polyTab);
|
ConfigurationTabs.AddChild(polyTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Module is IParameterizedModule paraModule)
|
if (Module is IParameterizedModule paraModule)
|
||||||
{
|
{
|
||||||
ModuleParameterTab paraTab = GlobalProvider.SceneProvider
|
|
||||||
.AssetMapper<ModuleParameterTab>()
|
ModuleParameterTab paraTab =
|
||||||
.Instantiate<ModuleParameterTab>();
|
GlobalProvider.ProcessProvider.BuildModuleParameterTab(paraModule) as ModuleParameterTab;
|
||||||
paraTab.Init(paraModule);
|
|
||||||
Tabs.Add(paraTab);
|
Tabs.Add(paraTab);
|
||||||
ConfigurationTabs.AddChild(paraTab);
|
ConfigurationTabs.AddChild(paraTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Module is ICommunicateModule comModule)
|
if (Module is ICommunicateModule comModule)
|
||||||
{
|
{
|
||||||
CommunicatorPairTab pairTab = GlobalProvider.SceneProvider
|
|
||||||
.AssetMapper<CommunicatorPairTab>()
|
CommunicatorPairTab pairTab =
|
||||||
.Instantiate<CommunicatorPairTab>();
|
GlobalProvider.ProcessProvider.BuildCommunicatorPairTab(comModule) as CommunicatorPairTab;
|
||||||
pairTab.Init(comModule);
|
|
||||||
Tabs.Add(pairTab);
|
Tabs.Add(pairTab);
|
||||||
ConfigurationTabs.AddChild(pairTab);
|
ConfigurationTabs.AddChild(pairTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Module is ProgrammableModule programmableModule)
|
if (Module is IProgrammableModule progModule)
|
||||||
{
|
{
|
||||||
ProgrammableModuleSettingTab progTab =GlobalProvider.SceneProvider
|
ProgrammableModuleSettingTab progTab =
|
||||||
.AssetMapper<ProgrammableModuleSettingTab>()
|
GlobalProvider.ProcessProvider.BuildProgrammableModuleSettingTab(progModule) as ProgrammableModuleSettingTab;
|
||||||
.Instantiate<ProgrammableModuleSettingTab>();
|
|
||||||
progTab.Init(programmableModule);
|
|
||||||
Tabs.Add(progTab);
|
Tabs.Add(progTab);
|
||||||
ConfigurationTabs.AddChild(progTab);
|
ConfigurationTabs.AddChild(progTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Module is IErrorHandlerModule errorHandlerModule)
|
if (Module is IErrorHandlerModule errModule)
|
||||||
{
|
{
|
||||||
ErrorHandlerTab errTab = GlobalProvider.SceneProvider
|
ErrorHandlerTab errTab = GlobalProvider.ProcessProvider.BuildErrorHandlerTab(errModule) as ErrorHandlerTab;
|
||||||
.AssetMapper<ErrorHandlerTab>()
|
|
||||||
.Instantiate<ErrorHandlerTab>();
|
|
||||||
errTab.Init(errorHandlerModule);
|
|
||||||
Tabs.Add(errTab);
|
Tabs.Add(errTab);
|
||||||
ConfigurationTabs.AddChild(errTab);
|
ConfigurationTabs.AddChild(errTab);
|
||||||
}
|
}
|
||||||
@@ -110,4 +98,5 @@ public partial class ModuleManual : Panel
|
|||||||
Module.Label.Text = label;
|
Module.Label.Text = label;
|
||||||
Module.LabelString = label;
|
Module.LabelString = label;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ using Nocturnis.DataStructures.ConfigurableParameters;
|
|||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public abstract partial class ModuleParameterSetter : Control
|
public abstract partial class ModuleParameterSetter : Control, IModuleParameterSetter
|
||||||
{
|
{
|
||||||
protected bool InitFlag { get; set; }
|
protected bool InitFlag { get; set; }
|
||||||
public IConfigurableParameter UnderlyingParameter { get; set; }
|
public IConfigurableParameter UnderlyingParameter { get; set; }
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
@@ -6,7 +7,7 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleParameterTab : Panel, IModuleManualTab
|
public partial class ModuleParameterTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
public string FullName() => "Parameter";
|
public string FullName() => "Parameter";
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
@@ -18,11 +19,7 @@ public partial class ModuleParameterTab : Panel, IModuleManualTab
|
|||||||
|
|
||||||
public IParameterizedModule Module { get; set; }
|
public IParameterizedModule Module { get; set; }
|
||||||
|
|
||||||
private static readonly PackedScene RealParameterSetterScene =
|
|
||||||
GlobalProvider.SceneProvider.AssetMapper<ModuleRealValueParameterSetter>();
|
|
||||||
|
|
||||||
private static readonly PackedScene BoolParameterSetterScene =
|
|
||||||
GlobalProvider.SceneProvider.AssetMapper<ModuleBoolValueParameterSetter>();
|
|
||||||
private VBoxContainer Parameters { get; set; }
|
private VBoxContainer Parameters { get; set; }
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
@@ -33,35 +30,27 @@ public partial class ModuleParameterTab : Panel, IModuleManualTab
|
|||||||
{
|
{
|
||||||
if(parameter is IDoubleParameter doubleParameter)
|
if(parameter is IDoubleParameter doubleParameter)
|
||||||
{
|
{
|
||||||
ModuleRealValueParameterSetter setter =
|
ModuleRealValueParameterSetter setter = GlobalProvider.ProcessProvider
|
||||||
RealParameterSetterScene.Instantiate<ModuleRealValueParameterSetter>();
|
.BuildModuleRealValueParameterSetter(doubleParameter) as ModuleRealValueParameterSetter;
|
||||||
setter.Init(doubleParameter);
|
|
||||||
Parameters.AddChild(setter);
|
Parameters.AddChild(setter);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (parameter is IBoolParameter boolParameter)
|
else if (parameter is IBoolParameter boolParameter)
|
||||||
{
|
{
|
||||||
ModuleBoolValueParameterSetter setter =
|
ModuleBoolValueParameterSetter setter = GlobalProvider.ProcessProvider
|
||||||
BoolParameterSetterScene.Instantiate<ModuleBoolValueParameterSetter>();
|
.BuildModuleBoolValueParameterSetter(boolParameter) as ModuleBoolValueParameterSetter;
|
||||||
setter.Init(boolParameter);
|
|
||||||
Parameters.AddChild(setter);
|
Parameters.AddChild(setter);
|
||||||
}
|
}
|
||||||
else if (parameter is ICharParameter charParameter)
|
else if (parameter is ICharParameter charParameter)
|
||||||
{
|
{
|
||||||
ModuleCharValueParameterSetter setter =
|
ModuleCharValueParameterSetter setter = GlobalProvider.ProcessProvider
|
||||||
GlobalProvider.SceneProvider
|
.BuildModuleCharValueParameterSetter(charParameter) as ModuleCharValueParameterSetter;
|
||||||
.AssetMapper<ModuleCharValueParameterSetter>()
|
|
||||||
.Instantiate<ModuleCharValueParameterSetter>();
|
|
||||||
setter.Init(charParameter);
|
|
||||||
Parameters.AddChild(setter);
|
Parameters.AddChild(setter);
|
||||||
}
|
}
|
||||||
else if (parameter is IKeyParameter keyParameter)
|
else if (parameter is IKeyParameter keyParameter)
|
||||||
{
|
{
|
||||||
ModuleKeyValueParameterSetter setter =
|
ModuleKeyValueParameterSetter setter = GlobalProvider.ProcessProvider
|
||||||
GlobalProvider.SceneProvider
|
.BuildModuleKeyValueParameterSetter(keyParameter) as ModuleKeyValueParameterSetter;
|
||||||
.AssetMapper<ModuleKeyValueParameterSetter>()
|
|
||||||
.Instantiate<ModuleKeyValueParameterSetter>();
|
|
||||||
setter.Init(keyParameter);
|
|
||||||
Parameters.AddChild(setter);
|
Parameters.AddChild(setter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
@@ -6,7 +7,7 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModulePolymorphismTab : Panel, IModuleManualTab
|
public partial class ModulePolymorphismTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
|
|
||||||
@@ -17,9 +18,6 @@ public partial class ModulePolymorphismTab : Panel, IModuleManualTab
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string FullName() => "Polymorphism";
|
public string FullName() => "Polymorphism";
|
||||||
|
|
||||||
private static readonly PackedScene PortTypeSelectorScene =
|
|
||||||
GlobalProvider.SceneProvider.AssetMapper<PortTypeSelector>();
|
|
||||||
public IPolymorphismModule Module { get; set; }
|
public IPolymorphismModule Module { get; set; }
|
||||||
private VBoxContainer PortGroups { get; set; }
|
private VBoxContainer PortGroups { get; set; }
|
||||||
|
|
||||||
@@ -30,8 +28,7 @@ public partial class ModulePolymorphismTab : Panel, IModuleManualTab
|
|||||||
PortGroups = GetNode<VBoxContainer>("ScrolledItems/PortGroups");
|
PortGroups = GetNode<VBoxContainer>("ScrolledItems/PortGroups");
|
||||||
foreach (IDataPortGroup group in Module.ConfigurablePortGroups)
|
foreach (IDataPortGroup group in Module.ConfigurablePortGroups)
|
||||||
{
|
{
|
||||||
PortTypeSelector selector = PortTypeSelectorScene.Instantiate<PortTypeSelector>();
|
PortTypeSelector selector = GlobalProvider.ProcessProvider.BuildPortTypeSelector(group) as PortTypeSelector;
|
||||||
selector.Init(group);
|
|
||||||
PortGroups.AddChild(selector);
|
PortGroups.AddChild(selector);
|
||||||
}
|
}
|
||||||
Name = "Poly";
|
Name = "Poly";
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ModuleRealValueParameterSetter : ModuleParameterSetter
|
public partial class ModuleRealValueParameterSetter : ModuleParameterSetter, ISceneConcept
|
||||||
{
|
{
|
||||||
public void Init(IDoubleParameter parameter)
|
public void Init(IDoubleParameter parameter)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
using Enigmos.Modules.ProgrammableModules;
|
using Enigmos.Modules.ProgrammableModules;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class PortMaintenanceTab : Panel, IModuleManualTab
|
public abstract partial class PortMaintenanceTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
|
|
||||||
@@ -18,7 +18,10 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string FullName() => "Maintenance";
|
public string FullName() => "Maintenance";
|
||||||
private static readonly PackedScene PortFixerScene = GlobalProvider.SceneProvider!.AssetMapper<PortFixer>();
|
|
||||||
|
protected abstract PortFixer PortFixerInstantiate();
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should Be Assigned Before This Tab Been Added As Child To Tab Container
|
/// Should Be Assigned Before This Tab Been Added As Child To Tab Container
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -31,7 +34,7 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab
|
|||||||
Ports = GetNode<VBoxContainer>("ScrolledItems/Ports");
|
Ports = GetNode<VBoxContainer>("ScrolledItems/Ports");
|
||||||
foreach (IBasePort port in Module!.Ports)
|
foreach (IBasePort port in Module!.Ports)
|
||||||
{
|
{
|
||||||
PortFixer fixer = PortFixerScene.Instantiate<PortFixer>();
|
PortFixer fixer = PortFixerInstantiate();
|
||||||
fixer.Init(port);
|
fixer.Init(port);
|
||||||
Ports.AddChild(fixer);
|
Ports.AddChild(fixer);
|
||||||
}
|
}
|
||||||
@@ -39,18 +42,18 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab
|
|||||||
if (Module is ProgrammableModule programmableModule)
|
if (Module is ProgrammableModule programmableModule)
|
||||||
{
|
{
|
||||||
HashSet<string> used = new HashSet<string>();
|
HashSet<string> used = new HashSet<string>();
|
||||||
foreach (IBasePort port in programmableModule.ExplicitPorts)
|
foreach (IBasePort port in programmableModule.Ports)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (used.Contains("Exterior" + port.Name + $"#{i}"))
|
while (used.Contains("Exterior" + port.Name + $"#{i}"))
|
||||||
i++;
|
i++;
|
||||||
used.Add("Exterior" + port.Name + $"#{i}");
|
used.Add("Exterior" + port.Name + $"#{i}");
|
||||||
port.Name = "Exterior" + port.Name + $"#{i}";
|
port.Name = "Exterior" + port.Name + $"#{i}";
|
||||||
PortFixer fixer = PortFixerScene.Instantiate<PortFixer>();
|
PortFixer fixer = PortFixerInstantiate();
|
||||||
fixer.Init(port);
|
fixer.Init(port);
|
||||||
Ports.AddChild(fixer);
|
Ports.AddChild(fixer);
|
||||||
}
|
}
|
||||||
foreach (IBasePort port in programmableModule.ImplicitPorts)
|
foreach (IBasePort port in programmableModule.Board!.OnBoardPorts)
|
||||||
{
|
{
|
||||||
string baseName = port.Name.ToString().Replace("Empty", "Interior");
|
string baseName = port.Name.ToString().Replace("Empty", "Interior");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -58,7 +61,7 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab
|
|||||||
i++;
|
i++;
|
||||||
used.Add(baseName + $"#{i}");
|
used.Add(baseName + $"#{i}");
|
||||||
port.Name = baseName + $"#{i}";
|
port.Name = baseName + $"#{i}";
|
||||||
PortFixer fixer = PortFixerScene.Instantiate<PortFixer>();
|
PortFixer fixer = PortFixerInstantiate();
|
||||||
fixer.Init(port);
|
fixer.Init(port);
|
||||||
Ports.AddChild(fixer);
|
Ports.AddChild(fixer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class PortTypeSelector : Control
|
public partial class PortTypeSelector : Control, ISceneConcept, IPortTypeSelector
|
||||||
{
|
{
|
||||||
private bool InitFlag { get; set; }
|
private bool InitFlag { get; set; }
|
||||||
|
|
||||||
@@ -17,20 +19,20 @@ public partial class PortTypeSelector : Control
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Underlying Group must be set before _Ready
|
/// Underlying Group must be set before _Ready
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IDataPortGroup? UnderlyingGroup { get; set; }
|
public IDataPortGroup UnderlyingGroup { get; set; }
|
||||||
private Label? Description { get; set; }
|
private Label Description { get; set; }
|
||||||
private OptionButton? TypeOptions { get; set; }
|
private OptionButton TypeOptions { get; set; }
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
if (!InitFlag)
|
if (!InitFlag)
|
||||||
throw new Exception("TODO - NEED INIT");
|
throw new Exception("TODO - NEED INIT");
|
||||||
Description = GetNode<Label>("Description");
|
Description = GetNode<Label>("Description");
|
||||||
TypeOptions = GetNode<OptionButton>("TypeOptions");
|
TypeOptions = GetNode<OptionButton>("TypeOptions");
|
||||||
TypeOptions.Clear();
|
TypeOptions!.Clear();
|
||||||
for (int idx = 0; idx < UnderlyingGroup!.TypeOptions.Length; idx++)
|
for (int idx = 0; idx < UnderlyingGroup!.TypeOptions.Count; idx++)
|
||||||
TypeOptions.AddIconItem(GlobalProvider.EnigmosProvider!.DataPortTypeMap[UnderlyingGroup.TypeOptions[idx]], "", idx);
|
TypeOptions.AddIconItem(GlobalProvider.DataTypeTexture[UnderlyingGroup.TypeOptions[idx].Type], "", idx);
|
||||||
Description.Text = UnderlyingGroup.Description;
|
Description.Text = UnderlyingGroup.Description;
|
||||||
TypeOptions.Select(Array.IndexOf(UnderlyingGroup.TypeOptions, UnderlyingGroup.SelectedType));
|
TypeOptions.Select(UnderlyingGroup.TypeOptions.IndexOf(UnderlyingGroup.SelectedType));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetType(int index)
|
private void SetType(int index)
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
using Enigmos.Modules.ProgrammableModules;
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.Enigmos.ModuleManuals;
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
using Nocturnis.Godot;
|
||||||
|
|
||||||
namespace Enigmos.Manual;
|
namespace Enigmos.Manual;
|
||||||
|
|
||||||
public partial class ProgrammableModuleSettingTab : Panel, IModuleManualTab
|
public abstract partial class ProgrammableModuleSettingTab : Panel, IModuleManualTab, ISceneConcept
|
||||||
{
|
{
|
||||||
private ProgrammableModule? Module { get; set; }
|
private IProgrammableModule Module { get; set; }
|
||||||
|
|
||||||
private Button? EditModule { get; set; }
|
private Button EditModule { get; set; }
|
||||||
|
|
||||||
public void Init(ProgrammableModule module)
|
public void Init(IProgrammableModule module)
|
||||||
{
|
{
|
||||||
Module = module;
|
Module = module;
|
||||||
}
|
}
|
||||||
@@ -27,6 +29,7 @@ public partial class ProgrammableModuleSettingTab : Panel, IModuleManualTab
|
|||||||
|
|
||||||
private void EnterProgrammableBoard()
|
private void EnterProgrammableBoard()
|
||||||
{
|
{
|
||||||
GlobalProvider.SceneProvider!.RootScene.ChangeScene(Module!.UnderlyingBoard);
|
GlobalProvider.SceneProvider!.RootScene.ChangeScene(Module!.UnderlyingBoard.AsNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
using Enigmos.Exceptions;
|
|
||||||
using Enigmos.Manual;
|
|
||||||
using Enigmos.Ports;
|
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis;
|
||||||
using Nocturnis.DataStructures;
|
using Nocturnis.DataStructures;
|
||||||
using Nocturnis.Enigmos.Boards;
|
using Nocturnis.Enigmos.Boards;
|
||||||
using Nocturnis.Enigmos.Cables;
|
using Nocturnis.Enigmos.Cables;
|
||||||
|
using Nocturnis.Enigmos.ModuleManuals;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Nocturnis.UIElements;
|
using Nocturnis.Godot;
|
||||||
|
|
||||||
namespace Enigmos.Modules;
|
namespace Enigmos.Modules;
|
||||||
|
|
||||||
@@ -17,19 +16,21 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
[Export] private int PresetPortQuality { get; set; }
|
[Export] private int PresetPortQuality { get; set; }
|
||||||
[Export] private int PresetPortCondition { get; set; }
|
[Export] private int PresetPortCondition { get; set; }
|
||||||
[Export] protected bool UsingPreset { get; set; }
|
[Export] protected bool UsingPreset { get; set; }
|
||||||
[Export] public IPresetModuleConnection[] PresetConnections { get; set; } = Array.Empty<IPresetModuleConnection>();
|
//[Export]
|
||||||
|
public IPresetModuleConnection[] PresetConnections { get; set; } = Array.Empty<IPresetModuleConnection>();
|
||||||
[Export] public string LabelString { get; set; } = "";
|
[Export] public string LabelString { get; set; } = "";
|
||||||
|
|
||||||
public virtual Vector2 PositionToBoard => Position;
|
public virtual Vector2 PositionToBoard => Position;
|
||||||
protected virtual bool Draggable => true;
|
protected virtual bool Draggable => true;
|
||||||
protected virtual bool HasManual => true;
|
protected virtual bool HasManual => true;
|
||||||
public bool HasLabel => HasManual;
|
public bool HasLabel => HasManual;
|
||||||
public virtual IEnumerable<IBasePort> Ports => Array.Empty<BasePort>();
|
public virtual IEnumerable<IBasePort> Ports => GetChildren().OfType<IBasePort>();
|
||||||
|
|
||||||
public IBaseBoard? Board { get; set; }
|
public IBaseBoard Board { get; set; }
|
||||||
private ModuleManual? Manual { get; set; }
|
public IModuleManual Manual { get; set; }
|
||||||
public ISimpleLabel? Label { get; set; }
|
public Label Label { get; set; }
|
||||||
public Node AsNode => this;
|
public Node AsNode => this;
|
||||||
|
|
||||||
public virtual void PresetValueInit()
|
public virtual void PresetValueInit()
|
||||||
{
|
{
|
||||||
foreach (IBasePort port in Ports)
|
foreach (IBasePort port in Ports)
|
||||||
@@ -45,12 +46,11 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
{
|
{
|
||||||
if (HasLabel)
|
if (HasLabel)
|
||||||
{
|
{
|
||||||
Label = GlobalProvider.SceneProvider!
|
Label = new Label();
|
||||||
.AssetMapper<ISimpleLabel>()
|
Label.AddThemeFontOverride("font", GlobalProvider.Font);
|
||||||
.Instantiate<ISimpleLabel>();
|
|
||||||
Label.Position = new Vector2(0, -25);
|
Label.Position = new Vector2(0, -25);
|
||||||
Label.Text = LabelString;
|
Label.Text = LabelString;
|
||||||
AddChild(Label.AsNode);
|
AddChild(Label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,15 +84,6 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
PresetValueInit();
|
PresetValueInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void TimeoutCheck(IRootModule root)
|
|
||||||
{
|
|
||||||
if (root.Timer!.ElapsedMilliseconds < 25) return;
|
|
||||||
root.Timer.Stop();
|
|
||||||
throw ModuleExecutionTimeout.Exception;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void TimeoutHandler(ModuleExecutionTimeout timeout) => throw timeout;
|
|
||||||
|
|
||||||
public override Variant _GetDragData(Vector2 atPosition)
|
public override Variant _GetDragData(Vector2 atPosition)
|
||||||
{
|
{
|
||||||
if (!Draggable)
|
if (!Draggable)
|
||||||
@@ -101,15 +92,6 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
Board!.ModuleMovingLayer.MouseOffset = GetLocalMousePosition();
|
Board!.ModuleMovingLayer.MouseOffset = GetLocalMousePosition();
|
||||||
return GlobalProvider.DataStructureProvider!.NewVariantWithType("Module", this);
|
return GlobalProvider.DataStructureProvider!.NewVariantWithType("Module", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*protected T GetPort<T>(string path) where T : BasePort
|
|
||||||
{
|
|
||||||
T res = GetNode<T>(path);
|
|
||||||
res.Init();
|
|
||||||
return res;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public override void _Input(InputEvent @event)
|
public override void _Input(InputEvent @event)
|
||||||
{
|
{
|
||||||
if (@event is InputEventMouseButton eventMouseButton)
|
if (@event is InputEventMouseButton eventMouseButton)
|
||||||
@@ -119,19 +101,11 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
{
|
{
|
||||||
if (eventMouseButton.ButtonIndex == MouseButton.Right && eventMouseButton.Pressed)
|
if (eventMouseButton.ButtonIndex == MouseButton.Right && eventMouseButton.Pressed)
|
||||||
{
|
{
|
||||||
if (!HasManual)
|
if (!HasManual || Board!.ManualOpened)
|
||||||
return;
|
|
||||||
if (Board!.ManualOpened)
|
|
||||||
return;
|
return;
|
||||||
if (Manual == null)
|
if (Manual == null)
|
||||||
{
|
GlobalProvider.ProcessProvider.BuildManual(this);
|
||||||
Manual = GlobalProvider.SceneProvider!
|
Board.ModuleManualLayer!.AddChild(Manual.AsNode());
|
||||||
.AssetMapper<ModuleManual>()
|
|
||||||
.Instantiate<ModuleManual>();
|
|
||||||
Manual.Init(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
Board.ModuleManualLayer!.AddChild(Manual);
|
|
||||||
Manual.Position = Board.ModuleManualLayer.ManualPosition.Position - Manual.Size / 2;
|
Manual.Position = Board.ModuleManualLayer.ManualPosition.Position - Manual.Size / 2;
|
||||||
Board.ManualOpened = true;
|
Board.ManualOpened = true;
|
||||||
return;
|
return;
|
||||||
@@ -148,7 +122,8 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
.Select(p => Board.CablePairing[p])
|
.Select(p => Board.CablePairing[p])
|
||||||
.ToHashSet();
|
.ToHashSet();
|
||||||
if (this is ICompositeModule thisCompositeModule)
|
if (this is ICompositeModule thisCompositeModule)
|
||||||
foreach (IBasePort port in thisCompositeModule.SubModules.SelectMany(module => module.Ports).Where(Board.CablePairing.ContainsKey))
|
foreach (IBasePort port in thisCompositeModule.SubModules.SelectMany(module => module.Ports)
|
||||||
|
.Where(Board.CablePairing.ContainsKey))
|
||||||
Board.FocusedCables.Add(Board.CablePairing[port]);
|
Board.FocusedCables.Add(Board.CablePairing[port]);
|
||||||
foreach (IBaseCable cable in Board.FocusedCables)
|
foreach (IBaseCable cable in Board.FocusedCables)
|
||||||
cable.Modulate = Color.Color8(255, 255, 255, 255);
|
cable.Modulate = Color.Color8(255, 255, 255, 255);
|
||||||
@@ -159,4 +134,6 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
|
|||||||
|
|
||||||
base._Input(@event);
|
base._Input(@event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abstract Texture2D PreviewTexture { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
41
Modules/CompositeModule.cs
Normal file
41
Modules/CompositeModule.cs
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
using Enigmos.Modules.SubModules;
|
||||||
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
using Nocturnis.Enigmos.Ports;
|
||||||
|
|
||||||
|
namespace Enigmos.Modules;
|
||||||
|
|
||||||
|
public abstract partial class CompositeModule : BaseModule, ICompositeModule
|
||||||
|
{
|
||||||
|
public IBaseModule[] SubModules => GetChildren().OfType<IBaseModule>().ToArray();
|
||||||
|
|
||||||
|
public override IEnumerable<IBasePort> Ports
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
IEnumerable<IBasePort> res = base.Ports;
|
||||||
|
foreach (IBaseModule bm in SubModules)
|
||||||
|
res = res.Union(bm.Ports);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
protected T GetModule<T>(string path) where T : SubModule
|
||||||
|
{
|
||||||
|
T res = GetNode<T>(path);
|
||||||
|
res.Init();
|
||||||
|
res.ParentModule = this;
|
||||||
|
res.Board = Board;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected T[] GetModules<T>() where T : SubModule
|
||||||
|
{
|
||||||
|
T[] res = SubModules.OfType<T>().OrderBy(x => x.Name).ToArray();
|
||||||
|
foreach (T m in res)
|
||||||
|
{
|
||||||
|
m.Init();
|
||||||
|
m.ParentModule = this;
|
||||||
|
m.Board = Board;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +1,18 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class AdditionModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class AdditionModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataInGroup? InputGroup { get; set; }
|
private IDataInGroup? InputGroup { get; set; }
|
||||||
private IDataOutGroup? OutputGroup { get; set; }
|
private IDataOutGroup? OutputGroup { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override double MaintenanceAlpha => 0.19572021d;
|
public override double MaintenanceAlpha => 0.19572021d;
|
||||||
public override double MaintenanceBeta => 0.20151779d;
|
public override double MaintenanceBeta => 0.20151779d;
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
@@ -28,15 +26,15 @@ public partial class AdditionModule : BinaryComputationalModule, IPolymorphismMo
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider!.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyTensor
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -47,7 +45,7 @@ public partial class AdditionModule : BinaryComputationalModule, IPolymorphismMo
|
|||||||
public override string GetDescription => GlobalProvider.EnigmosProvider!.ModuleDescription<AdditionModule>();
|
public override string GetDescription => GlobalProvider.EnigmosProvider!.ModuleDescription<AdditionModule>();
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Proxy(CacheItem cache) =>
|
(object, DataType) Proxy(CacheItem cache) =>
|
||||||
GlobalProvider.PolymorphismProvider!.Add(this.X(cache), this.Y(cache));
|
GlobalProvider.PolymorphismProvider!.Add(this.X(cache), this.Y(cache));
|
||||||
this.Define(Proxy);
|
this.Define(Proxy);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public abstract partial class BinaryLogicModule : BinaryComputationalModule, ILogicModule, IDuplicateOutputModule
|
public abstract partial class BinaryLogicModule : BinaryComputationalModule, ILogicModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|||||||
@@ -1,29 +1,27 @@
|
|||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class ComparisionModule : BinaryComputationalModule,
|
public abstract partial class ComparisionModule : BinaryComputationalModule,
|
||||||
IParameterizedModule,
|
IParameterizedModule,
|
||||||
IDuplicateOutputModule,
|
IDuplicateOutputModule,
|
||||||
IOperationModule
|
IOperationModule
|
||||||
{
|
{
|
||||||
private IBoolParameter? Greater { get; set; }
|
private IBoolParameter Greater { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output",1);
|
this.DataOutInit("Output",1);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
Greater = GlobalProvider.DataStructureProvider!.NewBoolParameter("Method", "gt", "lt", true);
|
Greater = GlobalProvider.DataStructureProvider!.NewBoolParameter("Method", "gt", "lt", true);
|
||||||
ConfigurableParameters = new HashSet<IConfigurableParameter>() { Greater };
|
ConfigurableParameters = new HashSet<IConfigurableParameter> { Greater };
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,8 +30,8 @@ public partial class ComparisionModule : BinaryComputationalModule,
|
|||||||
{
|
{
|
||||||
this.Define(
|
this.Define(
|
||||||
cache => (
|
cache => (
|
||||||
!(Greater!.ParameterValue ^ (this.X(cache).Double > this.Y(cache).Double)),
|
!(Greater!.ParameterValue ^ (this.X(cache).Real > this.Y(cache).Real)),
|
||||||
EnigmosConstant.DataPortTypes.Bit
|
DataTypeConstant.BaseDataTypes.Bit
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,19 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class ControlledOutputModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class ControlledOutputModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
[Export] private StringName? PresetDataType { get; set; }
|
[Export] private StringName? PresetDataType { get; set; }
|
||||||
private IDataOutGroup? OutputGroup { get; set; }
|
private IDataOutGroup? OutputGroup { get; set; }
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public void Inference() => DataInPorts[1].SetDataType(OutputGroup!.SelectedType);
|
public void Inference() => DataInPorts[1].SetDataType(OutputGroup!.SelectedType);
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
@@ -24,22 +23,22 @@ public partial class ControlledOutputModule : BinaryComputationalModule, IPolymo
|
|||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Data Type",
|
"Output Data Type",
|
||||||
UsingPreset ? PresetDataType! : EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
DataInPorts[1].SetDataType(EnigmosConstant.DataPortTypes.Real);
|
DataInPorts[1].SetDataType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
{
|
{
|
||||||
if (this.X(cache).Bit)
|
if (this.X(cache).Bit)
|
||||||
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
||||||
return (0, EnigmosConstant.DataPortTypes.Null);
|
return (0, DataTypeConstant.BaseDataTypes.Null);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class DivisionModule : BinaryComputationalModule,
|
public abstract partial class DivisionModule : BinaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataInGroup? InputGroup { get; set; }
|
private IDataInGroup? InputGroup { get; set; }
|
||||||
private IDataOutGroup? OutputGroup { get; set; }
|
private IDataOutGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -26,15 +24,15 @@ public partial class DivisionModule : BinaryComputationalModule,
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -42,7 +40,7 @@ public partial class DivisionModule : BinaryComputationalModule,
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
GlobalProvider.PolymorphismProvider!.Div(this.X(cache), this.Y(cache));
|
GlobalProvider.PolymorphismProvider!.Div(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,17 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class DotProductModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class DotProductModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataInGroup? VectorInputGroup { get; set; }
|
private IDataInGroup? VectorInputGroup { get; set; }
|
||||||
private IDataOutGroup? OutputGroup { get; set; }
|
private IDataOutGroup? OutputGroup { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -25,15 +22,15 @@ public partial class DotProductModule : BinaryComputationalModule, IPolymorphism
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"Vector Input Type",
|
"Vector Input Type",
|
||||||
EnigmosConstant.DataPortTypes.R2,
|
DataTypeConstant.BaseDataTypes.R2,
|
||||||
EnigmosConstant.DataPortTypes.VectorTypes
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { VectorInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { VectorInputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -41,17 +38,17 @@ public partial class DotProductModule : BinaryComputationalModule, IPolymorphism
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
GlobalProvider.PolymorphismProvider!.Dot(this.X(cache), this.Y(cache));
|
GlobalProvider.PolymorphismProvider!.Dot(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Inference()
|
public void Inference()
|
||||||
{
|
{
|
||||||
if (GlobalProvider.DataPackageTypeProvider!.IsComplexTensorType(VectorInputGroup!.SelectedType))
|
if (GlobalProvider.DataTypeProvider!.IsComplexTensorType(VectorInputGroup!.SelectedType))
|
||||||
OutputGroup!.SelectedType = EnigmosConstant.DataPortTypes.Complex;
|
OutputGroup!.SelectedType = DataTypeConstant.BaseDataTypes.Complex;
|
||||||
else
|
else
|
||||||
OutputGroup!.SelectedType = EnigmosConstant.DataPortTypes.Real;
|
OutputGroup!.SelectedType = DataTypeConstant.BaseDataTypes.Real;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalAlternativeDenialModule : BinaryLogicModule
|
public abstract partial class LogicalAlternativeDenialModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
(!this.X(cache).Bit | !this.Y(cache).Bit, EnigmosConstant.DataPortTypes.Bit);
|
(!this.X(cache).Bit | !this.Y(cache).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalBiconditionalModule : BinaryLogicModule
|
public abstract partial class LogicalBiconditionalModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
(!(this.X(cache).Bit ^ this.Y(cache).Bit), EnigmosConstant.DataPortTypes.Bit);
|
(!(this.X(cache).Bit ^ this.Y(cache).Bit), DataTypeConstant.BaseDataTypes.Bit);
|
||||||
|
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalConjunctionModule : BinaryLogicModule
|
public abstract partial class LogicalConjunctionModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@@ -13,8 +13,8 @@ public partial class LogicalConjunctionModule : BinaryLogicModule
|
|||||||
{
|
{
|
||||||
var x = DataOutPorts.Length;
|
var x = DataOutPorts.Length;
|
||||||
|
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
(this.X(cache).Bit & this.Y(cache).Bit, EnigmosConstant.DataPortTypes.Bit);
|
(this.X(cache).Bit & this.Y(cache).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalDisjunctionModule : BinaryLogicModule
|
public abstract partial class LogicalDisjunctionModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem x) =>
|
(object, DataType) Func(CacheItem x) =>
|
||||||
(this.X(x).Bit | this.Y(x).Bit, EnigmosConstant.DataPortTypes.Bit);
|
(this.X(x).Bit | this.Y(x).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalExclusiveDisjunctionModule : BinaryLogicModule
|
public abstract partial class LogicalExclusiveDisjunctionModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
=> (this.X(cache).Bit ^ this.Y(cache).Bit, EnigmosConstant.DataPortTypes.Bit);
|
=> (this.X(cache).Bit ^ this.Y(cache).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ using Nocturnis.GlobalManagement.Constants;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalImplicationModule : BinaryLogicModule
|
public abstract partial class LogicalImplicationModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
this.Define(
|
this.Define(
|
||||||
x => (!this.X(x).Bit | this.Y(x).Bit, EnigmosConstant.DataPortTypes.Bit)
|
x => (!this.X(x).Bit | this.Y(x).Bit, DataTypeConstant.BaseDataTypes.Bit)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ using Nocturnis.GlobalManagement.Constants;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalJointDenialModule : BinaryLogicModule
|
public abstract partial class LogicalJointDenialModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
@@ -11,7 +11,7 @@ public partial class LogicalJointDenialModule : BinaryLogicModule
|
|||||||
x =>
|
x =>
|
||||||
(
|
(
|
||||||
!this.X(x).Bit & !this.Y(x).Bit,
|
!this.X(x).Bit & !this.Y(x).Bit,
|
||||||
EnigmosConstant.DataPortTypes.Bit
|
DataTypeConstant.BaseDataTypes.Bit
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class LogicalNonimplicationModule : BinaryLogicModule
|
public abstract partial class LogicalNonimplicationModule : BinaryLogicModule
|
||||||
{
|
{
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
(this.X(cache).Bit & !this.Y(cache).Bit, EnigmosConstant.DataPortTypes.Bit);
|
(this.X(cache).Bit & !this.Y(cache).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,28 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class MaxModule : BinaryComputationalModule, IOperationModule, IDuplicateOutputModule
|
public abstract partial class MaxModule : BinaryComputationalModule, IOperationModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 3);
|
this.DataOutInit("Output", 3);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
{
|
{
|
||||||
if (this.X(cache).Double > this.Y(cache).Double)
|
if (this.X(cache).Real > this.Y(cache).Real)
|
||||||
return (this.X(cache), EnigmosConstant.DataPortTypes.Real);
|
return (this.X(cache), DataTypeConstant.BaseDataTypes.Real);
|
||||||
return (this.Y(cache), EnigmosConstant.DataPortTypes.Real);
|
return (this.Y(cache), DataTypeConstant.BaseDataTypes.Real);
|
||||||
}
|
}
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,26 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class MinModule : BinaryComputationalModule, IDuplicateOutputModule, IOperationModule
|
public abstract partial class MinModule : BinaryComputationalModule, IDuplicateOutputModule, IOperationModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 3);
|
this.DataOutInit("Output", 3);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
{
|
{
|
||||||
if (this.X(cache).Double < this.Y(cache).Double)
|
if (this.X(cache).Real < this.Y(cache).Real)
|
||||||
return (this.X(cache).Data!, this.X(cache).Type!);
|
return (this.X(cache).Data!, this.X(cache).Type!);
|
||||||
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,17 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class MultiplicationModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class MultiplicationModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? InputGroup { get; set; }
|
private IDataPortGroup? InputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -26,15 +23,15 @@ public partial class MultiplicationModule : BinaryComputationalModule, IPolymorp
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -42,7 +39,7 @@ public partial class MultiplicationModule : BinaryComputationalModule, IPolymorp
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
GlobalProvider.PolymorphismProvider!.Mul(this.X(cache), this.Y(cache));
|
GlobalProvider.PolymorphismProvider!.Mul(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -10,11 +9,10 @@ using Skeleton.DataStructure;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class PowerModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class PowerModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? TensorInputGroup { get; set; }
|
private IDataPortGroup? TensorInputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -25,16 +23,16 @@ public partial class PowerModule : BinaryComputationalModule, IPolymorphismModul
|
|||||||
this,
|
this,
|
||||||
new IDataInPort[] { DataInPorts[0] },
|
new IDataInPort[] { DataInPorts[0] },
|
||||||
"Base Tensor Type",
|
"Base Tensor Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
DataInPorts[1].SetDataType(EnigmosConstant.DataPortTypes.Complex);
|
DataInPorts[1].SetDataType(DataTypeConstant.BaseDataTypes.Complex);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { TensorInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { TensorInputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -42,11 +40,11 @@ public partial class PowerModule : BinaryComputationalModule, IPolymorphismModul
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.Pow(this.X(cache), this.Y(cache));
|
(object, DataType) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.Pow(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Inference() =>
|
public void Inference() =>
|
||||||
OutputGroup!.SelectedType = GlobalProvider.DataPackageTypeProvider!.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -10,14 +9,13 @@ using Skeleton.DataStructure;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class ScalarDivisionModule : BinaryComputationalModule,
|
public abstract partial class ScalarDivisionModule : BinaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? ScalarInputGroup { get; set; }
|
private IDataPortGroup? ScalarInputGroup { get; set; }
|
||||||
private IDataPortGroup? TensorInputGroup { get; set; }
|
private IDataPortGroup? TensorInputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override double MaintenanceAlpha => 0.77852142d;
|
public override double MaintenanceAlpha => 0.77852142d;
|
||||||
public override double MaintenanceBeta => 0.9544432d;
|
public override double MaintenanceBeta => 0.9544432d;
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
@@ -30,22 +28,22 @@ public partial class ScalarDivisionModule : BinaryComputationalModule,
|
|||||||
this,
|
this,
|
||||||
new IDataInPort[] { DataInPorts[0] },
|
new IDataInPort[] { DataInPorts[0] },
|
||||||
"Tensor Input Type",
|
"Tensor Input Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.R2,
|
||||||
EnigmosConstant.DataPortTypes.VectorTypes
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
ScalarInputGroup =GlobalProvider.DataStructureProvider.NewDataInGroup(
|
ScalarInputGroup =GlobalProvider.DataStructureProvider.NewDataInGroup(
|
||||||
this,
|
this,
|
||||||
new IDataInPort[] { DataInPorts[1] },
|
new IDataInPort[] { DataInPorts[1] },
|
||||||
"Scalar Input Type",
|
"Scalar Input Type",
|
||||||
EnigmosConstant.DataPortTypes.R2,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.VectorTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup, TensorInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup, TensorInputGroup };
|
||||||
SelectedOption = 0;
|
SelectedOption = 0;
|
||||||
@@ -55,14 +53,14 @@ public partial class ScalarDivisionModule : BinaryComputationalModule,
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.ScalarDiv(this.X(cache), this.Y(cache));
|
(object, DataType) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.ScalarDiv(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Inference()
|
public void Inference()
|
||||||
{
|
{
|
||||||
if (GlobalProvider.DataPackageTypeProvider!.IsComplexTensorType(ScalarInputGroup!.SelectedType))
|
if (GlobalProvider.DataTypeProvider!.IsComplexTensorType(ScalarInputGroup!.SelectedType))
|
||||||
OutputGroup!.SelectedType = GlobalProvider.DataPackageTypeProvider.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
||||||
else
|
else
|
||||||
OutputGroup!.SelectedType = TensorInputGroup!.SelectedType;
|
OutputGroup!.SelectedType = TensorInputGroup!.SelectedType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -10,7 +9,7 @@ using Skeleton.DataStructure;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class ScalarMultiplicationModule :
|
public abstract partial class ScalarMultiplicationModule :
|
||||||
BinaryComputationalModule,
|
BinaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
@@ -18,7 +17,6 @@ public partial class ScalarMultiplicationModule :
|
|||||||
private IDataPortGroup? ScalarInputGroup { get; set; }
|
private IDataPortGroup? ScalarInputGroup { get; set; }
|
||||||
private IDataPortGroup? TensorInputGroup { get; set; }
|
private IDataPortGroup? TensorInputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -29,22 +27,22 @@ public partial class ScalarMultiplicationModule :
|
|||||||
this,
|
this,
|
||||||
new IDataInPort[] { DataInPorts[0] },
|
new IDataInPort[] { DataInPorts[0] },
|
||||||
"Scalar Input Type",
|
"Scalar Input Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
TensorInputGroup = GlobalProvider.DataStructureProvider.NewDataInGroup(
|
TensorInputGroup = GlobalProvider.DataStructureProvider.NewDataInGroup(
|
||||||
this,
|
this,
|
||||||
new IDataInPort[] { DataInPorts[1] },
|
new IDataInPort[] { DataInPorts[1] },
|
||||||
"Tensor Input Type",
|
"Tensor Input Type",
|
||||||
EnigmosConstant.DataPortTypes.R2,
|
DataTypeConstant.BaseDataTypes.R2,
|
||||||
EnigmosConstant.DataPortTypes.VectorTypes
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup, TensorInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup, TensorInputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -53,7 +51,7 @@ public partial class ScalarMultiplicationModule :
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) =>
|
(object, DataType) Func(CacheItem cache) =>
|
||||||
GlobalProvider.PolymorphismProvider!.ScalarMul(this.X(cache), this.Y(cache));
|
GlobalProvider.PolymorphismProvider!.ScalarMul(this.X(cache), this.Y(cache));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
@@ -61,10 +59,10 @@ public partial class ScalarMultiplicationModule :
|
|||||||
public void Inference()
|
public void Inference()
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
GlobalProvider.DataPackageTypeProvider!.IsComplexTensorType(ScalarInputGroup!.SelectedType) ||
|
GlobalProvider.DataTypeProvider!.IsComplexTensorType(ScalarInputGroup!.SelectedType) ||
|
||||||
GlobalProvider.DataPackageTypeProvider.IsComplexTensorType(TensorInputGroup!.SelectedType)
|
GlobalProvider.DataTypeProvider.IsComplexTensorType(TensorInputGroup!.SelectedType)
|
||||||
)
|
)
|
||||||
OutputGroup!.SelectedType = GlobalProvider.DataPackageTypeProvider.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider.ComplexVersionOf(TensorInputGroup!.SelectedType);
|
||||||
else
|
else
|
||||||
OutputGroup!.SelectedType = TensorInputGroup.SelectedType;
|
OutputGroup!.SelectedType = TensorInputGroup.SelectedType;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,19 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class SubtractionModule : BinaryComputationalModule,
|
public abstract partial class SubtractionModule : BinaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? InputGroup { get; set; }
|
private IDataPortGroup? InputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -27,15 +24,15 @@ public partial class SubtractionModule : BinaryComputationalModule,
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyTensor
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -43,7 +40,7 @@ public partial class SubtractionModule : BinaryComputationalModule,
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.Sub(this.X(cache), this.Y(cache));
|
(object, DataType) Func(CacheItem cache) => GlobalProvider.PolymorphismProvider!.Sub(this.X(cache), this.Y(cache));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
using Enigmos.Ports.DataPorts;
|
|
||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.DataStructures;
|
using Nocturnis.BracketSystem;
|
||||||
|
using Nocturnis.DataStructures.Data;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
@@ -13,38 +13,37 @@ using C2 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim2
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Binary;
|
namespace Enigmos.Modules.ComputationalModules.Binary;
|
||||||
|
|
||||||
public partial class V2Module : BinaryComputationalModule,
|
public abstract partial class V2Module : BinaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule,
|
||||||
|
IInstructionArrowEnd
|
||||||
{
|
{
|
||||||
private IDataPortGroup? ScalarInputGroup { get; set; }
|
public Marker2D EndMarker { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup ScalarInputGroup { get; set; }
|
||||||
private DataOutPort? Output1 { get; set; }
|
private IDataPortGroup OutputGroup { get; set; }
|
||||||
private DataOutPort? Output2 { get; set; }
|
|
||||||
private DataOutPort? Output3 { get; set; }
|
|
||||||
private DataOutPort? Output4 { get; set; }
|
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override double MaintenanceAlpha => 0.77852142d;
|
public override double MaintenanceAlpha => 0.77852142d;
|
||||||
public override double MaintenanceBeta => 0.9544432d;
|
public override double MaintenanceBeta => 0.9544432d;
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
|
EndMarker = GetNode<Marker2D>("EndMarker");
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 4);
|
this.DataOutInit("Output", 4);
|
||||||
ScalarInputGroup = GlobalProvider.DataStructureProvider!.NewDataInGroup(
|
ScalarInputGroup = GlobalProvider.DataStructureProvider!.NewDataInGroup(
|
||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"Scalar Input Type",
|
"Scalar Input Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.R2,
|
DataTypeConstant.BaseDataTypes.R2,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { ScalarInputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -52,21 +51,21 @@ public partial class V2Module : BinaryComputationalModule,
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
{
|
{
|
||||||
IData x = this.X(cache);
|
DataVariable x = this.X(cache);
|
||||||
IData y = this.Y(cache);
|
DataVariable y = this.Y(cache);
|
||||||
|
|
||||||
if (x.Type == EnigmosConstant.DataPortTypes.Complex || y.Type == EnigmosConstant.DataPortTypes.Complex)
|
if (x.Type == DataTypeConstant.BaseDataTypes.Complex || y.Type == DataTypeConstant.BaseDataTypes.Complex)
|
||||||
return (new C2(x.Complex, y.Complex), EnigmosConstant.DataPortTypes.C2);
|
return (new C2(x.Complex, y.Complex), DataTypeConstant.BaseDataTypes.C2);
|
||||||
return (new R2(x.Double, y.Double), EnigmosConstant.DataPortTypes.Real);
|
return (new R2(x.Real, y.Real), DataTypeConstant.BaseDataTypes.R2);
|
||||||
}
|
}
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Inference()
|
public void Inference()
|
||||||
{
|
{
|
||||||
OutputGroup!.SelectedType = GlobalProvider.DataPackageTypeProvider!.BuildType(OutputGroup.SelectedType, 1, 2);
|
OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!.ToVector(OutputGroup.SelectedType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,11 @@
|
|||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules;
|
namespace Enigmos.Modules.ComputationalModules;
|
||||||
|
|
||||||
public abstract partial class BinaryComputationalModule : ComputationalModule, IBinaryComputationalModule
|
public abstract partial class BinaryComputationalModule : ComputationalModule, IBinaryComputationalModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts;
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[2];
|
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[2];
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|||||||
@@ -2,23 +2,21 @@ using Godot;
|
|||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
||||||
|
|
||||||
public partial class ConstantModule : NullaryComputationalModule, IParameterizedModule, IDuplicateOutputModule
|
public abstract partial class ConstantModule : NullaryComputationalModule, IParameterizedModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
|
|
||||||
[Export] private double PresetConstantValue { get; set; }
|
[Export] private double PresetConstantValue { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
private IDoubleParameter? ConstValue { get; set; }
|
private IDoubleParameter? ConstValue { get; set; }
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 4);
|
this.DataOutInit("Output", 4);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
|
|
||||||
ConstValue =
|
ConstValue =
|
||||||
GlobalProvider.DataStructureProvider!.NewDoubleParameter(
|
GlobalProvider.DataStructureProvider!.NewDoubleParameter(
|
||||||
@@ -34,7 +32,7 @@ public partial class ConstantModule : NullaryComputationalModule, IParameterized
|
|||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
this.Define(cache =>
|
this.Define(cache =>
|
||||||
(ConstValue!.ParameterValue, EnigmosConstant.DataPortTypes.Real)
|
(ConstValue!.ParameterValue, DataTypeConstant.BaseDataTypes.Real)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Enigmos.Ports;
|
|
||||||
using Enigmos.Ports.DataPorts;
|
using Enigmos.Ports.DataPorts;
|
||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
@@ -9,24 +9,23 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
||||||
public partial class KeyListenerModule : NullaryComputationalModule,
|
public abstract partial class KeyListenerModule : NullaryComputationalModule,
|
||||||
IParameterizedModule,
|
IParameterizedModule,
|
||||||
IKeyListenerModule,
|
IKeyListenerModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
[Export] private StringName? PresetActionName { get; set; }
|
[Export] private StringName PresetActionName { get; set; }
|
||||||
private DataOutPort? Output1 { get; set; }
|
private DataOutPort Output1 { get; set; }
|
||||||
private DataOutPort? Output2 { get; set; }
|
private DataOutPort Output2 { get; set; }
|
||||||
private DataOutPort? Output3 { get; set; }
|
private DataOutPort Output3 { get; set; }
|
||||||
public IKeyParameter? ListeningKey { get; set; }
|
public IKeyParameter ListeningKey { get; set; }
|
||||||
public bool Pressed { get; set; }
|
public bool Pressed { get; set; }
|
||||||
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
||||||
public override IEnumerable<BasePort> Ports => new[] { Output1, Output2, Output3 }!;
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 3);
|
this.DataOutInit("Output", 3);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Bit);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
ListeningKey = GlobalProvider.DataStructureProvider!.NewKeyParameter(
|
ListeningKey = GlobalProvider.DataStructureProvider!.NewKeyParameter(
|
||||||
"Listening Key",
|
"Listening Key",
|
||||||
UsingPreset && (PresetActionName != null) ? PresetActionName : "KeyListenAction"
|
UsingPreset && (PresetActionName != null) ? PresetActionName : "KeyListenAction"
|
||||||
@@ -38,13 +37,13 @@ public partial class KeyListenerModule : NullaryComputationalModule,
|
|||||||
ListeningKey.ParameterValue = $"{ListeningKey.ParameterValue}{i}";
|
ListeningKey.ParameterValue = $"{ListeningKey.ParameterValue}{i}";
|
||||||
if(!UsingPreset)
|
if(!UsingPreset)
|
||||||
InputMap.AddAction(ListeningKey.ParameterValue);
|
InputMap.AddAction(ListeningKey.ParameterValue);
|
||||||
GlobalProvider.SceneProvider!.RootScene.KeyListener.Register(this);
|
GlobalProvider.SceneProvider!.RootScene!.KeyListener.Register(this);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object item, StringName type) Func(CacheItem cache) => (Pressed, EnigmosConstant.DataPortTypes.Bit);
|
(object, DataType) Func(CacheItem cache) => (Pressed, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ using Enigmos.Ports.DataPorts;
|
|||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -11,7 +10,7 @@ using Skeleton.Utils.RandomEngines;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
namespace Enigmos.Modules.ComputationalModules.Nullary;
|
||||||
|
|
||||||
public partial class NormalDistributionModule : NullaryComputationalModule,
|
public abstract partial class NormalDistributionModule : NullaryComputationalModule,
|
||||||
IParameterizedModule,
|
IParameterizedModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
@@ -20,7 +19,6 @@ public partial class NormalDistributionModule : NullaryComputationalModule,
|
|||||||
private DataOutPort? Output2 { get; set; }
|
private DataOutPort? Output2 { get; set; }
|
||||||
private DataOutPort? Output3 { get; set; }
|
private DataOutPort? Output3 { get; set; }
|
||||||
private DataOutPort? Output4 { get; set; }
|
private DataOutPort? Output4 { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
private IDoubleParameter? Mu { get; set; }
|
private IDoubleParameter? Mu { get; set; }
|
||||||
private IDoubleParameter? Sigma { get; set; }
|
private IDoubleParameter? Sigma { get; set; }
|
||||||
|
|
||||||
@@ -29,7 +27,7 @@ public partial class NormalDistributionModule : NullaryComputationalModule,
|
|||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 4);
|
this.DataOutInit("Output", 4);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
Mu = GlobalProvider.DataStructureProvider!.NewDoubleParameter("mu", -1, 1, 0);
|
Mu = GlobalProvider.DataStructureProvider!.NewDoubleParameter("mu", -1, 1, 0);
|
||||||
Sigma = GlobalProvider.DataStructureProvider.NewDoubleParameter("sigma", 0, 2, 1);
|
Sigma = GlobalProvider.DataStructureProvider.NewDoubleParameter("sigma", 0, 2, 1);
|
||||||
ConfigurableParameters = new HashSet<IConfigurableParameter> { Mu, Sigma };
|
ConfigurableParameters = new HashSet<IConfigurableParameter> { Mu, Sigma };
|
||||||
@@ -41,7 +39,7 @@ public partial class NormalDistributionModule : NullaryComputationalModule,
|
|||||||
foreach (IDataOutPort op in DataOutPorts)
|
foreach (IDataOutPort op in DataOutPorts)
|
||||||
{
|
{
|
||||||
op.OutData.UpdateCalculation(x =>
|
op.OutData.UpdateCalculation(x =>
|
||||||
(Normal.Get() * Sigma!.ParameterValue - Mu!.ParameterValue, EnigmosConstant.DataPortTypes.Real)
|
(Normal.Get() * Sigma!.ParameterValue - Mu!.ParameterValue, DataTypeConstant.BaseDataTypes.Real)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
using Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules;
|
namespace Enigmos.Modules.ComputationalModules;
|
||||||
|
|
||||||
public abstract partial class NullaryComputationalModule : ComputationalModule, ISourceModule
|
public abstract partial class NullaryComputationalModule : ComputationalModule, ISourceModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => Array.Empty<BasePort>();
|
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts;
|
using Nocturnis.Enigmos.Ports.DataPorts;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
@@ -10,14 +9,13 @@ using Skeleton.DataStructure;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Ternary;
|
namespace Enigmos.Modules.ComputationalModules.Ternary;
|
||||||
|
|
||||||
public partial class SelectorModule : TernaryComputationalModule,
|
public abstract partial class SelectorModule : TernaryComputationalModule,
|
||||||
ITernaryComputationalModule,
|
ITernaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? DataTypeGroup { get; set; }
|
private IDataPortGroup? DataTypeGroup { get; set; }
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
@@ -26,17 +24,17 @@ public partial class SelectorModule : TernaryComputationalModule,
|
|||||||
this,
|
this,
|
||||||
new IDataPort[]{DataInPorts[1], DataInPorts[2]}.Union(DataOutPorts).ToArray(),
|
new IDataPort[]{DataInPorts[1], DataInPorts[2]}.Union(DataOutPorts).ToArray(),
|
||||||
"Data Type",
|
"Data Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
|
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache)
|
(object, DataType) Func(CacheItem cache)
|
||||||
{
|
{
|
||||||
if (this.X(cache).Bit)
|
if (this.X(cache).Bit)
|
||||||
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
return (this.Y(cache).Data!, this.Y(cache).Type!);
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules;
|
namespace Enigmos.Modules.ComputationalModules;
|
||||||
@@ -7,7 +6,6 @@ namespace Enigmos.Modules.ComputationalModules;
|
|||||||
public abstract partial class TernaryComputationalModule : ComputationalModule, IParameterModule
|
public abstract partial class TernaryComputationalModule : ComputationalModule, IParameterModule
|
||||||
{
|
{
|
||||||
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[3];
|
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[3];
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts;
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Unary;
|
namespace Enigmos.Modules.ComputationalModules.Unary;
|
||||||
public partial class CopyModule : UnaryComputationalModule,
|
public abstract partial class CopyModule : UnaryComputationalModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IDuplicateOutputModule
|
IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? InputGroup { get; set; }
|
private IDataPortGroup? InputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
@@ -24,15 +22,15 @@ public partial class CopyModule : UnaryComputationalModule,
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider!.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -40,7 +38,7 @@ public partial class CopyModule : UnaryComputationalModule,
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) => (this.X(cache).Data, this.X(cache).Type)!;
|
(object, DataType) Func(CacheItem cache) => (this.X(cache).Data, this.X(cache).Type)!;
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
public void Inference() => InputGroup!.SelectedType = OutputGroup!.SelectedType;
|
public void Inference() => InputGroup!.SelectedType = OutputGroup!.SelectedType;
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Unary;
|
namespace Enigmos.Modules.ComputationalModules.Unary;
|
||||||
|
|
||||||
public partial class LogicalNegationModule : UnaryComputationalModule, IDuplicateOutputModule
|
public abstract partial class LogicalNegationModule : UnaryComputationalModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataOutInit("Output", 1);
|
this.DataOutInit("Output", 1);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Bit);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Bit);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem cache) => (!this.X(cache).Bit, EnigmosConstant.DataPortTypes.Bit);
|
(object, DataType) Func(CacheItem cache) => (!this.X(cache).Bit, DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,18 @@
|
|||||||
using Enigmos.Ports.DataPorts;
|
|
||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Unary;
|
namespace Enigmos.Modules.ComputationalModules.Unary;
|
||||||
|
|
||||||
public partial class NegationModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class NegationModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private DataOutPort? Output1 { get; set; }
|
|
||||||
private DataOutPort? Output2 { get; set; }
|
|
||||||
private DataOutPort? Output3 { get; set; }
|
|
||||||
private DataOutPort? Output4 { get; set; }
|
|
||||||
private IDataInGroup? InputGroup { get; set; }
|
private IDataInGroup? InputGroup { get; set; }
|
||||||
private IDataOutGroup? OutputGroup { get; set; }
|
private IDataOutGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts)!;
|
|
||||||
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -29,15 +23,15 @@ public partial class NegationModule : UnaryComputationalModule, IPolymorphismMod
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyTensor
|
DataTypeConstant.DataTypeOptions.TensorTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -46,7 +40,7 @@ public partial class NegationModule : UnaryComputationalModule, IPolymorphismMod
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem c) =>
|
(object, DataType) Func(CacheItem c) =>
|
||||||
GlobalProvider.PolymorphismProvider!.Neg(this.X(c));
|
GlobalProvider.PolymorphismProvider!.Neg(this.X(c));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Unary;
|
namespace Enigmos.Modules.ComputationalModules.Unary;
|
||||||
|
|
||||||
public partial class SquareModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class SquareModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? InputGroup { get; set; }
|
private IDataPortGroup? InputGroup { get; set; }
|
||||||
private IDataPortGroup? OutputGroup { get; set; }
|
private IDataPortGroup? OutputGroup { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -24,15 +22,15 @@ public partial class SquareModule : UnaryComputationalModule, IPolymorphismModul
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
OutputGroup = GlobalProvider.DataStructureProvider.NewDataPortGroup(
|
OutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"Output Port Type",
|
"Output Port Type",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.NumericTypes
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { OutputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -40,7 +38,7 @@ public partial class SquareModule : UnaryComputationalModule, IPolymorphismModul
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem c) => GlobalProvider.PolymorphismProvider!.Square(this.X(c));
|
(object, DataType) Func(CacheItem c) => GlobalProvider.PolymorphismProvider!.Square(this.X(c));
|
||||||
this.Define(Func);
|
this.Define(Func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
using Godot;
|
using Nocturnis.DataStructures.Data;
|
||||||
using Nocturnis.DataStructures;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
@@ -11,12 +10,11 @@ using Skeleton.DataStructure;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules.Unary;
|
namespace Enigmos.Modules.ComputationalModules.Unary;
|
||||||
|
|
||||||
public partial class V2ComponentModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
public abstract partial class V2ComponentModule : UnaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup? VectorInputGroup { get; set; }
|
private IDataPortGroup? VectorInputGroup { get; set; }
|
||||||
private IDataPortGroup? ScalarOutputGroup { get; set; }
|
private IDataPortGroup? ScalarOutputGroup { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => base.Ports.Union(DataOutPorts);
|
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -27,15 +25,15 @@ public partial class V2ComponentModule : UnaryComputationalModule, IPolymorphism
|
|||||||
this,
|
this,
|
||||||
DataInPorts,
|
DataInPorts,
|
||||||
"Vector Input Type",
|
"Vector Input Type",
|
||||||
EnigmosConstant.DataPortTypes.R2,
|
DataTypeConstant.BaseDataTypes.R2,
|
||||||
EnigmosConstant.DataPortTypes.VectorTypes
|
DataTypeConstant.DataTypeOptions.VectorTypes
|
||||||
);
|
);
|
||||||
ScalarOutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
ScalarOutputGroup = GlobalProvider.DataStructureProvider.NewDataOutGroup(
|
||||||
this,
|
this,
|
||||||
DataOutPorts,
|
DataOutPorts,
|
||||||
"",
|
"",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
Array.Empty<StringName>()
|
DataTypeConstant.DataTypeOptions.ScalarTypes
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { VectorInputGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { VectorInputGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -43,19 +41,19 @@ public partial class V2ComponentModule : UnaryComputationalModule, IPolymorphism
|
|||||||
|
|
||||||
public override void Define()
|
public override void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func1(CacheItem c)
|
(object, DataType) Func1(CacheItem c)
|
||||||
{
|
{
|
||||||
IData v = this.X(c);
|
DataVariable v = this.X(c);
|
||||||
if (v.Type == EnigmosConstant.DataPortTypes.R2)
|
if (v.Type == DataTypeConstant.BaseDataTypes.R2)
|
||||||
return (v.R2[1], EnigmosConstant.DataPortTypes.Real);
|
return (v.R2[1], DataTypeConstant.BaseDataTypes.Real);
|
||||||
return (v.C2[1], EnigmosConstant.DataPortTypes.Complex);
|
return (v.C2[1], DataTypeConstant.BaseDataTypes.Complex);
|
||||||
}
|
}
|
||||||
(object, StringName) Func2(CacheItem c)
|
(object, DataType) Func2(CacheItem c)
|
||||||
{
|
{
|
||||||
IData v = this.X(c);
|
DataVariable v = this.X(c);
|
||||||
if (v.Type == EnigmosConstant.DataPortTypes.R2)
|
if (v.Type == DataTypeConstant.BaseDataTypes.R2)
|
||||||
return (v.R2[2], EnigmosConstant.DataPortTypes.Real);
|
return (v.R2[2], DataTypeConstant.BaseDataTypes.Real);
|
||||||
return (v.C2[2], EnigmosConstant.DataPortTypes.Complex);
|
return (v.C2[2], DataTypeConstant.BaseDataTypes.Complex);
|
||||||
}
|
}
|
||||||
DataOutPorts[0].OutData.UpdateCalculation(Func1);
|
DataOutPorts[0].OutData.UpdateCalculation(Func1);
|
||||||
DataOutPorts[1].OutData.UpdateCalculation(Func2);
|
DataOutPorts[1].OutData.UpdateCalculation(Func2);
|
||||||
@@ -63,7 +61,7 @@ public partial class V2ComponentModule : UnaryComputationalModule, IPolymorphism
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Inference() =>
|
public void Inference() =>
|
||||||
ScalarOutputGroup!.SelectedType = GlobalProvider.DataPackageTypeProvider!
|
ScalarOutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!
|
||||||
.GetBaseField(VectorInputGroup!.SelectedType);
|
.GetBaseField(VectorInputGroup!.SelectedType);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ComputationalModules;
|
namespace Enigmos.Modules.ComputationalModules;
|
||||||
@@ -8,7 +7,6 @@ namespace Enigmos.Modules.ComputationalModules;
|
|||||||
public abstract partial class UnaryComputationalModule : ComputationalModule, IUnaryComputationalModule
|
public abstract partial class UnaryComputationalModule : ComputationalModule, IUnaryComputationalModule
|
||||||
{
|
{
|
||||||
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[1];
|
public IDataInPort[] DataInPorts { get; set; } = new IDataInPort[1];
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts;
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
|||||||
@@ -1,34 +1,33 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||||
public partial class AttackActionModule : ActionModule, ITerminalModule
|
public abstract partial class AttackActionModule : ActionModule, ITerminalModule
|
||||||
{
|
{
|
||||||
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
public void Drain()
|
public void Drain()
|
||||||
{
|
{
|
||||||
foreach (IDataInPort ip in DataInPorts)
|
|
||||||
_ = ip.GetData.Get;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => SignalInPorts.Union(DataInPorts.Cast<IBasePort>()).ToArray();
|
public bool Finished { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.SignalInInit("SignalIn", 4);
|
this.SignalInInit("SignalIn", 4);
|
||||||
this.DataInInit("Input", 1);
|
this.DataInInit("Input", 1);
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.R2);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.R2);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Act()
|
public override void Act()
|
||||||
{
|
{
|
||||||
CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2);
|
CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2);
|
||||||
|
Finished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
using Enigmos.Ports.DataPorts;
|
|
||||||
using Enigmos.Ports.SignalPorts;
|
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
namespace Enigmos.Modules.ControllingModules.ActionModules;
|
||||||
|
|
||||||
public partial class MoveActionModule : ActionModule, ITerminalModule
|
public abstract partial class MoveActionModule : ActionModule, ITerminalModule
|
||||||
{
|
{
|
||||||
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
@@ -18,14 +15,14 @@ public partial class MoveActionModule : ActionModule, ITerminalModule
|
|||||||
_ = ip.GetData.Get;
|
_ = ip.GetData.Get;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts.Union(SignalInPorts.Cast<IBasePort>());
|
public bool Finished { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataInInit("Input", 1);
|
this.DataInInit("Input", 1);
|
||||||
this.SignalInInit("SignalIn", 4);
|
this.SignalInInit("SignalIn", 4);
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.R2);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.R2);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,6 +31,8 @@ public partial class MoveActionModule : ActionModule, ITerminalModule
|
|||||||
|
|
||||||
public override void Act()
|
public override void Act()
|
||||||
{
|
{
|
||||||
CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2);
|
if (!DataInPorts[0].Connected)
|
||||||
|
return;
|
||||||
|
CreatureControl.Instance.CurrentCharacter!.Action.Move(DataInPorts[0].GetData.Get!.R2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
using System.Diagnostics;
|
|
||||||
using Nocturnis.Creatures;
|
using Nocturnis.Creatures;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ControllingModules;
|
namespace Enigmos.Modules.ControllingModules;
|
||||||
public partial class RootModule : BaseModule, IRootModule
|
public abstract partial class RootModule : BaseModule, IRootModule
|
||||||
{
|
{
|
||||||
public bool ActionFinished { get; set; }
|
public bool ActionFinished { get; set; }
|
||||||
public IBaseCreature? ManagedBy { get; set; }
|
public IBaseCreature ManagedBy { get; set; }
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
SignalOutPorts[0].Route();
|
SignalOutPorts[0].Route();
|
||||||
@@ -16,8 +14,6 @@ public partial class RootModule : BaseModule, IRootModule
|
|||||||
|
|
||||||
protected override bool Draggable => false;
|
protected override bool Draggable => false;
|
||||||
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
||||||
public override IEnumerable<IBasePort> Ports => SignalOutPorts;
|
|
||||||
public Stopwatch? Timer { get; set; }
|
|
||||||
public bool Visited { get; set; }
|
public bool Visited { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
@@ -28,5 +24,9 @@ public partial class RootModule : BaseModule, IRootModule
|
|||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
Console.WriteLine("RootModule Ready");
|
||||||
|
base._Ready();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ControllingModules;
|
namespace Enigmos.Modules.ControllingModules;
|
||||||
|
|
||||||
public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParameterizedModule, ITerminalModule
|
public abstract partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParameterizedModule, ITerminalModule
|
||||||
{
|
{
|
||||||
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
public HashSet<IConfigurableParameter> ConfigurableParameters { get; set; } = new();
|
||||||
private IBoolParameter? LeftPortForTrue { get; set; }
|
private IBoolParameter? LeftPortForTrue { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports =>
|
|
||||||
SignalInPorts.Union(SignalOutPorts.Cast<IBasePort>()).Union(DataInPorts).ToArray();
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
public void Drain()
|
public void Drain()
|
||||||
{
|
{
|
||||||
@@ -22,6 +18,8 @@ public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParamet
|
|||||||
_ = ip.GetData.Get;
|
_ = ip.GetData.Get;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
@@ -30,7 +28,7 @@ public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParamet
|
|||||||
this.DataInInit("Input", 1);
|
this.DataInInit("Input", 1);
|
||||||
LeftPortForTrue =
|
LeftPortForTrue =
|
||||||
GlobalProvider.DataStructureProvider!.NewBoolParameter("Redirect to:", "Left", "Right", true);
|
GlobalProvider.DataStructureProvider!.NewBoolParameter("Redirect to:", "Left", "Right", true);
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
ConfigurableParameters = new HashSet<IConfigurableParameter> { LeftPortForTrue };
|
ConfigurableParameters = new HashSet<IConfigurableParameter> { LeftPortForTrue };
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
@@ -41,10 +39,8 @@ public partial class SinglePoleDoubleThrowSwitchModule : PiplineModule, IParamet
|
|||||||
ISignalOutPort selectedPort = (LeftPortForTrue!.ParameterValue && DataInPorts[0].GetData.Get!.Bit)
|
ISignalOutPort selectedPort = (LeftPortForTrue!.ParameterValue && DataInPorts[0].GetData.Get!.Bit)
|
||||||
? SignalOutPorts[0]
|
? SignalOutPorts[0]
|
||||||
: SignalOutPorts[1];
|
: SignalOutPorts[1];
|
||||||
if (selectedPort.Connected)
|
|
||||||
selectedPort.Route();
|
selectedPort.Route();
|
||||||
else
|
|
||||||
EnigmosControl.Instance.RootModule.ActionFinished = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ControllingModules;
|
namespace Enigmos.Modules.ControllingModules;
|
||||||
|
|
||||||
public partial class SinglePoleSingleThrowSwitchModule : PiplineModule, ITerminalModule
|
public abstract partial class SinglePoleSingleThrowSwitchModule : PiplineModule, ITerminalModule
|
||||||
{
|
{
|
||||||
public override IEnumerable<IBasePort> Ports =>
|
|
||||||
SignalInPorts.Union(SignalOutPorts.Cast<IBasePort>()).Union(DataInPorts);
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
|
|
||||||
public void Drain()
|
public void Drain()
|
||||||
@@ -19,13 +16,15 @@ public partial class SinglePoleSingleThrowSwitchModule : PiplineModule, ITermina
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataInInit("Input", 1);
|
this.DataInInit("Input", 1);
|
||||||
this.SignalInInit("SignalIn", 1);
|
this.SignalInInit("SignalIn", 1);
|
||||||
this.SignalOutInit("SignalOut", 1);
|
this.SignalOutInit("SignalOut", 1);
|
||||||
DataInPorts[0].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
@@ -15,7 +16,6 @@ public partial class InterlayerDataInModule : SubModule, IInterlayerDataInModule
|
|||||||
}
|
}
|
||||||
public IInterlayerDataOutModule? DualModule { get; set; }
|
public IInterlayerDataOutModule? DualModule { get; set; }
|
||||||
public IDataInPort? DataIn { get; set; }
|
public IDataInPort? DataIn { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { DataIn }!;
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Enigmos.Modules.ComputationalModules;
|
using Enigmos.Modules.SubModules;
|
||||||
using Godot;
|
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
@@ -20,7 +19,7 @@ public partial class InterlayerDataOutModule : SubModule, IComputationalModule,
|
|||||||
public IBasePort UnderlyingPort => DataOut!;
|
public IBasePort UnderlyingPort => DataOut!;
|
||||||
public IInterlayerDataInModule? DualModule { get; set; }
|
public IInterlayerDataInModule? DualModule { get; set; }
|
||||||
public IDataOutPort? DataOut { get; set; }
|
public IDataOutPort? DataOut { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { DataOut }!;
|
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Godot;
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
@@ -8,15 +8,14 @@ namespace Enigmos.Modules.InterlayerModules;
|
|||||||
|
|
||||||
public partial class InterlayerSignalInModule : SubModule, IInterlayerSignalInModule
|
public partial class InterlayerSignalInModule : SubModule, IInterlayerSignalInModule
|
||||||
{
|
{
|
||||||
public new IProgrammableModule? ParentModule
|
public new IProgrammableModule ParentModule
|
||||||
{
|
{
|
||||||
get => base.ParentModule as IProgrammableModule;
|
get => base.ParentModule as IProgrammableModule;
|
||||||
set => base.ParentModule = value;
|
set => base.ParentModule = value;
|
||||||
}
|
}
|
||||||
public IBasePort UnderlyingPort => SignalIn!;
|
public IBasePort UnderlyingPort => SignalIn!;
|
||||||
public IInterlayerSignalOutModule? DualModule { get; set; }
|
public IInterlayerSignalOutModule DualModule { get; set; }
|
||||||
public ISignalInPort? SignalIn { get; set; }
|
public ISignalInPort SignalIn { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { SignalIn }!;
|
|
||||||
public ISignalInPort[] SignalInPorts { get; set; } = Array.Empty<ISignalInPort>();
|
public ISignalInPort[] SignalInPorts { get; set; } = Array.Empty<ISignalInPort>();
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
@@ -15,7 +16,6 @@ public partial class InterlayerSignalOutModule : SubModule, IInterlayerSignalOut
|
|||||||
public IBasePort UnderlyingPort => SignalOut!;
|
public IBasePort UnderlyingPort => SignalOut!;
|
||||||
public IInterlayerSignalInModule? DualModule { get; set; }
|
public IInterlayerSignalInModule? DualModule { get; set; }
|
||||||
public ISignalOutPort? SignalOut { get; set; }
|
public ISignalOutPort? SignalOut { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { SignalOut }!;
|
|
||||||
|
|
||||||
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
public ISignalOutPort[] SignalOutPorts { get; set; } = Array.Empty<ISignalOutPort>();
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
using Enigmos.Modules.ComputationalModules;
|
|
||||||
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;
|
|
||||||
|
|
||||||
namespace Enigmos.Modules.Other;
|
|
||||||
|
|
||||||
public partial class OutputSubModule : NullaryComputationalModule
|
|
||||||
{
|
|
||||||
public override Vector2 PositionToBoard =>
|
|
||||||
base.PositionToBoard + (ParentModule?.PositionToBoard ?? Vector2.Zero);
|
|
||||||
protected override bool Draggable => false;
|
|
||||||
protected override bool HasManual => false;
|
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { DataOut };
|
|
||||||
public IComputationalCompositeModule? ParentModule { get; set; }
|
|
||||||
public IDataOutPort? DataOut { get; set; }
|
|
||||||
|
|
||||||
public override void Define()
|
|
||||||
{
|
|
||||||
//DataOut = ParentModule
|
|
||||||
}
|
|
||||||
|
|
||||||
//protected override void Compute(IRootModule root) => ParentModule.Compute(root);
|
|
||||||
public override void Init()
|
|
||||||
{
|
|
||||||
base.Init();
|
|
||||||
this.DataOutInit("DataOut", 1);
|
|
||||||
DataOut = DataOutPorts[0];
|
|
||||||
DataOut.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
|
||||||
PostInit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Boards;
|
||||||
using Godot;
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.DataStructures;
|
using Nocturnis.DataStructures.Data;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||||
|
|
||||||
public partial class FilterInputProviderModule : SubModule, IComputationalModule
|
public abstract partial class FilterInputProviderModule : SubModule, IComputationalModule
|
||||||
{
|
{
|
||||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||||
public override IEnumerable<IBasePort> Ports => DataOutPorts;
|
|
||||||
public IDataOutPort? Output { get; set; }
|
public IDataOutPort? Output { get; set; }
|
||||||
|
|
||||||
public FilterModuleBoard? ParentBoard { get; set; }
|
public FilterModuleBoard? ParentBoard { get; set; }
|
||||||
@@ -27,9 +26,9 @@ public partial class FilterInputProviderModule : SubModule, IComputationalModule
|
|||||||
|
|
||||||
public void Define()
|
public void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem c)
|
(object, DataType) Func(CacheItem c)
|
||||||
{
|
{
|
||||||
IData w = ParentBoard!.FilterModule!.CachedInputArray[ParentBoard.FilterModule.ProcessingIndex];
|
DataVariable w = ParentBoard!.FilterModule!.CachedInputArray[ParentBoard.FilterModule.ProcessingIndex];
|
||||||
return (w.Data, w.Type)!;
|
return (w.Data, w.Type)!;
|
||||||
}
|
}
|
||||||
Output!.OutData.UpdateCalculation(Func);
|
Output!.OutData.UpdateCalculation(Func);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Boards;
|
||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
using Nocturnis.DataStructures;
|
using Enigmos.Modules.SubModules;
|
||||||
|
using Nocturnis.DataStructures.Data;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
||||||
@@ -12,20 +13,23 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
namespace Enigmos.Modules.ProgrammableModules.FilterModule;
|
||||||
|
|
||||||
public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFilterModule
|
public abstract partial class FilterModule : ProgrammableModule,
|
||||||
|
IPolymorphismModule,
|
||||||
|
IInternalComputationalModule,
|
||||||
|
IEnumerableProcessingModule
|
||||||
{
|
{
|
||||||
public IDataInPort? InputArray { get; set; }
|
public IDataInPort? InputArray { get; set; }
|
||||||
public FilterOutputModule? OutputArrayModule { get; set; }
|
public OutputSubModule? OutputArrayModule { get; set; }
|
||||||
private IInterlayerDataInModule[] ExplicitInputs { get; set; } = Array.Empty<IInterlayerDataInModule>();
|
private IInterlayerDataInModule[] ExplicitInputs { get; set; } = Array.Empty<IInterlayerDataInModule>();
|
||||||
|
|
||||||
private IDataPortGroup[] InterLayerGroups { get; set; } = Array.Empty<IDataPortGroup>();
|
private IDataPortGroup[] InterLayerGroups { get; set; } = Array.Empty<IDataPortGroup>();
|
||||||
private IDataPortGroup? ArrayGroup { get; set; }
|
private IDataPortGroup? ArrayGroup { get; set; }
|
||||||
public IData[] CachedInputArray { get; set; } = Array.Empty<IData>();
|
public DataVariable[] CachedInputArray { get; set; } = Array.Empty<DataVariable>();
|
||||||
public IData[] CachedResult { get; set; } = Array.Empty<IData>();
|
public DataVariable? CachedResult { get; set; }
|
||||||
public bool FilterFinished { get; set; }
|
public bool ComputationFinished { get; set; }
|
||||||
public bool FilterStarted { get; set; }
|
public bool ComputationStarted { get; set; }
|
||||||
|
|
||||||
private List<IData> CachedListResult { get; set; } = new();
|
private List<DataVariable> CachedListResult { get; set; } = new();
|
||||||
public int ProcessingIndex { get; set; }
|
public int ProcessingIndex { get; set; }
|
||||||
|
|
||||||
public new FilterModuleBoard UnderlyingBoard
|
public new FilterModuleBoard UnderlyingBoard
|
||||||
@@ -34,17 +38,13 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
|||||||
set => base.UnderlyingBoard = value;
|
set => base.UnderlyingBoard = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> Ports => new IBasePort[] { InputArray!, OutputArrayModule!.Output! };
|
|
||||||
|
|
||||||
public override IBaseModule[] SubModules => ExplicitInputs;
|
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> ExplicitPorts =>
|
public override IEnumerable<IBasePort> ExplicitPorts =>
|
||||||
new IBasePort[] { InputArray!, OutputArrayModule!.Output! }
|
new IBasePort[] { InputArray!, OutputArrayModule!.Out! }
|
||||||
.Union(ExplicitInputs.Select(c => c.DataIn))!
|
.Union(ExplicitInputs.Select(c => c.DataIn))!
|
||||||
.ToArray<IBasePort>();
|
.ToArray<IBasePort>();
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> ImplicitPorts =>
|
public override IEnumerable<IBasePort> ImplicitPorts =>
|
||||||
new IBasePort[] { OutputArrayModule!.Output!, InputArray! }
|
new IBasePort[] { OutputArrayModule!.Out!, InputArray! }
|
||||||
.Union(UnderlyingBoard.FilterInputProxy.Select(c => c.DataOut))
|
.Union(UnderlyingBoard.FilterInputProxy.Select(c => c.DataOut))
|
||||||
.ToArray()!;
|
.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;
|
CachedInputArray = InputArray!.GetData.Get!.Array;
|
||||||
ProcessingIndex = 0;
|
ProcessingIndex = 0;
|
||||||
CachedListResult = new List<IData>();
|
CachedListResult = new List<DataVariable>();
|
||||||
FilterStarted = true;
|
ComputationStarted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (ProcessingIndex < CachedInputArray.Length)
|
while (ProcessingIndex < CachedInputArray.Length)
|
||||||
@@ -74,9 +74,10 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
|||||||
ProcessingIndex += 1;
|
ProcessingIndex += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CachedResult = CachedListResult.ToArray();
|
CachedResult.Data = CachedListResult.ToArray();
|
||||||
FilterFinished = true;
|
//TODO CachedResult.Type
|
||||||
FilterStarted = false;
|
ComputationFinished = true;
|
||||||
|
ComputationStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -86,18 +87,18 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
|||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
InputArray = this.GetPort<IDataInPort>("InputArray");
|
InputArray = this.GetPort<IDataInPort>("InputArray");
|
||||||
OutputArrayModule = GetModule<FilterOutputModule>("OutputArray");
|
OutputArrayModule = GetModule<OutputSubModule>("OutputArray");
|
||||||
UnderlyingBoard = GlobalProvider.SceneProvider!
|
UnderlyingBoard = GlobalProvider
|
||||||
.AssetMapper<FilterModuleBoard>()
|
.AssetMapper<FilterModuleBoard>.Scene
|
||||||
.Instantiate<FilterModuleBoard>();
|
.Instantiate<FilterModuleBoard>();
|
||||||
ExplicitInputs = new IInterlayerDataInModule[3];
|
ExplicitInputs = new IInterlayerDataInModule[3];
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
ExplicitInputs[i] = GetModule<InterlayerDataInModule>($"EI{i + 1}");
|
ExplicitInputs[i] = GetModule<InterlayerDataInModule>($"EI{i + 1}");
|
||||||
OutputArrayModule.Init(this);
|
OutputArrayModule.Init();
|
||||||
UnderlyingBoard.Init(this);
|
UnderlyingBoard.Init(this);
|
||||||
|
|
||||||
FilterFinished = false;
|
ComputationFinished = false;
|
||||||
FilterStarted = false;
|
ComputationStarted = false;
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
@@ -105,18 +106,18 @@ public partial class FilterModule : ProgrammableModule, IPolymorphismModule, IFi
|
|||||||
this,
|
this,
|
||||||
new IDataPort[] { ExplicitInputs[i].DataIn!, UnderlyingBoard.FilterInputProxy[i].DataOut! },
|
new IDataPort[] { ExplicitInputs[i].DataIn!, UnderlyingBoard.FilterInputProxy[i].DataOut! },
|
||||||
$"Exterior In -> Interior Out{i}",
|
$"Exterior In -> Interior Out{i}",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
ExplicitInputs[i].Board = Board;
|
ExplicitInputs[i].Board = Board;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayGroup = GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
ArrayGroup = GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
||||||
this,
|
this,
|
||||||
new IDataPort[] { InputArray, OutputArrayModule.Output! },
|
new IDataPort[] { InputArray, OutputArrayModule.Out! },
|
||||||
"Array Type",
|
"Array Type",
|
||||||
EnigmosConstant.DataPortTypes.RealArray,
|
DataTypeConstant.AutoDataTypes.AutoArray,
|
||||||
EnigmosConstant.DataPortTypes.AnyArray
|
DataTypeConstant.DataTypeOptions.AnyArray
|
||||||
);
|
);
|
||||||
|
|
||||||
ConfigurablePortGroups = InterLayerGroups.Union(new[] { ArrayGroup }).ToHashSet();
|
ConfigurablePortGroups = InterLayerGroups.Union(new[] { ArrayGroup }).ToHashSet();
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Boards;
|
||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
@@ -9,7 +8,7 @@ using Nocturnis.GlobalManagement.Constants;
|
|||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules.FunctionModule;
|
namespace Enigmos.Modules.ProgrammableModules.FunctionModule;
|
||||||
public partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
public abstract partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
||||||
{
|
{
|
||||||
private IDataPortGroup[] ExteriorToInterior { get; set; } = Array.Empty<IDataPortGroup>();
|
private IDataPortGroup[] ExteriorToInterior { get; set; } = Array.Empty<IDataPortGroup>();
|
||||||
private IDataPortGroup[] InteriorToExterior { get; set; } = Array.Empty<IDataPortGroup>();
|
private IDataPortGroup[] InteriorToExterior { get; set; } = Array.Empty<IDataPortGroup>();
|
||||||
@@ -31,20 +30,11 @@ public partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
|||||||
.Union(UnderlyingBoard.SignalOuts.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 InterlayerDataInModule[] ExplicitDataInModules { get; set; } = Array.Empty<InterlayerDataInModule>();
|
||||||
private InterlayerDataOutModule[] ExplicitDataOutModules { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
private InterlayerDataOutModule[] ExplicitDataOutModules { get; set; } = Array.Empty<InterlayerDataOutModule>();
|
||||||
private InterlayerSignalInModule[] ExplicitSignalInModules { get; set; } = Array.Empty<InterlayerSignalInModule>();
|
private InterlayerSignalInModule[] ExplicitSignalInModules { get; set; } = Array.Empty<InterlayerSignalInModule>();
|
||||||
|
|
||||||
private InterlayerSignalOutModule[] ExplicitSignalOutModules { get; set; } =
|
private InterlayerSignalOutModule[] ExplicitSignalOutModules { get; set; } =
|
||||||
Array.Empty<InterlayerSignalOutModule>();
|
Array.Empty<InterlayerSignalOutModule>();
|
||||||
|
|
||||||
@@ -56,14 +46,28 @@ public partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
|||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
UnderlyingBoard = FunctionModuleBoardScene.Instantiate<FunctionModuleBoard>();
|
UnderlyingBoard = GlobalProvider
|
||||||
|
.AssetMapper<FunctionModuleBoard>.Scene
|
||||||
|
.Instantiate<FunctionModuleBoard>();
|
||||||
UnderlyingBoard.Init();
|
UnderlyingBoard.Init();
|
||||||
ExteriorToInterior = new IDataPortGroup[4];
|
ExteriorToInterior = new IDataPortGroup[4];
|
||||||
InteriorToExterior = new IDataPortGroup[4];
|
InteriorToExterior = new IDataPortGroup[4];
|
||||||
ExplicitDataInModules = new InterlayerDataInModule[4];
|
ExplicitDataInModules = GetChildren()
|
||||||
ExplicitDataOutModules = new InterlayerDataOutModule[4];
|
.OfType<InterlayerDataInModule>()
|
||||||
ExplicitSignalInModules = new InterlayerSignalInModule[4];
|
.OrderBy(x => x.AsNode.Name)
|
||||||
ExplicitSignalOutModules = new InterlayerSignalOutModule[4];
|
.ToArray();
|
||||||
|
ExplicitDataOutModules = GetChildren()
|
||||||
|
.OfType<InterlayerDataOutModule>()
|
||||||
|
.OrderBy(x => x.AsNode.Name)
|
||||||
|
.ToArray();
|
||||||
|
ExplicitSignalInModules = GetChildren()
|
||||||
|
.OfType<InterlayerSignalInModule>()
|
||||||
|
.OrderBy(x => x.AsNode.Name)
|
||||||
|
.ToArray();
|
||||||
|
ExplicitSignalOutModules = GetChildren()
|
||||||
|
.OfType<InterlayerSignalOutModule>()
|
||||||
|
.OrderBy(x => x.AsNode.Name)
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
@@ -91,15 +95,15 @@ public partial class FunctionModule : ProgrammableModule, IPolymorphismModule
|
|||||||
this,
|
this,
|
||||||
new IDataPort[] { ExplicitDataInModules[i].DataIn, UnderlyingBoard.DataOuts[i].DataOut },
|
new IDataPort[] { ExplicitDataInModules[i].DataIn, UnderlyingBoard.DataOuts[i].DataOut },
|
||||||
$"Exterior In -> Interior Out{i + 1}",
|
$"Exterior In -> Interior Out{i + 1}",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
InteriorToExterior[i] = GlobalProvider.DataStructureProvider.NewDataPortGroup(
|
InteriorToExterior[i] = GlobalProvider.DataStructureProvider.NewDataPortGroup(
|
||||||
this,
|
this,
|
||||||
new IDataPort[] { UnderlyingBoard.DataIns[i].DataIn, ExplicitDataOutModules[i].DataOut },
|
new IDataPort[] { UnderlyingBoard.DataIns[i].DataIn, ExplicitDataOutModules[i].DataOut },
|
||||||
$"Interior In -> Exterior Out{i + 1}",
|
$"Interior In -> Exterior Out{i + 1}",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Boards;
|
||||||
using Godot;
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.DataStructures;
|
using Nocturnis.DataStructures.Data;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Skeleton.DataStructure;
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
@@ -11,7 +11,6 @@ namespace Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
|||||||
public partial class OptimizationInputProviderModule : SubModule, IComputationalModule
|
public partial class OptimizationInputProviderModule : SubModule, IComputationalModule
|
||||||
{
|
{
|
||||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||||
public override IEnumerable<IBasePort> Ports => DataOutPorts;
|
|
||||||
public IDataOutPort? Output { get; set; }
|
public IDataOutPort? Output { get; set; }
|
||||||
public OptimizationModuleBoard? ParentBoard { get; set; }
|
public OptimizationModuleBoard? ParentBoard { get; set; }
|
||||||
|
|
||||||
@@ -26,9 +25,9 @@ public partial class OptimizationInputProviderModule : SubModule, IComputational
|
|||||||
|
|
||||||
public void Define()
|
public void Define()
|
||||||
{
|
{
|
||||||
(object, StringName) Func(CacheItem c)
|
(object, DataType) Func(CacheItem c)
|
||||||
{
|
{
|
||||||
IData w = ParentBoard!.OptimizationModule!.CachedInput[ParentBoard.OptimizationModule.ProcessingIndex];
|
DataVariable w = ParentBoard!.OptimizationModule!.CachedInputArray[ParentBoard.OptimizationModule.ProcessingIndex];
|
||||||
return (w.Data, w.Type)!;
|
return (w.Data, w.Type)!;
|
||||||
}
|
}
|
||||||
Output!.OutData.UpdateCalculation(Func);
|
Output!.OutData.UpdateCalculation(Func);
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Boards;
|
||||||
using Enigmos.Modules.InterlayerModules;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
|
using Enigmos.Modules.SubModules;
|
||||||
using Enigmos.Ports.DataPorts;
|
using Enigmos.Ports.DataPorts;
|
||||||
using Godot;
|
|
||||||
using Nocturnis.DataStructures;
|
|
||||||
using Nocturnis.DataStructures.ConfigurableParameters;
|
using Nocturnis.DataStructures.ConfigurableParameters;
|
||||||
|
using Nocturnis.DataStructures.Data;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts;
|
using Nocturnis.Enigmos.Ports.DataPorts;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
@@ -15,24 +15,20 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
namespace Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
||||||
|
|
||||||
public partial class OptimizationModule : ProgrammableModule,
|
public abstract partial class OptimizationModule : ProgrammableModule,
|
||||||
IPolymorphismModule,
|
IPolymorphismModule,
|
||||||
IParameterizedModule,
|
IParameterizedModule,
|
||||||
IOptimizationModule
|
IInternalComputationalModule,
|
||||||
|
IEnumerableProcessingModule
|
||||||
{
|
{
|
||||||
public bool OptimizationFinished { get; set; }
|
public bool ComputationFinished { get; set; }
|
||||||
public bool OptimizationStarted { get; set; }
|
public bool ComputationStarted { get; set; }
|
||||||
private double? CachedOptimizeValue { get; set; }
|
private double? CachedOptimizeValue { get; set; }
|
||||||
public IDataInPort? ArrayInput { get; set; }
|
public IDataInPort? ArrayInput { get; set; }
|
||||||
public IInterlayerDataInModule[] ExplicitOutputs { get; set; } = Array.Empty<IInterlayerDataInModule>();
|
public DataVariable[] CachedInputArray { get; set; } = Array.Empty<DataVariable>();
|
||||||
public IInterlayerDataOutModule[] ImplicitInputs { get; set; } = Array.Empty<IInterlayerDataOutModule>();
|
|
||||||
public IData[] CachedInput { get; set; } = Array.Empty<IData>();
|
|
||||||
public int ProcessingIndex { get; set; }
|
public int ProcessingIndex { get; set; }
|
||||||
private IBoolParameter? UsingMax { get; set; }
|
private IBoolParameter? UsingMax { get; set; }
|
||||||
public IData CachedResult { get; set; } =
|
public DataVariable CachedResult { get; set; } = new ();
|
||||||
GlobalProvider.DataStructureProvider!.NewData(0, EnigmosConstant.DataPortTypes.Null);
|
|
||||||
|
|
||||||
|
|
||||||
public IDataInPort? InternalIterOut { get; set; }
|
public IDataInPort? InternalIterOut { get; set; }
|
||||||
public IDataOutPort? InternalArrayIn { get; set; }
|
public IDataOutPort? InternalArrayIn { get; set; }
|
||||||
|
|
||||||
@@ -41,8 +37,8 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
|
|
||||||
private InterlayerDataInModule[] ExplicitInputs { get; set; } = Array.Empty<InterlayerDataInModule>();
|
private InterlayerDataInModule[] ExplicitInputs { get; set; } = Array.Empty<InterlayerDataInModule>();
|
||||||
private OptimizationSelectorModule? Selector { get; set; }
|
private OptimizationSelectorModule? Selector { get; set; }
|
||||||
private OptimizationOutputModule? Output { get; set; }
|
private OutputSubModule? Output { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { ArrayInput! };
|
|
||||||
|
|
||||||
public new OptimizationModuleBoard UnderlyingBoard
|
public new OptimizationModuleBoard UnderlyingBoard
|
||||||
{
|
{
|
||||||
@@ -54,14 +50,9 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> ExplicitPorts =>
|
public override IEnumerable<IBasePort> ExplicitPorts =>
|
||||||
new IBasePort[] { ArrayInput!, Output!.Output! }
|
new IBasePort[] { ArrayInput!, Output!.Out! }
|
||||||
.Union<IBasePort>(ExplicitInputs.Select(c => c.DataIn)!);
|
.Union<IBasePort>(ExplicitInputs.Select(c => c.DataIn)!);
|
||||||
|
|
||||||
public override BaseModule[] SubModules =>
|
|
||||||
ExplicitInputs
|
|
||||||
.Union(new BaseModule[] { Output! })
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
public override IEnumerable<IBasePort> ImplicitPorts =>
|
public override IEnumerable<IBasePort> ImplicitPorts =>
|
||||||
new IBasePort[] { UnderlyingBoard.InputProvider!.Output!, UnderlyingBoard.Selector!.Selector! }
|
new IBasePort[] { UnderlyingBoard.InputProvider!.Output!, UnderlyingBoard.Selector!.Selector! }
|
||||||
.Union(UnderlyingBoard.ImplicitDataOuts.Select(c => c.DataOut))!;
|
.Union(UnderlyingBoard.ImplicitDataOuts.Select(c => c.DataOut))!;
|
||||||
@@ -69,14 +60,14 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
UnderlyingBoard = GlobalProvider.SceneProvider!
|
UnderlyingBoard = GlobalProvider
|
||||||
.AssetMapper<OptimizationModuleBoard>()
|
.AssetMapper<OptimizationModuleBoard>.Scene
|
||||||
.Instantiate<OptimizationModuleBoard>();
|
.Instantiate<OptimizationModuleBoard>();
|
||||||
UnderlyingBoard.Init();
|
UnderlyingBoard.Init();
|
||||||
InterlayerGroups = new IDataPortGroup[3];
|
InterlayerGroups = new IDataPortGroup[3];
|
||||||
ExplicitInputs = new InterlayerDataInModule[3];
|
ExplicitInputs = new InterlayerDataInModule[3];
|
||||||
InternalIterOut = this.GetPort<IDataInPort>("InternalIterOut");
|
InternalIterOut = this.GetPort<IDataInPort>("InternalIterOut");
|
||||||
Output = GetModule<OptimizationOutputModule>("Output");
|
Output = GetModule<OutputSubModule>("Output");
|
||||||
Output.Init();
|
Output.Init();
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
@@ -85,11 +76,10 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
UnderlyingBoard.ImplicitDataOuts[i].DualModule = ExplicitInputs[i];
|
UnderlyingBoard.ImplicitDataOuts[i].DualModule = ExplicitInputs[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
OptimizationFinished = true;
|
ComputationFinished = true;
|
||||||
CachedInput = Array.Empty<IData>();
|
CachedInputArray = Array.Empty<DataVariable>();
|
||||||
//CachedArray = Array.Empty<DataPackage>();
|
|
||||||
ProcessingIndex = 0;
|
ProcessingIndex = 0;
|
||||||
CachedResult = GlobalProvider.DataStructureProvider!.NullData;
|
CachedResult = new DataVariable();
|
||||||
CachedOptimizeValue = null;
|
CachedOptimizeValue = null;
|
||||||
|
|
||||||
ArrayInput = this.GetPort<DataInPort>("ArrayInput");
|
ArrayInput = this.GetPort<DataInPort>("ArrayInput");
|
||||||
@@ -100,8 +90,8 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
this,
|
this,
|
||||||
new IDataPort[] { ExplicitInputs[i].DataIn!, UnderlyingBoard.ImplicitDataOuts[i].DataOut! },
|
new IDataPort[] { ExplicitInputs[i].DataIn!, UnderlyingBoard.ImplicitDataOuts[i].DataOut! },
|
||||||
$"Exterior In -> Interior Out{i}",
|
$"Exterior In -> Interior Out{i}",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
ExplicitInputs[i].Board = Board;
|
ExplicitInputs[i].Board = Board;
|
||||||
}
|
}
|
||||||
@@ -110,8 +100,8 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
this,
|
this,
|
||||||
new IDataPort[] { ArrayInput },
|
new IDataPort[] { ArrayInput },
|
||||||
"Array Input Type",
|
"Array Input Type",
|
||||||
EnigmosConstant.DataPortTypes.AnyArrayType,
|
DataTypeConstant.AutoDataTypes.AutoArray,
|
||||||
EnigmosConstant.DataPortTypes.AnyArray
|
DataTypeConstant.DataTypeOptions.AnyArray
|
||||||
);
|
);
|
||||||
UsingMax = GlobalProvider.DataStructureProvider.NewBoolParameter(
|
UsingMax = GlobalProvider.DataStructureProvider.NewBoolParameter(
|
||||||
"Method",
|
"Method",
|
||||||
@@ -119,8 +109,8 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
"Min",
|
"Min",
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
Output.Output!.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
Output.Out!.SetDataType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
Selector!.Selector!.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
Selector!.Selector!.SetDataType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
ConfigurableParameters = new HashSet<IConfigurableParameter> { UsingMax };
|
ConfigurableParameters = new HashSet<IConfigurableParameter> { UsingMax };
|
||||||
ConfigurablePortGroups =
|
ConfigurablePortGroups =
|
||||||
InterlayerGroups.Union(new[] { OptimizationGroup }).ToHashSet();
|
InterlayerGroups.Union(new[] { OptimizationGroup }).ToHashSet();
|
||||||
@@ -131,33 +121,33 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
|
|
||||||
public void Inference()
|
public void Inference()
|
||||||
{
|
{
|
||||||
StringName elementType = GlobalProvider.DataPackageTypeProvider!.ToElement(OptimizationGroup!.SelectedType);
|
DataType elementType = GlobalProvider.DataTypeProvider!.ToElement(OptimizationGroup!.SelectedType);
|
||||||
Output!.Output!.SetDataType(elementType);
|
Output!.Out!.SetDataType(elementType);
|
||||||
UnderlyingBoard.InputProvider!.Output!.SetDataType(elementType);
|
UnderlyingBoard.InputProvider!.Output!.SetDataType(elementType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SoftReset() => UnderlyingBoard.Reset();
|
private void SoftReset() => UnderlyingBoard.Reset();
|
||||||
|
|
||||||
public void Optimize()
|
public void Compute()
|
||||||
{
|
{
|
||||||
if (OptimizationFinished)
|
if (ComputationFinished)
|
||||||
{
|
{
|
||||||
CachedOptimizeValue = null;
|
CachedOptimizeValue = null;
|
||||||
CachedInput = InternalArrayIn!.OutData.Get!.Array;
|
CachedInputArray = InternalArrayIn!.OutData.Get!.Array;
|
||||||
CachedResult = GlobalProvider.DataStructureProvider!.NewData(0, EnigmosConstant.DataPortTypes.Null);
|
CachedResult = new();
|
||||||
ProcessingIndex = 0;
|
ProcessingIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (ProcessingIndex < CachedInput.Length)
|
while (ProcessingIndex < CachedInputArray.Length)
|
||||||
{
|
{
|
||||||
SoftReset();
|
SoftReset();
|
||||||
UnderlyingBoard.InputProvider!.Output!.OutData.UpdateCalculation(
|
UnderlyingBoard.InputProvider!.Output!.OutData.UpdateCalculation(
|
||||||
cache =>
|
cache =>
|
||||||
(CachedInput[ProcessingIndex].Data, CachedInput[ProcessingIndex].Type)!
|
(CachedInputArray[ProcessingIndex].Data, CachedInputArray[ProcessingIndex].Type)!
|
||||||
);
|
);
|
||||||
UnderlyingBoard.InputProvider.Output.OutData.Expire();
|
UnderlyingBoard.InputProvider.Output.OutData.Expire();
|
||||||
double currentValue = UnderlyingBoard.Selector!.Selector!.GetData.Get!.Double;
|
double currentValue = UnderlyingBoard.Selector!.Selector!.GetData.Get!.Real;
|
||||||
IData currentOut = InternalIterOut!.GetData.Get!;
|
DataVariable currentOut = InternalIterOut!.GetData.Get!;
|
||||||
if (UsingMax!.ParameterValue)
|
if (UsingMax!.ParameterValue)
|
||||||
{
|
{
|
||||||
if (CachedOptimizeValue == null || (CachedOptimizeValue < currentValue))
|
if (CachedOptimizeValue == null || (CachedOptimizeValue < currentValue))
|
||||||
@@ -178,9 +168,7 @@ public partial class OptimizationModule : ProgrammableModule,
|
|||||||
|
|
||||||
}
|
}
|
||||||
Output!.Define();
|
Output!.Define();
|
||||||
OptimizationFinished = true;
|
ComputationFinished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Calculated { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
|
||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules.OptimizationModule;
|
|
||||||
|
|
||||||
public partial class OptimizationOutputModule : SubModule, IComputationalModule
|
|
||||||
{
|
|
||||||
public IDataOutPort? Output { get; set; }
|
|
||||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
|
||||||
public override IEnumerable<IBasePort> Ports => DataOutPorts;
|
|
||||||
|
|
||||||
public override void Init()
|
|
||||||
{
|
|
||||||
this.DataOutInit("DataOut", 1);
|
|
||||||
Output = DataOutPorts[0];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Define()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Enigmos.Modules.SubModules;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
using Enigmos.Boards;
|
using Enigmos.Modules.InterlayerModules;
|
||||||
|
using Nocturnis;
|
||||||
|
using Nocturnis.Enigmos.Boards;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.InterlayerModules;
|
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
using Nocturnis.Godot;
|
||||||
|
|
||||||
namespace Enigmos.Modules.ProgrammableModules;
|
namespace Enigmos.Modules.ProgrammableModules;
|
||||||
|
|
||||||
public abstract partial class ProgrammableModule : BaseModule, ICompositeModule, IProgrammableModule
|
public abstract partial class ProgrammableModule : CompositeModule, IProgrammableModule
|
||||||
{
|
{
|
||||||
public BaseBoard? UnderlyingBoard { get; set; }
|
public IBaseBoard UnderlyingBoard { get; set; }
|
||||||
public abstract IBaseModule[] SubModules { get; }
|
public void EnterProgrammableBoard() => GlobalProvider.SceneProvider!.RootScene.ChangeScene(UnderlyingBoard.AsNode());
|
||||||
public void EnterProgrammableBoard() => GlobalProvider.SceneProvider!.RootScene.ChangeScene(UnderlyingBoard!);
|
|
||||||
public abstract IEnumerable<IBasePort> ExplicitPorts { get; }
|
public abstract IEnumerable<IBasePort> ExplicitPorts { get; }
|
||||||
public abstract IEnumerable<IBasePort> ImplicitPorts { get; }
|
public abstract IEnumerable<IBasePort> ImplicitPorts { get; }
|
||||||
public override void UpdateCables()
|
public override void UpdateCables()
|
||||||
@@ -24,12 +25,18 @@ public abstract partial class ProgrammableModule : BaseModule, ICompositeModule,
|
|||||||
base.UpdateCables();
|
base.UpdateCables();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected T GetModule<T>(string path) where T : SubModule
|
public override void Init()
|
||||||
{
|
{
|
||||||
T res = GetNode<T>(path);
|
base.Init();
|
||||||
res.Init();
|
InterlayerDataInModule[] explicitDataInModules = GetModules<InterlayerDataInModule>();
|
||||||
res.ParentModule = this;
|
InterlayerDataOutModule[] explicitDataOutModules = GetModules<InterlayerDataOutModule>();
|
||||||
res.Board = Board;
|
InterlayerSignalInModule[] explicitSignalInModules = GetModules<InterlayerSignalInModule>();
|
||||||
return res;
|
InterlayerSignalOutModule[] explicitSignalOutModules = GetModules<InterlayerSignalOutModule>();
|
||||||
|
|
||||||
|
for (int i = 0; i <= explicitDataInModules.Length; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
32
Modules/SubModules/EnumerableArrayInputModule.cs
Normal file
32
Modules/SubModules/EnumerableArrayInputModule.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
|
namespace Enigmos.Modules.SubModules;
|
||||||
|
|
||||||
|
public partial class EnumerableArrayInputModule : SubModule, ITerminalModule
|
||||||
|
{
|
||||||
|
public new IEnumerableProcessingModule ParentModule
|
||||||
|
{
|
||||||
|
get => (base.ParentModule as IEnumerableProcessingModule)!;
|
||||||
|
set => base.ParentModule = value;
|
||||||
|
}
|
||||||
|
public IDataInPort? Input { get; set; }
|
||||||
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
|
public void Init(IEnumerableProcessingModule module)
|
||||||
|
{
|
||||||
|
base.Init();
|
||||||
|
this.DataInInit("Input", 1);
|
||||||
|
Input = DataInPorts[0];
|
||||||
|
ParentModule = module;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Drain()
|
||||||
|
{
|
||||||
|
if(Finished)
|
||||||
|
return;
|
||||||
|
ParentModule.CachedInputArray = Input!.GetData.Get!.Array;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
9
Modules/SubModules/EnumerableElementOutputModule.cs
Normal file
9
Modules/SubModules/EnumerableElementOutputModule.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
|
||||||
|
namespace Enigmos.Modules.SubModules;
|
||||||
|
|
||||||
|
public partial class EnumerableElementOutputModule : SubModule
|
||||||
|
{
|
||||||
|
private IDataOutPort? Output { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
35
Modules/SubModules/OutputSubModule.cs
Normal file
35
Modules/SubModules/OutputSubModule.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
using Skeleton.DataStructure;
|
||||||
|
|
||||||
|
namespace Enigmos.Modules.SubModules;
|
||||||
|
|
||||||
|
public partial class OutputSubModule : SubModule, ISourceModule
|
||||||
|
{
|
||||||
|
public IDataOutPort? Out { get; set; }
|
||||||
|
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||||
|
|
||||||
|
public new IInternalComputationalModule? ParentModule
|
||||||
|
{
|
||||||
|
get => base.ParentModule as IInternalComputationalModule;
|
||||||
|
set => base.ParentModule = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Init()
|
||||||
|
{
|
||||||
|
base.Init();
|
||||||
|
Out = this.GetPort<IDataOutPort>("Out");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Define()
|
||||||
|
{
|
||||||
|
(object, DataType) Func(CacheItem c)
|
||||||
|
{
|
||||||
|
if (!ParentModule!.ComputationFinished)
|
||||||
|
ParentModule!.Compute();
|
||||||
|
return (ParentModule!.CachedResult.Data, ParentModule!.CachedResult.Type)!;
|
||||||
|
}
|
||||||
|
Out!.OutData.UpdateCalculation(Func);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
|
|
||||||
namespace Enigmos.Modules;
|
namespace Enigmos.Modules.SubModules;
|
||||||
|
|
||||||
public class SubModule : BaseModule
|
public partial class SubModule : BaseModule
|
||||||
{
|
{
|
||||||
public IBaseModule? ParentModule { get; set; }
|
public ICompositeModule ParentModule { get; set; }
|
||||||
public sealed override Vector2 PositionToBoard =>
|
public sealed override Vector2 PositionToBoard =>
|
||||||
base.PositionToBoard + (ParentModule?.PositionToBoard ?? Vector2.Zero);
|
base.PositionToBoard + (ParentModule?.PositionToBoard ?? Vector2.Zero);
|
||||||
protected sealed override bool Draggable => false;
|
protected sealed override bool Draggable => false;
|
||||||
protected sealed override bool HasManual => false;
|
protected sealed override bool HasManual => false;
|
||||||
|
public override Texture2D PreviewTexture => null;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using Enigmos.Ports.DataPorts;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Controls;
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
using Nocturnis.Inventories.ItemSlots.ItemSlots;
|
using Nocturnis.Inventories.ItemSlots.ItemSlots;
|
||||||
@@ -7,19 +8,21 @@ using Skeleton.Utils.Helpers;
|
|||||||
using VirtualChemistry.Chemistry.Mixtures.Implements;
|
using VirtualChemistry.Chemistry.Mixtures.Implements;
|
||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules;
|
namespace Enigmos.Modules.TerminalModules;
|
||||||
public partial class EngineModule : TerminalModule
|
public abstract partial class EngineModule : TerminalModule, IEngineModule
|
||||||
{
|
{
|
||||||
protected override bool Draggable => false;
|
protected override bool Draggable => false;
|
||||||
public DataInPort? Throttle { get; set; }
|
public IDataInPort Throttle { get; set; }
|
||||||
public IChemicalItemSlot? FuelTank { get; set; }
|
public IChemicalItemSlot FuelTank { get; set; }
|
||||||
private double MaxPumpSpeed => 2d;
|
private double MaxPumpSpeed => 2d;
|
||||||
private double EnergyConversionEfficiency => 0.5d;
|
private double EnergyConversionEfficiency => 0.5d;
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { Throttle! };
|
public override IEnumerable<IBasePort> Ports => new[] { Throttle };
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
Throttle!.SetDataType(EnigmosConstant.DataPortTypes.Real);
|
this.DataInInit("Throttle", 1);
|
||||||
|
Throttle = DataInPorts[0];
|
||||||
|
Throttle.SetDataType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
FuelTank = GetNode<IChemicalItemSlot>("FuelTank");
|
FuelTank = GetNode<IChemicalItemSlot>("FuelTank");
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
@@ -27,13 +30,13 @@ public partial class EngineModule : TerminalModule
|
|||||||
public override void Drain()
|
public override void Drain()
|
||||||
{
|
{
|
||||||
base.Drain();
|
base.Drain();
|
||||||
if (FuelTank!.Item!.ContentMaterial.Layers.Count == 0)
|
if (FuelTank.Item == null || FuelTank.Item.ContentMaterial.Layers.Count == 0)
|
||||||
{
|
{
|
||||||
EnigmosControl.Instance.Energy = 0;
|
EnigmosControl.Instance.Energy = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HomogeneousMixture bottom = FuelTank.Item.ContentMaterial.LayerOrder.Last.Value;
|
HomogeneousMixture bottom = FuelTank.Item.ContentMaterial.LayerOrder.Last.Value;
|
||||||
double consumption = Math.Min(bottom.Amount, Throttle!.GetData.Get!.Double.DoubleCut() * bottom.CombustRate);
|
double consumption = Math.Min(bottom.Amount, Throttle!.GetData.Get!.Real.DoubleCut() * bottom.CombustRate);
|
||||||
EnigmosControl.Instance.Energy = consumption * bottom.Energy;
|
EnigmosControl.Instance.Energy = consumption * bottom.Energy;
|
||||||
bottom.Amount -= consumption;
|
bottom.Amount -= consumption;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using Nocturnis.DataStructures;
|
using Nocturnis.DataStructures.Data;
|
||||||
using Nocturnis.DataStructures.DataPortGroups;
|
using Nocturnis.DataStructures.DataPortGroups;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts;
|
using Nocturnis.Enigmos.Ports.DataPorts;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
@@ -10,31 +9,34 @@ using Nocturnis.GlobalManagement.Providers;
|
|||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules;
|
namespace Enigmos.Modules.TerminalModules;
|
||||||
|
|
||||||
public partial class MemoryModule : BaseModule, ITerminalModule, ISourceModule, IDuplicateOutputModule
|
public abstract partial class MemoryModule : BaseModule,
|
||||||
|
ITerminalModule,
|
||||||
|
ISourceModule,
|
||||||
|
IDuplicateOutputModule,
|
||||||
|
IPolymorphismModule
|
||||||
{
|
{
|
||||||
private IData? Memory { get; set; }
|
private DataVariable? Memory { get; set; }
|
||||||
private IDataPortGroup? MemoryPortGroup { get; set; }
|
private IDataPortGroup? MemoryPortGroup { get; set; }
|
||||||
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
public HashSet<IDataPortGroup> ConfigurablePortGroups { get; set; } = new();
|
||||||
|
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts.Union<IBasePort>(DataOutPorts);
|
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
Memory = GlobalProvider.DataStructureProvider!.NewData(0, EnigmosConstant.DataPortTypes.Null);
|
Memory = new DataVariable();
|
||||||
this.DataInInit("Input", 3);
|
this.DataInInit("Input", 3);
|
||||||
this.DataOutInit("Output", 4);
|
this.DataOutInit("Output", 4);
|
||||||
DataInPorts[1].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[1].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
DataInPorts[2].SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
DataInPorts[2].SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
|
|
||||||
MemoryPortGroup =GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
MemoryPortGroup =GlobalProvider.DataStructureProvider!.NewDataPortGroup(
|
||||||
this,
|
this,
|
||||||
new IDataPort[] { DataInPorts[0] }.Union(DataOutPorts).ToArray(),
|
new IDataPort[] { DataInPorts[0] }.Union(DataOutPorts).ToArray(),
|
||||||
"Memory Data Type:",
|
"Memory Data Type:",
|
||||||
EnigmosConstant.DataPortTypes.Real,
|
DataTypeConstant.BaseDataTypes.Real,
|
||||||
EnigmosConstant.DataPortTypes.AnyType
|
DataTypeConstant.DataTypeOptions.AnyType
|
||||||
);
|
);
|
||||||
ConfigurablePortGroups = new HashSet<IDataPortGroup> { MemoryPortGroup };
|
ConfigurablePortGroups = new HashSet<IDataPortGroup> { MemoryPortGroup };
|
||||||
PostInit();
|
PostInit();
|
||||||
@@ -67,4 +69,5 @@ public partial class MemoryModule : BaseModule, ITerminalModule, ISourceModule,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
}
|
}
|
||||||
@@ -1,20 +1,18 @@
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules;
|
namespace Enigmos.Modules.TerminalModules;
|
||||||
|
|
||||||
public partial class SRLatchModule : BaseModule,
|
public abstract partial class SRLatchModule : BaseModule,
|
||||||
ITerminalModule,
|
ITerminalModule,
|
||||||
ISourceModule,
|
ISourceModule,
|
||||||
IDuplicateOutputModule,
|
IDuplicateOutputModule,
|
||||||
IOperationModule
|
IOperationModule
|
||||||
{
|
{
|
||||||
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>();
|
public IDataOutPort[] DataOutPorts { get; set; }
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts.Union<IBasePort>(DataOutPorts);
|
|
||||||
|
|
||||||
private bool State { get; set; }
|
private bool State { get; set; }
|
||||||
|
|
||||||
@@ -29,18 +27,21 @@ public partial class SRLatchModule : BaseModule,
|
|||||||
else if (reset)
|
else if (reset)
|
||||||
State = false;
|
State = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataInInit("Input",2);
|
this.DataInInit("Input",2);
|
||||||
this.DataOutInit("Output", 2);
|
this.DataOutInit("Output", 2);
|
||||||
this.SetOutputType(EnigmosConstant.DataPortTypes.Bit);
|
this.SetOutputType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Bit);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Define()
|
public void Define()
|
||||||
{
|
{
|
||||||
this.Define(cache => (State, EnigmosConstant.DataPortTypes.Bit));
|
this.Define(cache => (State, DataTypeConstant.BaseDataTypes.Bit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,33 @@
|
|||||||
using Enigmos.Modules.ControllingModules;
|
|
||||||
using Enigmos.Ports.DataPorts;
|
using Enigmos.Ports.DataPorts;
|
||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
||||||
|
|
||||||
public partial class LightEmittingDiodeModule : TerminalModule
|
public abstract partial class LightEmittingDiodeModule : TerminalModule
|
||||||
{
|
{
|
||||||
private Sprite2D? LightEmittingDiode { get; set; }
|
private Sprite2D LightEmittingDiode { get; set; }
|
||||||
private IDataInPort? Input { get; set; }
|
private IDataInPort Input { get; set; }
|
||||||
public override IEnumerable<IBasePort> Ports => new[] { Input! };
|
|
||||||
|
|
||||||
private static readonly Texture2D TrueTexture =
|
|
||||||
ResourceLoader.Load<Texture2D>("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-T.png");
|
|
||||||
private static readonly Texture2D FalseTexture =
|
|
||||||
ResourceLoader.Load<Texture2D>("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-F.png");
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
Finished = true;
|
Finished = true;
|
||||||
LightEmittingDiode = GetNode<Sprite2D>("LightEmittingDiode");
|
LightEmittingDiode = GetNode<Sprite2D>("LightEmittingDiode");
|
||||||
Input = this.GetPort<DataInPort>("Input");
|
Input = this.GetPort<DataInPort>("Input");
|
||||||
Input.SetDataType(EnigmosConstant.DataPortTypes.Bit);
|
Input.SetDataType(DataTypeConstant.BaseDataTypes.Bit);
|
||||||
PostInit();
|
PostInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Drain()
|
public override void Drain()
|
||||||
{
|
{
|
||||||
if (Input!.GetData.Get!.Bit)
|
if (Input.GetData.Get.Bit)
|
||||||
LightEmittingDiode!.Texture = TrueTexture;
|
LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOn;
|
||||||
else
|
else
|
||||||
LightEmittingDiode!.Texture = FalseTexture;
|
LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOff;
|
||||||
Finished = true;
|
Finished = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,11 +6,11 @@ namespace Enigmos.Modules.TerminalModules.TestingModules;
|
|||||||
|
|
||||||
public partial class R2Reader : Control
|
public partial class R2Reader : Control
|
||||||
{
|
{
|
||||||
private AnimatedSprite2D? Direction { get; set; }
|
private AnimatedSprite2D Direction { get; set; }
|
||||||
private AnimatedSprite2D? Magnitude { get; set; }
|
private AnimatedSprite2D Magnitude { get; set; }
|
||||||
public R2? UnderlyingVector { get; set; }
|
public R2 UnderlyingVector { get; set; }
|
||||||
private double TargetPhase() => Math.Atan2(UnderlyingVector![2], UnderlyingVector![1]);
|
private double TargetPhase() => UnderlyingVector == null ? 0: Math.Atan2(UnderlyingVector![2], UnderlyingVector![1]);
|
||||||
private double TargetLength() => UnderlyingVector!.Magnitude;
|
private double TargetLength() => UnderlyingVector?.Magnitude ?? 0;
|
||||||
|
|
||||||
private int TargetPhaseFrame =>
|
private int TargetPhaseFrame =>
|
||||||
Mathf.FloorToInt((TargetPhase() % (2d * Math.PI) + 2d * Math.PI) % (2d * Math.PI) * 44d / (2d * Math.PI));
|
Mathf.FloorToInt((TargetPhase() % (2d * Math.PI) + 2d * Math.PI) % (2d * Math.PI) * 44d / (2d * Math.PI));
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
using Enigmos.Modules.ControllingModules;
|
|
||||||
using Enigmos.Ports;
|
|
||||||
using Enigmos.Ports.DataPorts;
|
using Enigmos.Ports.DataPorts;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
||||||
|
|
||||||
public partial class R2ReaderModule : TerminalModule
|
public abstract partial class R2ReaderModule : TerminalModule
|
||||||
{
|
{
|
||||||
private DataInPort? DataIn { get; set; }
|
private DataInPort DataIn { get; set; }
|
||||||
private R2Reader? R2Reader { get; set; }
|
private R2Reader R2Reader { get; set; }
|
||||||
|
|
||||||
public override IEnumerable<BasePort> Ports => new[] { DataIn! };
|
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
DataIn = this.GetPort<DataInPort>("DataIn");
|
DataIn = this.GetPort<DataInPort>("DataIn");
|
||||||
DataIn.SetDataType(EnigmosConstant.DataPortTypes.R2);
|
DataIn.SetDataType(DataTypeConstant.BaseDataTypes.R2);
|
||||||
R2Reader = GetNode<R2Reader>("R2Reader");
|
R2Reader = GetNode<R2Reader>("R2Reader");
|
||||||
R2Reader.Init();
|
R2Reader.Init();
|
||||||
PostInit();
|
PostInit();
|
||||||
|
|||||||
@@ -1,24 +1,22 @@
|
|||||||
using Godot;
|
using Godot;
|
||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
using Nocturnis.GlobalManagement.Constants;
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Skeleton.Utils.Helpers;
|
using Skeleton.Utils.Helpers;
|
||||||
|
|
||||||
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
namespace Enigmos.Modules.TerminalModules.TestingModules;
|
||||||
|
|
||||||
public partial class RealReaderModule : BaseModule, ITerminalModule, IOperationModule
|
public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IOperationModule
|
||||||
{
|
{
|
||||||
private AnimatedSprite2D? RealReader { get; set; }
|
private AnimatedSprite2D RealReader { get; set; }
|
||||||
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
|
||||||
public override IEnumerable<IBasePort> Ports => DataInPorts;
|
|
||||||
|
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
this.DataInInit("Input", 3);
|
this.DataInInit("Input", 3);
|
||||||
this.SetInputType(EnigmosConstant.DataPortTypes.Real);
|
this.SetInputType(DataTypeConstant.BaseDataTypes.Real);
|
||||||
RealReader = GetNode<AnimatedSprite2D>("RealReader");
|
RealReader = GetNode<AnimatedSprite2D>("RealReader");
|
||||||
RealReader.SpeedScale = 0;
|
RealReader.SpeedScale = 0;
|
||||||
RealReader.Play();
|
RealReader.Play();
|
||||||
@@ -27,12 +25,14 @@ public partial class RealReaderModule : BaseModule, ITerminalModule, IOperationM
|
|||||||
|
|
||||||
public void Drain()
|
public void Drain()
|
||||||
{
|
{
|
||||||
double max = DataInPorts[0].GetData.Get!.Double;
|
double max = DataInPorts[0].GetData.Get!.Real;
|
||||||
double min = DataInPorts[2].GetData.Get!.Double;
|
double min = DataInPorts[2].GetData.Get!.Real;
|
||||||
double value = DataInPorts[1].GetData.Get!.Double;
|
double value = DataInPorts[1].GetData.Get!.Real;
|
||||||
double range = max - min;
|
double range = max - min;
|
||||||
double percentage = (range == 0 ? 0d : value / range).DoubleCut();
|
double percentage = (range == 0 ? 0d : (value - min) / range).DoubleCut();
|
||||||
int frame = Mathf.FloorToInt(percentage * 122);
|
int frame = Mathf.FloorToInt(percentage * 122);
|
||||||
RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f;
|
RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Finished { get; set; }
|
||||||
}
|
}
|
||||||
@@ -17,13 +17,18 @@ public abstract partial class BasePort : TextureButton, IBasePort
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int Quality { get; set; }
|
public int Quality { get; set; }
|
||||||
|
|
||||||
public IBaseModule? Module { get; set; }
|
public IBaseModule Module { get; set; }
|
||||||
public abstract bool IsMatch(IBasePort oth);
|
public abstract bool IsMatch(IBasePort oth);
|
||||||
public IBasePort? ConnectedPort { get; set; }
|
public IBasePort ConnectedPort { get; set; }
|
||||||
public bool Connected => ConnectedPort != null;
|
public bool Connected => ConnectedPort != null;
|
||||||
|
|
||||||
public abstract void SetStatusPending();
|
public abstract void SetStatusPending();
|
||||||
public abstract void SetStatusConnected();
|
|
||||||
|
public virtual void SetStatusConnected()
|
||||||
|
{
|
||||||
|
PostConnect();
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void SetStatusNormal();
|
public abstract void SetStatusNormal();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determine whether this port can be connected with given port
|
/// Determine whether this port can be connected with given port
|
||||||
@@ -33,5 +38,9 @@ public abstract partial class BasePort : TextureButton, IBasePort
|
|||||||
public virtual void Init()
|
public virtual void Init()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
public void Connect() => this.ExtConnect();
|
||||||
|
|
||||||
|
public virtual void PostConnect()
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ public partial class DataInPort : DataPort, IDataInPort
|
|||||||
|
|
||||||
public override bool IsMatch(IBasePort other) =>
|
public override bool IsMatch(IBasePort other) =>
|
||||||
other is DataOutPort dataOut &&
|
other is DataOutPort dataOut &&
|
||||||
GlobalProvider.DataPackageTypeProvider!.DataPortTypeCompatible(DataType!, dataOut.DataType!);
|
GlobalProvider.DataTypeProvider!.DataPortTypeCompatible(DataType!, dataOut.DataType!);
|
||||||
|
|
||||||
public DataCache GetData => Connected ? ConnectedPort!.OutData : DataCache.Null;
|
public DataCache GetData => Connected ? ConnectedPort!.OutData : DefaultDataCache.Default;
|
||||||
|
|
||||||
/*public IDataPackage GetData(IRootModule root)
|
/*public IDataPackage GetData(IRootModule root)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,11 +3,12 @@ using Nocturnis.Enigmos.Cables;
|
|||||||
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
using Nocturnis.Enigmos.Modules.ComputationalModules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
using Nocturnis.Enigmos.Ports.DataPorts.Directions;
|
||||||
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Ports.DataPorts;
|
namespace Enigmos.Ports.DataPorts;
|
||||||
|
|
||||||
public partial class DataOutPort : DataPort, IDataOutPort
|
public abstract partial class DataOutPort : DataPort, IDataOutPort
|
||||||
{
|
{
|
||||||
public new IComputationalModule Module
|
public new IComputationalModule Module
|
||||||
{
|
{
|
||||||
@@ -18,15 +19,15 @@ public partial class DataOutPort : DataPort, IDataOutPort
|
|||||||
//public void DataUpdateRequest(IRootModule root) => Module.ComputeWithTimeoutHandle(root);
|
//public void DataUpdateRequest(IRootModule root) => Module.ComputeWithTimeoutHandle(root);
|
||||||
|
|
||||||
|
|
||||||
public new IDataInPort? ConnectedPort
|
public new IDataInPort ConnectedPort
|
||||||
{
|
{
|
||||||
get => (base.ConnectedPort as IDataInPort)!;
|
get => base.ConnectedPort as IDataInPort;
|
||||||
set => base.ConnectedPort = value;
|
set => base.ConnectedPort = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool IsMatch(IBasePort other) =>
|
public override bool IsMatch(IBasePort other) =>
|
||||||
other is DataInPort inPort &&
|
other is DataInPort inPort &&
|
||||||
GlobalProvider.DataPackageTypeProvider!.DataPortTypeCompatible(inPort.DataType!, DataType!);
|
GlobalProvider.DataTypeProvider!.DataPortTypeCompatible(inPort.DataType!, DataType!);
|
||||||
|
|
||||||
public override IBaseCable MakeCable(IBasePort other)
|
public override IBaseCable MakeCable(IBasePort other)
|
||||||
{
|
{
|
||||||
@@ -36,5 +37,9 @@ public partial class DataOutPort : DataPort, IDataOutPort
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataCache OutData { get; set; } = new(x => (0, ""));
|
public DataCache OutData { get; set; } = new(x => (0, DataTypeConstant.BaseDataTypes.Null));
|
||||||
|
public override void PostConnect()
|
||||||
|
{
|
||||||
|
Module.Define();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,35 @@
|
|||||||
using Enigmos.Cables;
|
using Enigmos.Cables;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Nocturnis.DataStructures.DataTypes;
|
||||||
using Nocturnis.Enigmos.Cables;
|
using Nocturnis.Enigmos.Cables;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.Enigmos.Ports.DataPorts;
|
using Nocturnis.Enigmos.Ports.DataPorts;
|
||||||
|
using Nocturnis.GlobalManagement.Constants;
|
||||||
using Nocturnis.GlobalManagement.Providers;
|
using Nocturnis.GlobalManagement.Providers;
|
||||||
|
|
||||||
namespace Enigmos.Ports.DataPorts;
|
namespace Enigmos.Ports.DataPorts;
|
||||||
|
|
||||||
public abstract partial class DataPort : BasePort, IDataPort
|
public abstract partial class DataPort : BasePort, IDataPort
|
||||||
{
|
{
|
||||||
public new IDataPort? ConnectedPort
|
public new IDataPort ConnectedPort
|
||||||
{
|
{
|
||||||
get => (base.ConnectedPort as IDataPort)!;
|
get => (base.ConnectedPort as IDataPort)!;
|
||||||
set => base.ConnectedPort = value;
|
set => base.ConnectedPort = value;
|
||||||
}
|
}
|
||||||
protected Sprite2D? DataTypeTexture { get; set; }
|
protected Sprite2D DataTypeTexture { get; set; }
|
||||||
public StringName? DataType { get; set; }
|
public DataType DataType { get; set; } = new(DataTypeConstant.BaseDataTypeNames.Null);
|
||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
DataTypeTexture = GetNode<Sprite2D>("DataTypeTexture");
|
DataTypeTexture = GetNode<Sprite2D>("DataTypeTexture");
|
||||||
DataTypeTexture.Visible = false;
|
DataTypeTexture.Visible = false;
|
||||||
base.Init();
|
base.Init();
|
||||||
}
|
}
|
||||||
public void SetDataType(StringName val)
|
public void SetDataType(DataType val)
|
||||||
{
|
{
|
||||||
if(Connected && val != ConnectedPort!.DataType)
|
if(Connected && val != ConnectedPort!.DataType)
|
||||||
this.Disconnect();
|
this.Disconnect();
|
||||||
DataType = val;
|
DataType = val;
|
||||||
DataTypeTexture!.Texture = GlobalProvider.EnigmosProvider!.DataPortTypeMap[val];
|
DataTypeTexture!.Texture = GlobalProvider.DataTypeTexture[DataType.Type];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MouseEnterHandler() => DataTypeTexture!.Visible = true;
|
private void MouseEnterHandler() => DataTypeTexture!.Visible = true;
|
||||||
@@ -46,8 +48,10 @@ public abstract partial class DataPort : BasePort, IDataPort
|
|||||||
public override void SetStatusPending() =>
|
public override void SetStatusPending() =>
|
||||||
TextureNormal = GlobalProvider.EnigmosProvider!.DataPortStatusPending;
|
TextureNormal = GlobalProvider.EnigmosProvider!.DataPortStatusPending;
|
||||||
|
|
||||||
public override void SetStatusConnected() =>
|
public override void SetStatusConnected()
|
||||||
|
{
|
||||||
|
base.SetStatusConnected();
|
||||||
TextureNormal = GlobalProvider.EnigmosProvider!.DataPortStatusConnected;
|
TextureNormal = GlobalProvider.EnigmosProvider!.DataPortStatusConnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ public partial class SignalInPort : SignalPort, ISignalInPort
|
|||||||
{
|
{
|
||||||
public new IControllingModule Module
|
public new IControllingModule Module
|
||||||
{
|
{
|
||||||
get => (base.Module as PiplineModule)!;
|
get => (base.Module as IControllingModule)!;
|
||||||
set => base.Module = value;
|
set => base.Module = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public new ISignalOutPort? ConnectedPort
|
public new ISignalOutPort ConnectedPort
|
||||||
{
|
{
|
||||||
get => base.ConnectedPort as ISignalOutPort;
|
get => base.ConnectedPort as ISignalOutPort;
|
||||||
set => base.ConnectedPort = value;
|
set => base.ConnectedPort = value;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Enigmos.Cables;
|
|||||||
using Nocturnis.Enigmos.Modules;
|
using Nocturnis.Enigmos.Modules;
|
||||||
using Nocturnis.Enigmos.Ports;
|
using Nocturnis.Enigmos.Ports;
|
||||||
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
using Nocturnis.Enigmos.Ports.SignalPorts.Directions;
|
||||||
|
using Nocturnis.GlobalManagement.Controls;
|
||||||
|
|
||||||
namespace Enigmos.Ports.SignalPorts;
|
namespace Enigmos.Ports.SignalPorts;
|
||||||
|
|
||||||
@@ -14,7 +15,7 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public new ISignalInPort? ConnectedPort
|
public new ISignalInPort ConnectedPort
|
||||||
{
|
{
|
||||||
get => base.ConnectedPort as ISignalInPort;
|
get => base.ConnectedPort as ISignalInPort;
|
||||||
set => base.ConnectedPort = value;
|
set => base.ConnectedPort = value;
|
||||||
@@ -33,8 +34,11 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort
|
|||||||
public void Route()
|
public void Route()
|
||||||
{
|
{
|
||||||
if (!Connected)
|
if (!Connected)
|
||||||
|
{
|
||||||
|
CreatureControl.Instance.CurrentCharacter!.MotherBoard.Root.ActionFinished = true;
|
||||||
return;
|
return;
|
||||||
ConnectedPort!.Module.Execute();
|
}
|
||||||
|
ConnectedPort.Module.Visit();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ public abstract partial class SignalPort : BasePort, ISignalPort
|
|||||||
private void MouseEnteredHandler() => SignalDirection!.Visible = true;
|
private void MouseEnteredHandler() => SignalDirection!.Visible = true;
|
||||||
private void MouseExitedHandler() => SignalDirection!.Visible = false;
|
private void MouseExitedHandler() => SignalDirection!.Visible = false;
|
||||||
|
|
||||||
public override void SetStatusConnected() =>
|
public override void SetStatusConnected()
|
||||||
|
{
|
||||||
|
base.SetStatusConnected();
|
||||||
TextureNormal = GlobalProvider.EnigmosProvider!.SignalPortStatusConnected;
|
TextureNormal = GlobalProvider.EnigmosProvider!.SignalPortStatusConnected;
|
||||||
|
}
|
||||||
public override void SetStatusNormal() =>
|
public override void SetStatusNormal() =>
|
||||||
TextureNormal = GlobalProvider.EnigmosProvider!.SignalPortStatusNormal;
|
TextureNormal = GlobalProvider.EnigmosProvider!.SignalPortStatusNormal;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user