From be5428d708a255123aaf4b81e4f0df562d769a0e Mon Sep 17 00:00:00 2001 From: hzhang Date: Wed, 3 Jul 2024 12:20:08 +0800 Subject: [PATCH] Upgrade structure of code base --- Boards/BaseBoard.cs | 32 +-- Boards/FilterModuleBoard.cs | 25 +++ Boards/FunctionModuleBoard.cs | 28 +++ Boards/OptimizationModuleBoard.cs | 24 +++ Boards/PrimaryModuleBoard.cs | 52 +++++ Manual/CommunicatorPairTab.cs | 1 - Manual/ModuleManual.cs | 2 +- Manual/ModuleParameterTab.cs | 2 +- Manual/ModulePolymorphismTab.cs | 4 +- Manual/PortMaintenanceTab.cs | 18 +- Manual/PortTypeSelector.cs | 16 +- Manual/ProgrammableModuleSettingTab.cs | 8 +- Modules/BaseModule.cs | 13 +- .../Binary/AdditionModule.cs | 53 +++-- .../Binary/BinaryLogicModule.cs | 17 ++ .../Binary/ComparisionModule.cs | 41 ++-- .../Binary/ControlledOutputModule.cs | 62 +++--- .../Binary/DivisionModule.cs | 52 +++-- .../Binary/DotProductModule.cs | 46 ++--- .../Binary/LogicalAlternativeDenialModule.cs | 29 +-- .../Binary/LogicalBiconditionalModule.cs | 31 ++- .../Binary/LogicalConjunctionModule.cs | 32 ++- .../Binary/LogicalDisjunctionModule.cs | 29 +-- .../LogicalExclusiveDisjunctionModule.cs | 30 +-- .../Binary/LogicalImplicationModule.cs | 27 +-- .../Binary/LogicalJointDenialModule.cs | 36 ++-- .../Binary/LogicalNonimplicationModule.cs | 31 +-- .../ComputationalModules/Binary/MaxModule.cs | 46 ++--- .../ComputationalModules/Binary/MinModule.cs | 45 ++--- .../Binary/MultiplicationModule.cs | 50 +++-- .../Binary/PowerModule.cs | 47 ++--- .../Binary/ScalarDivisionModule.cs | 105 +++------- .../Binary/ScalarMultiplicationModule.cs | 53 +++-- .../Binary/SubtractionModule.cs | 50 +++-- .../ComputationalModules/Binary/V2Module.cs | 44 +++-- .../BinaryComputationalModule.cs | 24 +-- .../ComputationalModule.cs | 29 +-- .../Nullary/ConstantModule.cs | 40 ++-- .../Nullary/KeyListenerModule.cs | 33 ++-- .../Nullary/NormalDistributionModule.cs | 34 ++-- .../NullaryComputationalModule.cs | 6 +- .../Ternary/SelectorModule.cs | 47 +++-- .../TernaryComputationalModule.cs | 22 +-- .../ComputationalModules/Unary/CopyModule.cs | 42 ++-- .../Unary/LogicalNegationModule.cs | 29 +-- .../Unary/NegationModule.cs | 41 ++-- .../Unary/SquareModule.cs | 43 ++-- .../Unary/V2ComponentModule.cs | 52 ++--- .../UnaryComputationalModule.cs | 17 +- .../ActionModules/ActionModule.cs | 14 +- .../ActionModules/AttackActionModule.cs | 39 ++-- .../ActionModules/MoveActionModule.cs | 39 ++-- .../ControllingModules/ControllingModule.cs | 31 --- Modules/ControllingModules/PiplineModule.cs | 16 ++ Modules/ControllingModules/RootModule.cs | 33 ++-- .../SinglePoleDoubleThrowSwitchModule.cs | 53 ++--- .../SinglePoleSingleThrowSwitchModule.cs | 42 ++-- .../Extensions/CommunicateModuleExtension.cs | 64 ------ .../FilterOutputModule.cs | 32 +-- .../InterlayerDataInModule.cs | 8 +- .../InterlayerDataOutModule.cs | 12 +- .../InterlayerSignalInModule.cs | 13 +- .../InterlayerSignalOutModule.cs | 25 ++- .../IterativeOutputModule.cs | 39 ++++ .../OptimizationItemOutputModule.cs | 42 ++++ .../OptimizationValueOutputModule.cs | 18 +- Modules/Other/EngineControllingModule.cs | 53 ----- Modules/Other/IndicateInputModule.cs | 20 +- Modules/Other/IterativeOutputModule.cs | 30 --- Modules/Other/OptimizationItemOutputModule.cs | 38 ---- Modules/Other/OptimizationValueInputModule.cs | 17 +- Modules/Other/OutputSubModule.cs | 27 ++- Modules/ProgrammableModules/FilterModule.cs | 140 +++++++++++++ Modules/ProgrammableModules/FunctionModule.cs | 111 +++++++++++ .../ProgrammableModules/OptimizationModule.cs | 186 ++++++++++++++++++ .../ProgrammableModules/ProgrammableModule.cs | 17 +- Modules/TerminalModules/EngineModule.cs | 41 ++++ Modules/TerminalModules/MemoryModule.cs | 95 ++++----- Modules/TerminalModules/SRLatchModule.cs | 64 +++--- Modules/TerminalModules/TerminalModule.cs | 35 +--- .../LightEmittingDiodeModule.cs | 21 +- .../TestingModules/R2Reader.cs | 14 +- .../TestingModules/R2ReaderModule.cs | 15 +- .../TestingModules/RealReaderModule.cs | 39 ++-- Ports/BasePort.cs | 74 +------ Ports/DataPorts/DataInPort.cs | 28 +-- Ports/DataPorts/DataOutPort.cs | 37 ++-- Ports/DataPorts/DataPort.cs | 35 ++-- Ports/SignalPorts/SignalInPort.cs | 8 +- Ports/SignalPorts/SignalOutPort.cs | 16 +- Ports/SignalPorts/SignalPort.cs | 24 +-- 91 files changed, 1742 insertions(+), 1603 deletions(-) create mode 100644 Boards/FilterModuleBoard.cs create mode 100644 Boards/FunctionModuleBoard.cs create mode 100644 Boards/OptimizationModuleBoard.cs create mode 100644 Boards/PrimaryModuleBoard.cs create mode 100644 Modules/ComputationalModules/Binary/BinaryLogicModule.cs delete mode 100644 Modules/ControllingModules/ControllingModule.cs create mode 100644 Modules/ControllingModules/PiplineModule.cs delete mode 100644 Modules/Extensions/CommunicateModuleExtension.cs rename Modules/{Other => InterlayerModules}/FilterOutputModule.cs (50%) create mode 100644 Modules/InterlayerModules/IterativeOutputModule.cs create mode 100644 Modules/InterlayerModules/OptimizationItemOutputModule.cs rename Modules/{Other => InterlayerModules}/OptimizationValueOutputModule.cs (68%) delete mode 100644 Modules/Other/EngineControllingModule.cs delete mode 100644 Modules/Other/IterativeOutputModule.cs delete mode 100644 Modules/Other/OptimizationItemOutputModule.cs create mode 100644 Modules/ProgrammableModules/FilterModule.cs create mode 100644 Modules/ProgrammableModules/FunctionModule.cs create mode 100644 Modules/ProgrammableModules/OptimizationModule.cs create mode 100644 Modules/TerminalModules/EngineModule.cs 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