This commit is contained in:
h z
2024-07-12 14:32:16 +01:00
parent 5548a7243b
commit 1df3c08a9e
20 changed files with 119 additions and 148 deletions

View File

@@ -1,3 +1,4 @@
using Alchegos.DataStructure;
using Enigmos.Cables; using Enigmos.Cables;
using Enigmos.Modules; using Enigmos.Modules;
using Enigmos.Modules.ProgrammableModules; using Enigmos.Modules.ProgrammableModules;
@@ -47,7 +48,7 @@ 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();
@@ -59,9 +60,8 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
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 IEnumerable<IBasePort> OnBoardPorts public IEnumerable<IBasePort> OnBoardPorts
@@ -74,9 +74,9 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
return res; return res;
} }
} }
public IBasePort? ConnectPending { get; set; } public IBasePort ConnectPending { get; set; }
public IBoardControlLayer? CircuitBoardControlLayer { get; set; } public IBoardControlLayer CircuitBoardControlLayer { get; set; }
public IModuleMovingLayer? ModuleMovingLayer { get; set; } public IModuleMovingLayer ModuleMovingLayer { get; set; }
public virtual void Init() public virtual void Init()
{ {
@@ -84,17 +84,18 @@ 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;
}
public override void _Ready()
{
base._Ready();
} }
@@ -156,12 +157,12 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
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)
@@ -187,7 +188,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>();
@@ -196,7 +197,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;
} }

View File

@@ -7,17 +7,13 @@ using Nocturnis.GlobalManagement.Constants;
namespace Enigmos.Boards; namespace Enigmos.Boards;
public partial class FilterModuleBoard : BaseBoard, ISceneConcept public partial class FilterModuleBoard : BaseBoard, ISceneConcept
{ {
public FilterModule? 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 FilterIndicateModule Indicate { get; set; }
//public XIterativeOutputModule? IterativeOutput { get; set; }
//public IDataInPort? Indicate { get; set; }
//public IndicateInputModule? Indicate { get; set; }
public FilterIndicateModule? Indicate { get; set; }
public void Init(FilterModule filterModule) public void Init(FilterModule filterModule)
{ {
@@ -29,7 +25,6 @@ public partial class FilterModuleBoard : BaseBoard, ISceneConcept
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(DataTypeConstant.BaseDataTypes.Bit); Indicate.Indicate!.SetDataType(DataTypeConstant.BaseDataTypes.Bit);
} }

View File

@@ -1,13 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk"> <!--Project Sdk="Microsoft.NET.Sdk"-->
<Project Sdk="Godot.NET.Sdk/4.3.0-beta.3">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</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.3.0-beta.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -7,7 +7,7 @@ using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Manual; namespace Enigmos.Manual;
public abstract partial class ModuleManual : Panel, ISceneConcept public abstract partial class ModuleManual : Panel, ISceneConcept, IModuleManual
{ {
private bool InitFlag { get; set; } private bool InitFlag { get; set; }
@@ -17,14 +17,14 @@ public abstract partial class ModuleManual : Panel, ISceneConcept
InitFlag = true; InitFlag = true;
} }
private Label? ModuleDescriptionTitle { get; set; } private Label ModuleDescriptionTitle { get; set; }
private RichTextLabel? ModuleDescription { get; set; } private RichTextLabel ModuleDescription { get; set; }
private Label? ModuleConfigurationTitle { get; set; } private Label ModuleConfigurationTitle { get; set; }
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; } = new(); 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 +38,47 @@ public abstract partial class ModuleManual : Panel, ISceneConcept
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
.AssetMapper<PortMaintenanceTab>.Scene 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 ModulePolymorphismTab polyTab =
.AssetMapper<ModulePolymorphismTab>.Scene 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
.AssetMapper<ModuleParameterTab>.Scene 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
.AssetMapper<CommunicatorPairTab>.Scene 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 ProgrammableModuleSettingTab progTab =
.AssetMapper<ProgrammableModuleSettingTab>.Scene 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 ErrorHandlerTab errTab = GlobalProvider.ProcessProvider.BuildErrorHandlerTab(errModule) as ErrorHandlerTab;
.AssetMapper<ErrorHandlerTab>.Scene
.Instantiate<ErrorHandlerTab>();
errTab.Init(errorHandlerModule);
Tabs.Add(errTab); Tabs.Add(errTab);
ConfigurationTabs.AddChild(errTab); ConfigurationTabs.AddChild(errTab);
} }

