diff --git a/Nocturnis.csproj b/Nocturnis.csproj
index 34207eb..abb1f47 100644
--- a/Nocturnis.csproj
+++ b/Nocturnis.csproj
@@ -16,6 +16,7 @@
+
diff --git a/src/Communicators/IBaseCommunicator.cs b/src/Communicators/IBaseCommunicator.cs
index b9e1fbe..d3cbaa8 100644
--- a/src/Communicators/IBaseCommunicator.cs
+++ b/src/Communicators/IBaseCommunicator.cs
@@ -6,7 +6,7 @@ using Nocturnis.Enigmos.Modules;
namespace Nocturnis.Communicators;
-public interface IBaseCommunicator
+public interface IBaseCommunicator : IControlNode
{
ICommunicateModule PairedModule { get; set; }
DataVariable DataBuffer { get; set; }
diff --git a/src/Creatures/Characters/IPlayerCharacter.cs b/src/Creatures/Characters/IPlayerCharacter.cs
index 2b12ca1..18e6d19 100644
--- a/src/Creatures/Characters/IPlayerCharacter.cs
+++ b/src/Creatures/Characters/IPlayerCharacter.cs
@@ -5,6 +5,6 @@ namespace Nocturnis.Creatures.Characters;
public interface IPlayerCharacter : IBaseCharacter
{
- IDashboardTab DashboardTab { get; set; }
- IPrimaryBoard MotherBoard { get; set; }
+ IDashboardTab CurrentDashboardTab { get; set; }
+ IPrimaryModuleBoard MotherBoard { get; set; }
}
\ No newline at end of file
diff --git a/src/Dashboards/IDashboard.cs b/src/Dashboards/IDashboard.cs
new file mode 100644
index 0000000..5e325e2
--- /dev/null
+++ b/src/Dashboards/IDashboard.cs
@@ -0,0 +1,8 @@
+using Nocturnis.Communicators;
+
+namespace Nocturnis.Dashboards;
+
+public interface IDashboard : INodeInterface
+{
+ HashSet Communicators { get; set; }
+}
\ No newline at end of file
diff --git a/src/DataStructures/Data/DataVariable.cs b/src/DataStructures/Data/DataVariable.cs
index a7c8386..f210032 100644
--- a/src/DataStructures/Data/DataVariable.cs
+++ b/src/DataStructures/Data/DataVariable.cs
@@ -33,55 +33,55 @@ public class DataVariable
public object Data { get; set; }
public DataType Type { get; set; }
//StringName? Type { get; set; }
- int Int
+ public virtual int Int
{
get => (int)Data;
set => Data = value;
}
- public double Real
+ public virtual double Real
{
get => (double)Data;
set => Data = value;
}
- public Complex Complex
+ public virtual Complex Complex
{
get => (Complex)Data;
set => Data = value;
}
- public DataVariable[] Array
+ public virtual DataVariable[] Array
{
get => Data as DataVariable[];
set => Data = value;
}
- public R2 R2
+ public virtual R2 R2
{
get => Data as R2;
set => Data = value;
}
- public C2 C2
+ public virtual C2 C2
{
get => Data as C2;
set => Data = value;
}
- public bool Bit
+ public virtual bool Bit
{
get => (bool)Data;
set => Data = value;
}
- public string String
+ public virtual string String
{
get => Data as string;
set => Data = value;
}
- public Dictionary Struct
+ public virtual Dictionary Struct
{
get => Data as Dictionary;
set => Data = value;
diff --git a/src/DataStructures/Data/DefaultDataConst.cs b/src/DataStructures/Data/DefaultDataConst.cs
new file mode 100644
index 0000000..8b1d1ee
--- /dev/null
+++ b/src/DataStructures/Data/DefaultDataConst.cs
@@ -0,0 +1,22 @@
+using System.Numerics;
+using Godot;
+using Skeleton.Algebra;
+using Skeleton.Algebra.DimensionProviders;
+
+namespace Nocturnis.DataStructures.Data;
+using R2 = CategoryOf.OnField.FVector;
+using C2 = CategoryOf.OnField.FVector;
+
+public class DefaultDataConst : DataVariable
+{
+ public static DefaultDataConst Const = new();
+ public override int Int => 0;
+ public override double Real => 0;
+ public override Complex Complex => 0;
+ public override DataVariable[] Array => [];
+ public override R2 R2 => new ();
+ public override C2 C2 => new ();
+ public override bool Bit => false;
+ public override string String => "";
+ public override Dictionary Struct => new();
+}
\ No newline at end of file
diff --git a/src/DataStructures/DataCache.cs b/src/DataStructures/DataCache.cs
index 44d2bae..2db7944 100644
--- a/src/DataStructures/DataCache.cs
+++ b/src/DataStructures/DataCache.cs
@@ -10,7 +10,12 @@ namespace Nocturnis.DataStructures;
public class DataCache : CacheItem
{
public new static DataCache Null => new (x => (null, DataTypeConstant.BaseDataTypes.Null));
- public DataCache(Func rec) : base(rec) => throw new Exception("CONSTRUCTION NOT ALLOWED");
+
+ public DataCache(Func rec)
+ {
+ Value = new DataVariable();
+ ProxyCalculator = c => (rec(c).Data, rec(c).Type);
+ }
public DataCache(Func rec)
{
diff --git a/src/DataStructures/DefaultDataCache.cs b/src/DataStructures/DefaultDataCache.cs
new file mode 100644
index 0000000..648ddc2
--- /dev/null
+++ b/src/DataStructures/DefaultDataCache.cs
@@ -0,0 +1,25 @@
+using Nocturnis.DataStructures.Data;
+using Nocturnis.DataStructures.DataTypes;
+using Skeleton.DataStructure;
+
+namespace Nocturnis.DataStructures;
+
+public class DefaultDataCache : DataCache
+{
+ public static readonly DefaultDataCache Default = new DefaultDataCache();
+
+ public DefaultDataCache() : base(cache => new DataVariable())
+ {
+
+ }
+
+ public override DataVariable Get => DefaultDataConst.Const;
+
+ public DefaultDataCache(Func rec) : base(rec)
+ {
+ }
+
+ public DefaultDataCache(Func rec) : base(rec)
+ {
+ }
+}
\ No newline at end of file
diff --git a/src/Enigmos/Boards/IPrimaryBoard.cs b/src/Enigmos/Boards/IPrimaryBoard.cs
deleted file mode 100644
index b9fd898..0000000
--- a/src/Enigmos/Boards/IPrimaryBoard.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Nocturnis.Enigmos.Modules;
-
-namespace Nocturnis.Enigmos.Boards;
-
-public interface IPrimaryBoard : IBaseBoard
-{
- IEngineModule Engine { get; set; }
- IRootModule Root { get; set; }
-}
\ No newline at end of file
diff --git a/src/Enigmos/Boards/IPrimaryModuleBoard.cs b/src/Enigmos/Boards/IPrimaryModuleBoard.cs
new file mode 100644
index 0000000..c9d510e
--- /dev/null
+++ b/src/Enigmos/Boards/IPrimaryModuleBoard.cs
@@ -0,0 +1,14 @@
+using Nocturnis.Creatures;
+using Nocturnis.Creatures.Characters;
+using Nocturnis.Enigmos.Modules;
+
+namespace Nocturnis.Enigmos.Boards;
+
+public interface IPrimaryModuleBoard : IBaseBoard
+{
+ IEngineModule Engine { get; set; }
+ IRootModule Root { get; set; }
+ double IdlePower { get; }
+ void Init(IBaseCreature player);
+ void Start();
+}
\ No newline at end of file
diff --git a/src/Enigmos/Modules/ECommunicateModule.cs b/src/Enigmos/Modules/ECommunicateModule.cs
index 0b0568b..808bf50 100644
--- a/src/Enigmos/Modules/ECommunicateModule.cs
+++ b/src/Enigmos/Modules/ECommunicateModule.cs
@@ -56,7 +56,7 @@ public static class ECommunicateModule
}
public static IBaseCommunicator[] CompatibleCommunicators(this ICommunicateModule module) =>
- CreatureControl.Instance.CurrentCharacter!.DashboardTab.AllCommunicators
+ CreatureControl.Instance.CurrentCharacter!.CurrentDashboardTab.AllCommunicators
.Where(module.IsMatch)
.ToArray();
}
diff --git a/src/Enigmos/Modules/ETerminalModule.cs b/src/Enigmos/Modules/ETerminalModule.cs
index f2ae458..fa26b74 100644
--- a/src/Enigmos/Modules/ETerminalModule.cs
+++ b/src/Enigmos/Modules/ETerminalModule.cs
@@ -1,9 +1,19 @@
+using Nocturnis.Enigmos.Ports.DataPorts.Directions;
+
namespace Nocturnis.Enigmos.Modules;
public static class ETerminalModule
{
public static void Consume(this ITerminalModule m)
{
+ foreach (IDataInPort p in m.Ports.OfType())
+ {
+ if (!p.Connected)
+ {
+ m.Finished = true;
+ return;
+ }
+ }
m.Drain();
m.Finished = true;
}
diff --git a/src/Enigmos/Ports/DataPorts/Directions/IDataInPort.cs b/src/Enigmos/Ports/DataPorts/Directions/IDataInPort.cs
index 53df0cd..03a1254 100644
--- a/src/Enigmos/Ports/DataPorts/Directions/IDataInPort.cs
+++ b/src/Enigmos/Ports/DataPorts/Directions/IDataInPort.cs
@@ -5,5 +5,5 @@ namespace Nocturnis.Enigmos.Ports.DataPorts.Directions;
public interface IDataInPort : IDataPort
{
DataCache GetData { get; }
- new IDataOutPort? ConnectedPort { get; set; }
+ new IDataOutPort ConnectedPort { get; set; }
}
diff --git a/src/Enigmos/Ports/IBasePort.cs b/src/Enigmos/Ports/IBasePort.cs
index a52cce4..f82d727 100644
--- a/src/Enigmos/Ports/IBasePort.cs
+++ b/src/Enigmos/Ports/IBasePort.cs
@@ -8,9 +8,9 @@ public interface IBasePort
{
Vector2 PositionToBoard { get; }
bool Connected { get; }
- IBaseModule? Module { get; set; }
+ IBaseModule Module { get; set; }
bool IsMatch(IBasePort oth);
- IBasePort? ConnectedPort { get; set; }
+ IBasePort ConnectedPort { get; set; }
void SetStatusConnected();
void SetStatusNormal();
void SetStatusPending();
diff --git a/src/Enigmos/Ports/SignalPorts/Directions/ISignalOutPort.cs b/src/Enigmos/Ports/SignalPorts/Directions/ISignalOutPort.cs
index 4625d58..e02eaf8 100644
--- a/src/Enigmos/Ports/SignalPorts/Directions/ISignalOutPort.cs
+++ b/src/Enigmos/Ports/SignalPorts/Directions/ISignalOutPort.cs
@@ -5,7 +5,7 @@ namespace Nocturnis.Enigmos.Ports.SignalPorts.Directions;
public interface ISignalOutPort : ISignalPort
{
new IRoutingModule Module { get; set; }
- new ISignalInPort? ConnectedPort { get; set; }
+ new ISignalInPort ConnectedPort { get; set; }
void Route();
}
\ No newline at end of file
diff --git a/src/GlobalManagement/Controls/CreatureControl.cs b/src/GlobalManagement/Controls/CreatureControl.cs
index 79bff96..8a73083 100644
--- a/src/GlobalManagement/Controls/CreatureControl.cs
+++ b/src/GlobalManagement/Controls/CreatureControl.cs
@@ -19,5 +19,5 @@ public class CreatureControl
{
}
- public IPlayerCharacter? CurrentCharacter { get; set; }
+ public IPlayerCharacter CurrentCharacter { get; set; }
}
\ No newline at end of file
diff --git a/src/GlobalManagement/Controls/EnigmosControl.cs b/src/GlobalManagement/Controls/EnigmosControl.cs
index d96d510..061f281 100644
--- a/src/GlobalManagement/Controls/EnigmosControl.cs
+++ b/src/GlobalManagement/Controls/EnigmosControl.cs
@@ -24,14 +24,22 @@ public class EnigmosControl
public void ShutDownEngine()
{
+ GlobalProvider.SceneProvider.RootScene.EngineSwitch.TextureNormal =
+ GlobalProvider.TextureProvider.EngineSwitchOff;
EngineUp = false;
}
public void PowerUpEngine()
{
+ CreatureControl.Instance.CurrentCharacter.MotherBoard.Reset();
+ GlobalProvider.SceneProvider.RootScene.EngineSwitch.TextureNormal =
+ GlobalProvider.TextureProvider.EngineSwitchOn;
EngineUp = true;
}
public double Energy { get; set; } = 0d;
public bool EngineUp { get; private set; }
+ public double IdlePower => CreatureControl.Instance.CurrentCharacter.MotherBoard.IdlePower + VoidPower;
+ public double VoidPower { get; set; } = 0;
+
}
diff --git a/src/GlobalManagement/Providers/GlobalProvider.cs b/src/GlobalManagement/Providers/GlobalProvider.cs
index d85dd64..2e008b6 100644
--- a/src/GlobalManagement/Providers/GlobalProvider.cs
+++ b/src/GlobalManagement/Providers/GlobalProvider.cs
@@ -14,6 +14,7 @@ public static class GlobalProvider
public static IPolymorphismProvider PolymorphismProvider { get; set; }
public static IDataTypeProvider DataTypeProvider { get; set; }
public static IProcessProvider ProcessProvider { get; set; }
+ public static ITextureProvider TextureProvider { get; set; }
public static class ModulePreviewMapper
where TModule : IBaseModule
diff --git a/src/GlobalManagement/Providers/ISceneProvider.cs b/src/GlobalManagement/Providers/ISceneProvider.cs
index 98e97bd..76b81bc 100644
--- a/src/GlobalManagement/Providers/ISceneProvider.cs
+++ b/src/GlobalManagement/Providers/ISceneProvider.cs
@@ -4,5 +4,6 @@ namespace Nocturnis.GlobalManagement.Providers;
public interface ISceneProvider
{
- IRootScene? RootScene { get; set; }
+ IRootScene RootScene { get; set; }
+
}
diff --git a/src/GlobalManagement/Providers/ITextureProvider.cs b/src/GlobalManagement/Providers/ITextureProvider.cs
index 19676f8..93d2d34 100644
--- a/src/GlobalManagement/Providers/ITextureProvider.cs
+++ b/src/GlobalManagement/Providers/ITextureProvider.cs
@@ -6,6 +6,8 @@ namespace Nocturnis.GlobalManagement.Providers;
public interface ITextureProvider
{
- Texture2D ModuleTextureMapper(IBaseModule module);
- Texture2D ItemTextureMapper(IBaseItem item);
-}
\ No newline at end of file
+ Texture2D EngineSwitchOn { get; set; }
+ Texture2D EngineSwitchOff { get; set; }
+ Texture2D LEDOn { get; set; }
+ Texture2D LEDOff { get; set; }
+}
diff --git a/src/Hermeteus/IBracketChapter.cs b/src/Hermeteus/IBracketChapter.cs
new file mode 100644
index 0000000..aafbb13
--- /dev/null
+++ b/src/Hermeteus/IBracketChapter.cs
@@ -0,0 +1,14 @@
+using Skeleton.DataStructure.Tree;
+
+namespace Nocturnis.Hermeteus;
+
+public interface IBracketChapter : IBracketRouter
+{
+ IBracketStory Story { get; set; }
+ string State { get; set; }
+ bool Finished { get; set; }
+ string Chapter { get; set; }
+ IBracketTopic CurrentTopic { get; set; }
+ HashSet Children { get; set; }
+ HashSet Conditions { get; set; }
+}
diff --git a/src/Hermeteus/IBracketRouter.cs b/src/Hermeteus/IBracketRouter.cs
new file mode 100644
index 0000000..466ff47
--- /dev/null
+++ b/src/Hermeteus/IBracketRouter.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.Hermeteus;
+
+public interface IBracketRouter
+{
+ IBracketRouter Route();
+}
\ No newline at end of file
diff --git a/src/Hermeteus/IBracketStory.cs b/src/Hermeteus/IBracketStory.cs
new file mode 100644
index 0000000..f75904a
--- /dev/null
+++ b/src/Hermeteus/IBracketStory.cs
@@ -0,0 +1,9 @@
+using Skeleton.DataStructure.Tree;
+
+namespace Nocturnis.Hermeteus;
+
+public interface IBracketStory : IBracketRouter
+{
+ IBracketChapter CurrentChapter { get; set; }
+ IBracketChapter[] Children { get; set; }
+}
diff --git a/src/Hermeteus/IBracketTalk.cs b/src/Hermeteus/IBracketTalk.cs
new file mode 100644
index 0000000..91d2dcc
--- /dev/null
+++ b/src/Hermeteus/IBracketTalk.cs
@@ -0,0 +1,17 @@
+using Godot;
+
+namespace Nocturnis.Hermeteus;
+
+public interface IBracketTalk : IBracketRouter
+{
+ IBracketTopic Topic { get; set; }
+ string TriggerStatus { get; set; }
+ string EnterStatus { get; set; }
+ double TriggerEsc { get; set; }
+ bool CleanPrevious { get; set; }
+ string[] BraLines { get; set; }
+ string[] KetLines { get; set; }
+ HashSet Conditions { get; set; }
+ Vector2[] ArrowMarkers { get; set; }
+ bool Finished { get; set; }
+}
diff --git a/src/Hermeteus/IBracketTopic.cs b/src/Hermeteus/IBracketTopic.cs
new file mode 100644
index 0000000..046fdcb
--- /dev/null
+++ b/src/Hermeteus/IBracketTopic.cs
@@ -0,0 +1,13 @@
+using Skeleton.DataStructure.Tree;
+
+namespace Nocturnis.Hermeteus;
+
+public interface IBracketTopic : IBracketRouter
+{
+ IBracketChapter Chapter { get; set; }
+ string Topic { get; set; }
+ bool Finished { get; set; }
+ HashSet Children { get; set; }
+ IBracketTalk CurrentTalk { get; set; }
+ HashSet Conditions { get; set; }
+}
diff --git a/src/Hermeteus/ICondition.cs b/src/Hermeteus/ICondition.cs
new file mode 100644
index 0000000..6d4b421
--- /dev/null
+++ b/src/Hermeteus/ICondition.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.Hermeteus;
+
+public interface ICondition
+{
+ Func Check { get; set; }
+}
\ No newline at end of file
diff --git a/src/Hermeteus/Processors/IBracketProcessor.cs b/src/Hermeteus/Processors/IBracketProcessor.cs
new file mode 100644
index 0000000..a188c28
--- /dev/null
+++ b/src/Hermeteus/Processors/IBracketProcessor.cs
@@ -0,0 +1,16 @@
+using Nocturnis.UIElements;
+
+namespace Nocturnis.Hermeteus.Processors;
+
+public interface IBracketProcessor
+{
+ IInstructionHint Bra { get; }
+ IInstructionHint Ket { get; }
+ void BraCallback();
+ void KetCallback();
+ bool BraFinished { get; set; }
+ bool KetFinished { get; set; }
+ double BracketEsc { get; set; }
+ string Status { get; set; }
+ void Process(double delta);
+}
diff --git a/src/IControlNode.cs b/src/IControlNode.cs
new file mode 100644
index 0000000..d934ddc
--- /dev/null
+++ b/src/IControlNode.cs
@@ -0,0 +1,9 @@
+using Godot;
+
+namespace Nocturnis;
+
+public interface IControlNode : INodeInterface
+{
+ Vector2 Position { get; set; }
+ Vector2 Size { get; set; }
+}
\ No newline at end of file
diff --git a/src/INodeInterface.cs b/src/INodeInterface.cs
index 3bdbea9..89e6e0f 100644
--- a/src/INodeInterface.cs
+++ b/src/INodeInterface.cs
@@ -4,5 +4,7 @@ namespace Nocturnis;
public interface INodeInterface
{
-
-}
\ No newline at end of file
+ void RemoveChild(Node node);
+ void AddChild(Node node, bool forceReadableName = false, Node.InternalMode @internal = (Node.InternalMode)(0));
+ bool Visible { get; set; }
+}
diff --git a/src/Inventories/ItemSlots/ItemSlots/IChemicalItemSlot.cs b/src/Inventories/ItemSlots/ItemSlots/IChemicalItemSlot.cs
index 67b1884..86b2339 100644
--- a/src/Inventories/ItemSlots/ItemSlots/IChemicalItemSlot.cs
+++ b/src/Inventories/ItemSlots/ItemSlots/IChemicalItemSlot.cs
@@ -4,5 +4,5 @@ namespace Nocturnis.Inventories.ItemSlots.ItemSlots;
public interface IChemicalItemSlot
{
- IBaseChemicalItem? Item { get; set; }
+ IBaseChemicalItem Item { get; set; }
}
\ No newline at end of file
diff --git a/src/Scenes/IRootScene.cs b/src/Scenes/IRootScene.cs
index e885842..c3f7601 100644
--- a/src/Scenes/IRootScene.cs
+++ b/src/Scenes/IRootScene.cs
@@ -1,5 +1,6 @@
using Godot;
using Nocturnis.UIElements;
+using Nocturnis.UIElements.Layers;
namespace Nocturnis.Scenes;
@@ -7,4 +8,8 @@ public interface IRootScene
{
void ChangeScene(Node scene);
IKeyListener KeyListener { get; set; }
+ TextureButton EngineSwitch { get; set; }
+ IWindowLayer WindowLayer { get; set; }
+ IInstructionHint Bra { get; set; }
+ IInstructionHint Ket { get; set; }
}
\ No newline at end of file
diff --git a/src/Scenes/Worlds/IWorld.cs b/src/Scenes/Worlds/IWorld.cs
new file mode 100644
index 0000000..a894068
--- /dev/null
+++ b/src/Scenes/Worlds/IWorld.cs
@@ -0,0 +1,9 @@
+using Godot;
+using Nocturnis.UIElements.Layers;
+
+namespace Nocturnis.Scenes.Worlds;
+
+public interface IWorld : INodeInterface
+{
+ IDashboardLayer DashboardLayer { get; set; }
+}
diff --git a/src/UIElements/IDashboardTab.cs b/src/UIElements/IDashboardTab.cs
index ce3ac09..e8e1f99 100644
--- a/src/UIElements/IDashboardTab.cs
+++ b/src/UIElements/IDashboardTab.cs
@@ -1,8 +1,12 @@
using Nocturnis.Communicators;
+using Nocturnis.Dashboards;
namespace Nocturnis.UIElements;
-public interface IDashboardTab
+public interface IDashboardTab : INodeInterface
{
IEnumerable AllCommunicators { get; }
+ void Init();
+ void AddDashboard(IDashboard dashboard);
+ bool[] Used { get; set; }
}
\ No newline at end of file
diff --git a/src/UIElements/IInstructionHint.cs b/src/UIElements/IInstructionHint.cs
new file mode 100644
index 0000000..4c344de
--- /dev/null
+++ b/src/UIElements/IInstructionHint.cs
@@ -0,0 +1,9 @@
+namespace Nocturnis.UIElements;
+
+public interface IInstructionHint : INodeInterface
+{
+ void Load(string content);
+ void Load(string content, Action callBack);
+ void Clean();
+ void Clean(Action callBack);
+}
\ No newline at end of file
diff --git a/src/UIElements/Layers/IDashboardLayer.cs b/src/UIElements/Layers/IDashboardLayer.cs
new file mode 100644
index 0000000..1285c1b
--- /dev/null
+++ b/src/UIElements/Layers/IDashboardLayer.cs
@@ -0,0 +1,9 @@
+using Godot;
+
+namespace Nocturnis.UIElements.Layers;
+
+public interface IDashboardLayer : INodeInterface
+{
+ IDashboardTab DashboardTab { get; set; }
+
+}
\ No newline at end of file
diff --git a/src/UIElements/Layers/IWindowLayer.cs b/src/UIElements/Layers/IWindowLayer.cs
new file mode 100644
index 0000000..0dbc75f
--- /dev/null
+++ b/src/UIElements/Layers/IWindowLayer.cs
@@ -0,0 +1,6 @@
+namespace Nocturnis.UIElements.Layers;
+
+public interface IWindowLayer : INodeInterface
+{
+
+}
\ No newline at end of file