diff --git a/Boards/BaseBoard.cs b/Boards/BaseBoard.cs index 560f24a..dbe1ee4 100644 --- a/Boards/BaseBoard.cs +++ b/Boards/BaseBoard.cs @@ -1,21 +1,18 @@ using Enigmos.Cables; using Enigmos.Modules; -using Enigmos.Modules.ControllingModules; using Enigmos.Modules.ProgrammableModules; -using Enigmos.Modules.TerminalModules; -using Enigmos.Ports.DataPorts; using Godot; using Nocturnis.DataStructures; using Nocturnis.Enigmos.Boards; using Nocturnis.Enigmos.Cables; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Ports; +using Nocturnis.GlobalManagement.Controls; +using Nocturnis.GlobalManagement.Providers; using Nocturnis.Inventories.Items; using Nocturnis.Inventories.Items.Items; using Nocturnis.UIElements; using Nocturnis.UIElements.Layers; -using TabulaSmaragdina; -using TabulaSmaragdina.Controls; namespace Enigmos.Boards; @@ -57,10 +54,10 @@ public abstract partial class BaseBoard : Panel, IBaseBoard Modules .OfType(); - public IEnumerable TerminalModules() => + public IEnumerable TerminalModules => Modules - .OfType() - .Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard.TerminalModules())); + .OfType() + .Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard!.TerminalModules)); protected HashSet Ports => Modules.SelectMany(module => module.Ports).ToHashSet(); public IPanelViewer? PanelViewer { get; set; } @@ -103,6 +100,15 @@ public abstract partial class BaseBoard : Panel, IBaseBoard public virtual void Reset() { + foreach (ISourceModule sm in Modules.OfType()) + sm.Reset(); + foreach (IProgrammableModule pm in Modules.OfType()) + pm.Board!.Reset(); + foreach (IControllingModule cm in Modules.OfType()) + cm.Visited = false; + + + /* foreach (IBaseModule module in Modules) { if (module is RootModule rootModule) @@ -120,13 +126,13 @@ public abstract partial class BaseBoard : Panel, IBaseBoard if (module is ProgrammableModule programmableModule) { - programmableModule.UnderlyingBoard.Reset(); - foreach (DataOutPort outPort in programmableModule.ExplicitPorts().OfType()) + programmableModule.UnderlyingBoard!.Reset(); + foreach (DataOutPort outPort in programmableModule.ExplicitPorts.OfType()) outPort.DataUpdated = false; - foreach (DataOutPort outPort in programmableModule.ImplicitPorts().OfType()) + foreach (DataOutPort outPort in programmableModule.ImplicitPorts.OfType()) outPort.DataUpdated = false; } - if (module is ControllingModule controllingModule) + if (module is PiplineModule controllingModule) controllingModule.Visited = false; if (module is TerminalModule terminalModule) terminalModule.Finished = false; @@ -134,7 +140,7 @@ public abstract partial class BaseBoard : Panel, IBaseBoard foreach (DataOutPort port in module.Ports.OfType()) port.DataUpdated = false; - } + }*/ } public override bool _CanDropData(Vector2 atPosition, Variant data) diff --git a/Boards/FilterModuleBoard.cs b/Boards/FilterModuleBoard.cs new file mode 100644 index 0000000..950dc92 --- /dev/null +++ b/Boards/FilterModuleBoard.cs @@ -0,0 +1,25 @@ +using Enigmos.Modules.InterlayerModules; +using Enigmos.Modules.Other; +using Nocturnis.Enigmos.Modules.InterlayerModules; +using Nocturnis.GlobalManagement.Constants; + +namespace Enigmos.Boards; +public partial class FilterModuleBoard : BaseBoard +{ + public IInterlayerDataOutModule[] Outputs { get; set; } = Array.Empty(); + public IterativeOutputModule? IterativeOutput { get; set; } + public IndicateInputModule? Indicate { get; set; } + + public override void Init() + { + base.Init(); + Outputs = new IInterlayerDataOutModule[3]; + for (int i = 1; i <= 3; i++) + Outputs[i-1] = GetModule($"IO{i}"); + base.Init(); + IterativeOutput = GetModule("IterativeOutput"); + Indicate = GetModule("Indicate"); + Indicate.Input!.SetDataType(EnigmosConstant.DataPortTypes.Bit); + } + +} diff --git a/Boards/FunctionModuleBoard.cs b/Boards/FunctionModuleBoard.cs new file mode 100644 index 0000000..1339094 --- /dev/null +++ b/Boards/FunctionModuleBoard.cs @@ -0,0 +1,28 @@ +using Enigmos.Modules.InterlayerModules; + +namespace Enigmos.Boards; + +public partial class FunctionModuleBoard : BaseBoard +{ + public InterlayerDataInModule[] DataIns { get; set; } = Array.Empty(); + public InterlayerDataOutModule[] DataOuts { get; set; } = Array.Empty(); + public InterlayerSignalInModule[] SignalIns { get; set; } = Array.Empty(); + public InterlayerSignalOutModule[] SignalOuts { get; set; } = Array.Empty(); + + public override void Init() + { + base.Init(); + DataIns = new InterlayerDataInModule[4]; + DataOuts = new InterlayerDataOutModule[4]; + SignalIns = new InterlayerSignalInModule[4]; + SignalOuts = new InterlayerSignalOutModule[4]; + for (int i = 1; i <= 4; i++) + { + DataIns[i - 1] = GetModule($"II{i}"); + DataOuts[i - 1] = GetModule($"IO{i}"); + SignalIns[i - 1] = GetModule($"ISI{i}"); + SignalOuts[i - 1] = GetModule($"ISO{i}"); + } + } + +} diff --git a/Boards/OptimizationModuleBoard.cs b/Boards/OptimizationModuleBoard.cs new file mode 100644 index 0000000..5ad7da1 --- /dev/null +++ b/Boards/OptimizationModuleBoard.cs @@ -0,0 +1,24 @@ +using Enigmos.Modules.InterlayerModules; +using Enigmos.Modules.Other; +using Nocturnis.GlobalManagement.Constants; + +namespace Enigmos.Boards; + +public partial class OptimizationModuleBoard : BaseBoard +{ + public IterativeOutputModule? IterOut { get; set; } + public OptimizationValueInputModule? ValueIn { get; set; } + public InterlayerDataOutModule[] ImplicitDataOuts { get; set; } = Array.Empty(); + public override void Init() + { + + ImplicitDataOuts = new InterlayerDataOutModule[3]; + base.Init(); + for (int i = 0; i < 3; i++) + ImplicitDataOuts[i] = GetModule($"IO{i + 1}"); + IterOut = GetModule("IterOut"); + ValueIn = GetModule("ValueIn"); + IterOut.Output!.SetDataType(EnigmosConstant.DataPortTypes.Real); + ValueIn.DataIn.SetDataType(EnigmosConstant.DataPortTypes.Real); + } +} diff --git a/Boards/PrimaryModuleBoard.cs b/Boards/PrimaryModuleBoard.cs new file mode 100644 index 0000000..b8aa613 --- /dev/null +++ b/Boards/PrimaryModuleBoard.cs @@ -0,0 +1,52 @@ +using Enigmos.Modules.ControllingModules; +using Enigmos.Modules.TerminalModules; +using Nocturnis.Creatures; +using Nocturnis.Enigmos.Modules; +using Nocturnis.GlobalManagement.Constants; +using Nocturnis.GlobalManagement.Controls; + +namespace Enigmos.Boards; + +public partial class PrimaryModuleBoard : BaseBoard +{ + private IBaseCreature? ManagedBy { get; set; } + public IRootModule? Root { get; set; } + public EngineModule? Engine { get; set; } + + + public void Init(IBaseCreature manager) + { + Init(); + Root = GetModule("Root"); + Engine = GetModule("Engine"); + Root.ManagedBy = manager; + ManagedBy = manager; + } + + + public void Start() + { + if (!Root!.ActionFinished) + return; + //Root.Timer = Stopwatch.StartNew(); + Engine!.Drain(); + if (EnigmosControl.Instance.Energy < EnigmosConstant.IdlePower) + { + Root!.ActionFinished = true; + EnigmosControl.Instance.ShutDownEngine(); + return; + } + Root.Start(); + foreach (ITerminalModule tm in TerminalModules) + { + tm.Consume(); + } + + + //Root.RouteWithTimeoutHandle(Root); + //Root.Timer.Reset(); + //foreach (TerminalModule module in TerminalModules()) + // module.ConsumeWithTimeoutHandle(Root); + } + +} \ No newline at end of file diff --git a/Manual/CommunicatorPairTab.cs b/Manual/CommunicatorPairTab.cs index 23afe8d..913e298 100644 --- a/Manual/CommunicatorPairTab.cs +++ b/Manual/CommunicatorPairTab.cs @@ -1,4 +1,3 @@ -using Enigmos.Modules.Extensions; using Godot; using Nocturnis.Communicators; using Nocturnis.Enigmos.ModuleManuals; diff --git a/Manual/ModuleManual.cs b/Manual/ModuleManual.cs index f175c63..07cb1ff 100644 --- a/Manual/ModuleManual.cs +++ b/Manual/ModuleManual.cs @@ -2,7 +2,7 @@ using Enigmos.Modules.ProgrammableModules; using Godot; using Nocturnis.Enigmos.ModuleManuals; using Nocturnis.Enigmos.Modules; -using TabulaSmaragdina; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Manual; diff --git a/Manual/ModuleParameterTab.cs b/Manual/ModuleParameterTab.cs index e211bfa..310e55b 100644 --- a/Manual/ModuleParameterTab.cs +++ b/Manual/ModuleParameterTab.cs @@ -2,7 +2,7 @@ using Godot; using Nocturnis.DataStructures.ConfigurableParameters; using Nocturnis.Enigmos.ModuleManuals; using Nocturnis.Enigmos.Modules; -using TabulaSmaragdina; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Manual; diff --git a/Manual/ModulePolymorphismTab.cs b/Manual/ModulePolymorphismTab.cs index f71cf01..cf46609 100644 --- a/Manual/ModulePolymorphismTab.cs +++ b/Manual/ModulePolymorphismTab.cs @@ -1,8 +1,8 @@ using Godot; -using Nocturnis.DataStructures; +using Nocturnis.DataStructures.DataPortGroups; using Nocturnis.Enigmos.ModuleManuals; using Nocturnis.Enigmos.Modules; -using TabulaSmaragdina; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Manual; diff --git a/Manual/PortMaintenanceTab.cs b/Manual/PortMaintenanceTab.cs index d321edf..e57dfad 100644 --- a/Manual/PortMaintenanceTab.cs +++ b/Manual/PortMaintenanceTab.cs @@ -1,10 +1,9 @@ using Enigmos.Modules.ProgrammableModules; -using Enigmos.Ports; using Godot; using Nocturnis.Enigmos.ModuleManuals; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Ports; -using TabulaSmaragdina; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Manual; @@ -19,18 +18,18 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab } public string FullName() => "Maintenance"; - private static readonly PackedScene PortFixerScene = GlobalProvider.SceneProvider.AssetMapper(); + private static readonly PackedScene PortFixerScene = GlobalProvider.SceneProvider!.AssetMapper(); /// /// Should Be Assigned Before This Tab Been Added As Child To Tab Container /// - public IBaseModule Module { get; set; } - private VBoxContainer Ports { get; set; } + public IBaseModule? Module { get; set; } + private VBoxContainer? Ports { get; set; } public override void _Ready() { if (!InitFlag) throw new Exception("TODO - NEED INIT"); Ports = GetNode("ScrolledItems/Ports"); - foreach (IBasePort port in Module.Ports) + foreach (IBasePort port in Module!.Ports) { PortFixer fixer = PortFixerScene.Instantiate(); fixer.Init(port); @@ -40,7 +39,7 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab if (Module is ProgrammableModule programmableModule) { HashSet used = new HashSet(); - foreach (BasePort port in programmableModule.ExplicitPorts()) + foreach (IBasePort port in programmableModule.ExplicitPorts) { int i = 0; while (used.Contains("Exterior" + port.Name + $"#{i}")) @@ -51,7 +50,7 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab fixer.Init(port); Ports.AddChild(fixer); } - foreach (BasePort port in programmableModule.ImplicitPorts()) + foreach (IBasePort port in programmableModule.ImplicitPorts) { string baseName = port.Name.ToString().Replace("Empty", "Interior"); int i = 0; @@ -68,5 +67,4 @@ public partial class PortMaintenanceTab : Panel, IModuleManualTab Name = "Main"; base._Ready(); } - -} \ No newline at end of file +} diff --git a/Manual/PortTypeSelector.cs b/Manual/PortTypeSelector.cs index 456e5a4..f491baa 100644 --- a/Manual/PortTypeSelector.cs +++ b/Manual/PortTypeSelector.cs @@ -1,6 +1,6 @@ using Godot; -using Nocturnis.DataStructures; -using TabulaSmaragdina; +using Nocturnis.DataStructures.DataPortGroups; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Manual; @@ -17,9 +17,9 @@ public partial class PortTypeSelector : Control /// /// Underlying Group must be set before _Ready /// - public IDataPortGroup UnderlyingGroup { get; set; } - private Label Description { get; set; } - private OptionButton TypeOptions { get; set; } + public IDataPortGroup? UnderlyingGroup { get; set; } + private Label? Description { get; set; } + private OptionButton? TypeOptions { get; set; } public override void _Ready() { if (!InitFlag) @@ -27,15 +27,15 @@ public partial class PortTypeSelector : Control Description = GetNode