View File

@@ -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; }

View File

@@ -30,37 +30,27 @@ public partial class ModuleParameterTab : Panel, IModuleManualTab, ISceneConcept
{ {
if(parameter is IDoubleParameter doubleParameter) if(parameter is IDoubleParameter doubleParameter)
{ {
ModuleRealValueParameterSetter setter = GlobalProvider ModuleRealValueParameterSetter setter = GlobalProvider.ProcessProvider
.AssetMapper<ModuleRealValueParameterSetter>.Scene .BuildModuleRealValueParameterSetter(doubleParameter) as ModuleRealValueParameterSetter;
.Instantiate<ModuleRealValueParameterSetter>();
setter.Init(doubleParameter);
Parameters.AddChild(setter); Parameters.AddChild(setter);
} }
else if (parameter is IBoolParameter boolParameter) else if (parameter is IBoolParameter boolParameter)
{ {
ModuleBoolValueParameterSetter setter = GlobalProvider ModuleBoolValueParameterSetter setter = GlobalProvider.ProcessProvider
.AssetMapper<ModuleBoolValueParameterSetter>.Scene .BuildModuleBoolValueParameterSetter(boolParameter) as ModuleBoolValueParameterSetter;
.Instantiate<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 .BuildModuleCharValueParameterSetter(charParameter) as ModuleCharValueParameterSetter;
.AssetMapper<ModuleCharValueParameterSetter>.Scene
.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 .BuildModuleKeyValueParameterSetter(keyParameter) as ModuleKeyValueParameterSetter;
.AssetMapper<ModuleKeyValueParameterSetter>.Scene
.Instantiate<ModuleKeyValueParameterSetter>();
setter.Init(keyParameter);
Parameters.AddChild(setter); Parameters.AddChild(setter);
} }
} }

View File

@@ -1,6 +1,7 @@
using Godot; using Godot;
using Nocturnis; using Nocturnis;
using Nocturnis.DataStructures.DataPortGroups; using Nocturnis.DataStructures.DataPortGroups;
using Nocturnis.DataStructures.DataTypes;
using Nocturnis.GlobalManagement.Providers; using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Manual; namespace Enigmos.Manual;
@@ -18,20 +19,20 @@ public partial class PortTypeSelector : Control, ISceneConcept
/// <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)

View File

@@ -2,17 +2,18 @@ using Enigmos.Modules.ProgrammableModules;
using Godot; using Godot;
using Nocturnis; using Nocturnis;
using Nocturnis.Enigmos.ModuleManuals; using Nocturnis.Enigmos.ModuleManuals;
using Nocturnis.Enigmos.Modules;
using Nocturnis.GlobalManagement.Providers; using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Manual; namespace Enigmos.Manual;
public abstract partial class ProgrammableModuleSettingTab : Panel, IModuleManualTab, ISceneConcept 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;
} }
@@ -28,7 +29,7 @@ public abstract partial class ProgrammableModuleSettingTab : Panel, IModuleManua
private void EnterProgrammableBoard() private void EnterProgrammableBoard()
{ {
GlobalProvider.SceneProvider!.RootScene.ChangeScene(Module!.UnderlyingBoard); GlobalProvider.SceneProvider!.RootScene.ChangeScene(Module!.UnderlyingBoard.AsNode());
} }
} }

View File

@@ -1,9 +1,9 @@
using Enigmos.Exceptions;
using Enigmos.Manual;
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;
@@ -15,7 +15,8 @@ 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;
@@ -24,9 +25,9 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
public bool HasLabel => HasManual; public bool HasLabel => HasManual;
public virtual IEnumerable<IBasePort> Ports => GetChildren().OfType<IBasePort>(); 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 Label? Label { get; set; } public Label Label { get; set; }
public Node AsNode => this; public Node AsNode => this;
public virtual void PresetValueInit() public virtual void PresetValueInit()
@@ -82,15 +83,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)
@@ -99,7 +91,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);
} }
public override void _Input(InputEvent @event) public override void _Input(InputEvent @event)
{ {
if (@event is InputEventMouseButton eventMouseButton) if (@event is InputEventMouseButton eventMouseButton)
@@ -109,19 +100,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 Board.ModuleManualLayer!.AddChild(Manual.AsNode());
.AssetMapper<ModuleManual>.Scene
.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;
@@ -150,7 +133,6 @@ public abstract partial class BaseModule : TextureRect, IBaseModule
base._Input(@event); base._Input(@event);
} }
//public Texture2D PreviewTexture => GlobalProvider.TextureProvider.ModuleTextureMapper(this);
public abstract Texture2D PreviewTexture { get; } public abstract Texture2D PreviewTexture { get; }
} }

