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