diff --git a/ConfigurableParameterSetters b/ConfigurableParameterSetters
new file mode 100644
index 0000000..75815f3
--- /dev/null
+++ b/ConfigurableParameterSetters
@@ -0,0 +1,4 @@
+ModuleRealValueParameterSetter,DoubleParameter
+ModuleBoolValueParameterSetter,BoolParameter
+ModuleCharValueParameterSetter,CharParameter
+ModuleKeyValueParameterSetter,KeyParameter
\ No newline at end of file
diff --git a/ModuleTabs b/ModuleTabs
new file mode 100644
index 0000000..087edba
--- /dev/null
+++ b/ModuleTabs
@@ -0,0 +1,6 @@
+PortMaintenanceTab,BaseModule
+ModuleParameterTab,ParameterizedModule
+ModulePolymorphismTab,PolymorphismModule
+CommunicatorPairTab,CommunicateModule
+ProgrammableModuleSettingTab,ProgrammableModule
+ErrorHandlerTab,ErrorHandlerModule
diff --git a/Nocturnis.csproj b/Nocturnis.csproj
index 6147dca..eb2fb69 100644
--- a/Nocturnis.csproj
+++ b/Nocturnis.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Attributes/Expose.cs b/src/Attributes/Expose.cs
new file mode 100644
index 0000000..c40eccd
--- /dev/null
+++ b/src/Attributes/Expose.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.Attributes;
+[AttributeUsage(AttributeTargets.Method)]
+public class Expose : Attribute
+{
+
+}
\ No newline at end of file
diff --git a/src/Attributes/Installer.cs b/src/Attributes/Installer.cs
new file mode 100644
index 0000000..7aa5b88
--- /dev/null
+++ b/src/Attributes/Installer.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.Attributes;
+[AttributeUsage(AttributeTargets.Class)]
+public class Installer :Attribute
+{
+
+}
\ No newline at end of file
diff --git a/src/DataStructures/ConfigurableParameters/IDoubleParameter.cs b/src/DataStructures/ConfigurableParameters/IDoubleParameter.cs
index 10a2dac..af707c3 100644
--- a/src/DataStructures/ConfigurableParameters/IDoubleParameter.cs
+++ b/src/DataStructures/ConfigurableParameters/IDoubleParameter.cs
@@ -4,5 +4,5 @@ public interface IDoubleParameter : IConfigurableParameter
{
double MinValue { get; set; }
double MaxValue { get; set; }
- double Step { get; set; }
+ double Step { get; }
}
\ No newline at end of file
diff --git a/src/DataStructures/ConfigurableParameters/IModuleParameterSetter.cs b/src/DataStructures/ConfigurableParameters/IModuleParameterSetter.cs
new file mode 100644
index 0000000..f6bc6b3
--- /dev/null
+++ b/src/DataStructures/ConfigurableParameters/IModuleParameterSetter.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.DataStructures.ConfigurableParameters;
+
+public interface IModuleParameterSetter : INodeInterface
+{
+
+}
\ No newline at end of file
diff --git a/src/DataStructures/DataPortGroups/IDataInGroup.cs b/src/DataStructures/DataPortGroups/IDataInGroup.cs
index c224f8c..c1374e0 100644
--- a/src/DataStructures/DataPortGroups/IDataInGroup.cs
+++ b/src/DataStructures/DataPortGroups/IDataInGroup.cs
@@ -1,6 +1,8 @@
+using Nocturnis.Enigmos.Ports.DataPorts.Directions;
+
namespace Nocturnis.DataStructures.DataPortGroups;
-public interface IDataInGroup : IDataPortGroup, IEnumerable
+public interface IDataInGroup : IDataPortGroup, IEnumerable
{
}
\ No newline at end of file
diff --git a/src/DataStructures/DataPortGroups/IDataPortGroup.cs b/src/DataStructures/DataPortGroups/IDataPortGroup.cs
index 17dd336..0df6f71 100644
--- a/src/DataStructures/DataPortGroups/IDataPortGroup.cs
+++ b/src/DataStructures/DataPortGroups/IDataPortGroup.cs
@@ -1,4 +1,5 @@
using Godot;
+using Nocturnis.DataStructures.DataTypeOptions;
using Nocturnis.DataStructures.DataTypes;
namespace Nocturnis.DataStructures.DataPortGroups;
@@ -6,7 +7,7 @@ namespace Nocturnis.DataStructures.DataPortGroups;
public interface IDataPortGroup
{
DataType SelectedType { get; set; }
- DataType[] TypeOptions { get; set; }
+ DataTypeOption TypeOptions { get; set; }
void Inference();
string Description { get; set; }
diff --git a/src/DataStructures/DataTypeOptions/DataTypeOption.cs b/src/DataStructures/DataTypeOptions/DataTypeOption.cs
index 127bb4b..946a7c4 100644
--- a/src/DataStructures/DataTypeOptions/DataTypeOption.cs
+++ b/src/DataStructures/DataTypeOptions/DataTypeOption.cs
@@ -4,7 +4,7 @@ using Nocturnis.GlobalManagement.Providers;
namespace Nocturnis.DataStructures.DataTypeOptions;
-public class DataTypeOption : HashSet
+public class DataTypeOption : List
{
public DataTypeOption(params DataType[] options) : base(options)
{
diff --git a/src/DataStructures/DataTypes/DataType.cs b/src/DataStructures/DataTypes/DataType.cs
index 8c7adf5..5c16f36 100644
--- a/src/DataStructures/DataTypes/DataType.cs
+++ b/src/DataStructures/DataTypes/DataType.cs
@@ -99,11 +99,12 @@ public class DataType
public static bool operator !=(DataType a, DataType b) => a?.Signature != b?.Signature;
public void Assign(DataType oth)
- {
+ {
Type = oth.Type;
if (ElementType == null)
ElementType = new();
- ElementType.Assign(oth.ElementType);
+ if(Type == DataTypeConstant.NestedDataTypeNames.Array)
+ ElementType.Assign(oth.ElementType);
StructName = oth.StructName;
}
diff --git a/src/DataStructures/IVariantWithType.cs b/src/DataStructures/IVariantWithType.cs
deleted file mode 100644
index 2a36afd..0000000
--- a/src/DataStructures/IVariantWithType.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Godot;
-
-namespace Nocturnis.DataStructures;
-
-public interface IVariantWithType
-{
- Variant UnderlyingData { get; set; }
- string TypeHint { get; set; }
-}
\ No newline at end of file
diff --git a/src/DataStructures/VariantWithType.cs b/src/DataStructures/VariantWithType.cs
new file mode 100644
index 0000000..6f511b9
--- /dev/null
+++ b/src/DataStructures/VariantWithType.cs
@@ -0,0 +1,14 @@
+using Godot;
+
+namespace Alchegos.DataStructure;
+
+public partial class VariantWithType : Resource
+{
+ public VariantWithType(StringName typeHint, Variant underlyingData)
+ {
+ TypeHint = typeHint;
+ UnderlyingData = underlyingData;
+ }
+ public StringName TypeHint { get; set; }
+ public Variant UnderlyingData { get; set; }
+}
\ No newline at end of file
diff --git a/src/Enigmos/Boards/IBaseBoard.cs b/src/Enigmos/Boards/IBaseBoard.cs
index 045d207..402e8f6 100644
--- a/src/Enigmos/Boards/IBaseBoard.cs
+++ b/src/Enigmos/Boards/IBaseBoard.cs
@@ -1,23 +1,25 @@
using Nocturnis.Enigmos.Cables;
+using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Ports;
using Nocturnis.UIElements;
using Nocturnis.UIElements.Layers;
namespace Nocturnis.Enigmos.Boards;
-public interface IBaseBoard
+public interface IBaseBoard : INodeInterface
{
- IPanelViewer? PanelViewer { get; set; }
+ IPanelViewer PanelViewer { get; set; }
IEnumerable OnBoardPorts { get; }
- IBasePort? ConnectPending { get; set; }
+ IBasePort ConnectPending { get; set; }
Dictionary CablePairing { get; set; }
void AddCable(IBaseCable cable);
HashSet FocusedCables { get; set; }
bool ManualOpened { get; set; }
bool CableVisualMode { get; set; }
- IModuleManualLayer? ModuleManualLayer { get; set; }
- IModuleMovingLayer? ModuleMovingLayer { get; set; }
+ IModuleManualLayer ModuleManualLayer { get; set; }
+ IModuleMovingLayer ModuleMovingLayer { get; set; }
void Reset();
void SetCableVisualMode(bool mode);
void SetLabelVisualMode(bool mode);
+ public IEnumerable TerminalModules { get; }
}
\ No newline at end of file
diff --git a/src/Enigmos/ModuleManuals/IModuleManual.cs b/src/Enigmos/ModuleManuals/IModuleManual.cs
new file mode 100644
index 0000000..a1e9795
--- /dev/null
+++ b/src/Enigmos/ModuleManuals/IModuleManual.cs
@@ -0,0 +1,11 @@
+using Godot;
+using Nocturnis.Enigmos.Modules;
+
+namespace Nocturnis.Enigmos.ModuleManuals;
+
+public interface IModuleManual : INodeInterface
+{
+ Vector2 Size { get; set; }
+ Vector2 Position { get; set; }
+ void Init(IBaseModule m);
+}
\ No newline at end of file
diff --git a/src/Enigmos/Modules/IBaseModule.cs b/src/Enigmos/Modules/IBaseModule.cs
index 7203d15..2f9cdae 100644
--- a/src/Enigmos/Modules/IBaseModule.cs
+++ b/src/Enigmos/Modules/IBaseModule.cs
@@ -1,26 +1,26 @@
using Godot;
using Nocturnis.Enigmos.Boards;
+using Nocturnis.Enigmos.ModuleManuals;
using Nocturnis.Enigmos.Ports;
-using Nocturnis.UIElements;
namespace Nocturnis.Enigmos.Modules;
public interface IBaseModule
{
- Texture2D? PreviewTexture { get; }
+ Texture2D PreviewTexture { get; }
IEnumerable Ports { get; }
- IBaseBoard? Board { get; set; }
+ IBaseBoard Board { get; set; }
Vector2 PositionToBoard { get; }
Vector2 Size { get; set; }
double MaintenanceAlpha { get; }
double MaintenanceBeta { get; }
string GetDescription { get; }
- Label? Label { get; }
+ Label Label { get; }
Node AsNode { get; }
Vector2 Position { get; set; }
string LabelString { get; set; }
void UpdateCables();
Node GetNode(NodePath path);
void Init();
-
+ IModuleManual Manual { get; set; }
}
diff --git a/src/Enigmos/Modules/IKeyListenerModule.cs b/src/Enigmos/Modules/IKeyListenerModule.cs
index ef68c73..d0e4ff1 100644
--- a/src/Enigmos/Modules/IKeyListenerModule.cs
+++ b/src/Enigmos/Modules/IKeyListenerModule.cs
@@ -1,6 +1,9 @@
+using Nocturnis.DataStructures.ConfigurableParameters;
+
namespace Nocturnis.Enigmos.Modules;
public interface IKeyListenerModule
{
-
+ bool Pressed { get; set; }
+ IKeyParameter ListeningKey { get; set; }
}
\ No newline at end of file
diff --git a/src/Enigmos/Modules/IProgrammableModule.cs b/src/Enigmos/Modules/IProgrammableModule.cs
index 6e18574..c2f8514 100644
--- a/src/Enigmos/Modules/IProgrammableModule.cs
+++ b/src/Enigmos/Modules/IProgrammableModule.cs
@@ -1,5 +1,8 @@
+using Nocturnis.Enigmos.Boards;
+
namespace Nocturnis.Enigmos.Modules;
public interface IProgrammableModule : ICompositeModule
{
+ IBaseBoard UnderlyingBoard { get; set; }
}
\ No newline at end of file
diff --git a/src/Enigmos/Modules/IRootModule.cs b/src/Enigmos/Modules/IRootModule.cs
index b7cb6a2..15ad6d3 100644
--- a/src/Enigmos/Modules/IRootModule.cs
+++ b/src/Enigmos/Modules/IRootModule.cs
@@ -5,9 +5,8 @@ namespace Nocturnis.Enigmos.Modules;
public interface IRootModule : IRoutingModule
{
- Stopwatch? Timer { get; set; }
bool ActionFinished { get; set; }
- IBaseCreature? ManagedBy { get; set; }
+ IBaseCreature ManagedBy { get; set; }
void Start();
}
\ No newline at end of file
diff --git a/src/Enigmos/Ports/EBasePort.cs b/src/Enigmos/Ports/EBasePort.cs
index d6e989d..954a751 100644
--- a/src/Enigmos/Ports/EBasePort.cs
+++ b/src/Enigmos/Ports/EBasePort.cs
@@ -21,7 +21,7 @@ public static class EBasePort
p.Condition = Mathf.FloorToInt(Math.Max(0, Math.Min(100, p.Condition + dCond)));
p.Quality = Mathf.FloorToInt(Math.Max(0, Math.Min(20000, p.Quality + dQuality)));
}
- public static void Connect(this IBasePort p)
+ public static void ExtConnect(this IBasePort p)
{
if(p.Connected)
p.Disconnect();
diff --git a/src/GlobalManagement/Providers/GlobalProvider.cs b/src/GlobalManagement/Providers/GlobalProvider.cs
index 432048b..d85dd64 100644
--- a/src/GlobalManagement/Providers/GlobalProvider.cs
+++ b/src/GlobalManagement/Providers/GlobalProvider.cs
@@ -13,6 +13,7 @@ public static class GlobalProvider
public static ISceneProvider SceneProvider { get; set; }
public static IPolymorphismProvider PolymorphismProvider { get; set; }
public static IDataTypeProvider DataTypeProvider { get; set; }
+ public static IProcessProvider ProcessProvider { get; set; }
public static class ModulePreviewMapper
where TModule : IBaseModule
diff --git a/src/GlobalManagement/Providers/IDataStructureProvider.cs b/src/GlobalManagement/Providers/IDataStructureProvider.cs
index f7273a0..14112ba 100644
--- a/src/GlobalManagement/Providers/IDataStructureProvider.cs
+++ b/src/GlobalManagement/Providers/IDataStructureProvider.cs
@@ -14,11 +14,11 @@ public interface IDataStructureProvider
Variant NewVariantWithType(string type, Variant a);
IBoolParameter NewBoolParameter(string d, string t, string f, bool def);
- IDataPortGroup NewDataPortGroup(IBaseModule m, IDataPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
+ IDataPortGroup NewDataPortGroup(IPolymorphismModule m, IDataPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
- IDataInGroup NewDataInGroup(IBaseModule m, IDataInPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
+ IDataInGroup NewDataInGroup(IPolymorphismModule m, IDataInPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
- IDataOutGroup NewDataOutGroup(IBaseModule m, IDataOutPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
+ IDataOutGroup NewDataOutGroup(IPolymorphismModule m, IDataOutPort[] pts, string desc, DataType defType, DataTypeOption typeOpts);
IDoubleParameter NewDoubleParameter(string name, double min, double max, double def);
IKeyParameter NewKeyParameter(string a, string b);
diff --git a/src/GlobalManagement/Providers/IDataTypeProvider.cs b/src/GlobalManagement/Providers/IDataTypeProvider.cs
index 93f0de4..2d5a232 100644
--- a/src/GlobalManagement/Providers/IDataTypeProvider.cs
+++ b/src/GlobalManagement/Providers/IDataTypeProvider.cs
@@ -6,8 +6,8 @@ public interface IDataTypeProvider
{
bool IsComplexTensorType(DataType type);
DataType ComplexVersionOf(DataType type);
- DataType BuildType(DataType nType, int i, int j);
DataType GetBaseField(DataType type);
bool DataPortTypeCompatible(DataType inType, DataType outType);
DataType ToElement(DataType arrayType);
+ DataType ToVector(DataType scalarType);
}
diff --git a/src/GlobalManagement/Providers/IEnigmosProvider.cs b/src/GlobalManagement/Providers/IEnigmosProvider.cs
index 5df6c92..1437605 100644
--- a/src/GlobalManagement/Providers/IEnigmosProvider.cs
+++ b/src/GlobalManagement/Providers/IEnigmosProvider.cs
@@ -5,18 +5,16 @@ namespace Nocturnis.GlobalManagement.Providers;
public interface IEnigmosProvider
{
- Texture2D DataPortStatusNormal { get; set; }
- Texture2D DataPortStatusPending { get; set; }
- Texture2D DataPortStatusConnected { get; set; }
+ AnimatedTexture DataPortStatusNormal { get; set; }
+ AnimatedTexture DataPortStatusPending { get; set; }
+ AnimatedTexture DataPortStatusConnected { get; set; }
- Texture2D SignalPortStatusNormal { get; set; }
- Texture2D SignalPortStatusPending { get; set; }
- Texture2D SignalPortStatusConnected { get; set; }
+ AnimatedTexture SignalPortStatusNormal { get; set; }
+ AnimatedTexture SignalPortStatusPending { get; set; }
+ AnimatedTexture SignalPortStatusConnected { get; set; }
PackedScene SignalCableScene { get; set; }
PackedScene DataCableScene { get; set; }
- Dictionary DataPortTypeMap { get; set; }
-
bool CommunicationDirectionCompatible(StringName moduleDir, StringName communicatorDir);
string ModuleDescription();
diff --git a/src/GlobalManagement/Providers/IProcessProvider.cs b/src/GlobalManagement/Providers/IProcessProvider.cs
new file mode 100644
index 0000000..edcd239
--- /dev/null
+++ b/src/GlobalManagement/Providers/IProcessProvider.cs
@@ -0,0 +1,20 @@
+using Nocturnis.DataStructures.ConfigurableParameters;
+using Nocturnis.Enigmos.ModuleManuals;
+using Nocturnis.Enigmos.Modules;
+
+namespace Nocturnis.GlobalManagement.Providers;
+
+public interface IProcessProvider
+{
+ void BuildManual(IBaseModule module);
+ IModuleManualTab BuildPortMaintenanceTab(IBaseModule module);
+ IModuleManualTab BuildModulePolymorphismTab(IPolymorphismModule module);
+ IModuleManualTab BuildModuleParameterTab(IParameterizedModule module);
+ IModuleManualTab BuildCommunicatorPairTab(ICommunicateModule module);
+ IModuleManualTab BuildProgrammableModuleSettingTab(IProgrammableModule module);
+ IModuleManualTab BuildErrorHandlerTab(IErrorHandlerModule module);
+ IModuleParameterSetter BuildModuleRealValueParameterSetter(IDoubleParameter para);
+ IModuleParameterSetter BuildModuleBoolValueParameterSetter(IBoolParameter para);
+ IModuleParameterSetter BuildModuleCharValueParameterSetter(ICharParameter para);
+ IModuleParameterSetter BuildModuleKeyValueParameterSetter(IKeyParameter para);
+}
diff --git a/src/Inventories/Items/IBaseItem.cs b/src/Inventories/Items/IBaseItem.cs
index 4989bf7..dd61ca5 100644
--- a/src/Inventories/Items/IBaseItem.cs
+++ b/src/Inventories/Items/IBaseItem.cs
@@ -8,4 +8,8 @@ public interface IBaseItem : INodeInterface
{
StringName Status { get; set; }
R2 ItemPosition { get; set; }
+ Texture2D ItemIcon { get; }
+ void Free();
+ StringName ItemClass { get; }
+
}
diff --git a/src/UIElements/IKeyListener.cs b/src/UIElements/IKeyListener.cs
index 94ed331..d391043 100644
--- a/src/UIElements/IKeyListener.cs
+++ b/src/UIElements/IKeyListener.cs
@@ -5,4 +5,5 @@ namespace Nocturnis.UIElements;
public interface IKeyListener
{
void Register(IKeyListenerModule module);
+ void Init();
}
\ No newline at end of file
diff --git a/src/UIElements/IPanelViewer.cs b/src/UIElements/IPanelViewer.cs
index e9535be..1b08bcd 100644
--- a/src/UIElements/IPanelViewer.cs
+++ b/src/UIElements/IPanelViewer.cs
@@ -4,7 +4,7 @@ namespace Nocturnis.UIElements;
public interface IPanelViewer
{
- Camera2D? PanelViewerCamera { get; set; }
+ IPanelViewerCamera PanelViewerCamera { get; }
void BackToCenter();
}
\ No newline at end of file
diff --git a/src/UIElements/IPanelViewerCamera.cs b/src/UIElements/IPanelViewerCamera.cs
new file mode 100644
index 0000000..c20101c
--- /dev/null
+++ b/src/UIElements/IPanelViewerCamera.cs
@@ -0,0 +1,8 @@
+using Godot;
+
+namespace Nocturnis.UIElements;
+
+public interface IPanelViewerCamera
+{
+ Vector2 Zoom { get; set; }
+}
\ No newline at end of file