View File

@@ -61,7 +61,7 @@ public abstract partial class V2Module : BinaryComputationalModule,
public void Inference() public void Inference()
{ {
OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!.BuildType(OutputGroup.SelectedType, 1, 2); OutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!.ToVector(OutputGroup.SelectedType);
} }
} }

View File

@@ -14,11 +14,11 @@ public abstract partial class KeyListenerModule : NullaryComputationalModule,
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 void Init() public override void Init()

View File

@@ -65,4 +65,4 @@ public abstract partial class V2ComponentModule : UnaryComputationalModule, IPol
ScalarOutputGroup!.SelectedType = GlobalProvider.DataTypeProvider! ScalarOutputGroup!.SelectedType = GlobalProvider.DataTypeProvider!
.GetBaseField(VectorInputGroup!.SelectedType); .GetBaseField(VectorInputGroup!.SelectedType);
} }

View File

@@ -7,7 +7,7 @@ namespace Enigmos.Modules.ControllingModules;
public abstract 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();
@@ -15,7 +15,6 @@ public abstract 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 Stopwatch? Timer { get; set; }
public bool Visited { get; set; } public bool Visited { get; set; }
public override void Init() public override void Init()

View File

@@ -1,5 +1,7 @@
using Enigmos.Boards; using Enigmos.Boards;
using Enigmos.Modules.InterlayerModules; using Enigmos.Modules.InterlayerModules;
using Nocturnis;
using Nocturnis.Enigmos.Boards;
using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports;
using Nocturnis.GlobalManagement.Providers; using Nocturnis.GlobalManagement.Providers;
@@ -8,8 +10,8 @@ namespace Enigmos.Modules.ProgrammableModules;
public abstract partial class ProgrammableModule : CompositeModule, IProgrammableModule public abstract partial class ProgrammableModule : CompositeModule, IProgrammableModule
{ {
public BaseBoard? UnderlyingBoard { get; set; } public IBaseBoard UnderlyingBoard { get; set; }
public void EnterProgrammableBoard() => GlobalProvider.SceneProvider!.RootScene.ChangeScene(UnderlyingBoard!); public void EnterProgrammableBoard() => GlobalProvider.SceneProvider!.RootScene.ChangeScene(UnderlyingBoard.AsNode());
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()

View File

@@ -3,12 +3,12 @@ using Nocturnis.Enigmos.Modules;
namespace Enigmos.Modules.SubModules; namespace Enigmos.Modules.SubModules;
public class SubModule : BaseModule public partial class SubModule : BaseModule
{ {
public ICompositeModule? 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; public override Texture2D PreviewTexture => null;
} }

View File

@@ -9,7 +9,11 @@ using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Modules.TerminalModules; namespace Enigmos.Modules.TerminalModules;
public abstract partial class MemoryModule : BaseModule, ITerminalModule, ISourceModule, IDuplicateOutputModule public abstract partial class MemoryModule : BaseModule,
ITerminalModule,
ISourceModule,
IDuplicateOutputModule,
IPolymorphismModule
{ {
private DataVariable? Memory { get; set; } private DataVariable? Memory { get; set; }
private IDataPortGroup? MemoryPortGroup { get; set; } private IDataPortGroup? MemoryPortGroup { get; set; }

View File

@@ -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));

View File

@@ -1,4 +1,5 @@
using Godot; using Godot;
using Nocturnis.Attributes;
using Nocturnis.Enigmos.Cables; using Nocturnis.Enigmos.Cables;
using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports;
@@ -17,9 +18,9 @@ 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();
@@ -33,5 +34,6 @@ public abstract partial class BasePort : TextureButton, IBasePort
public virtual void Init() public virtual void Init()
{ {
} }
[Expose]
public void Connect() => this.ExtConnect();
} }

View File

@@ -19,9 +19,9 @@ public abstract 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;
} }

View File

@@ -35,6 +35,9 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort
if (!Connected) if (!Connected)
return; return;
ConnectedPort!.Module.Execute(); ConnectedPort!.Module.Execute();
}
public void Connect()
{
Console.WriteLine("XXXXXX");
} }
} }