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