Upgrade
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
@@ -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,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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user