diff --git a/Boards/BaseBoard.cs b/Boards/BaseBoard.cs index 6a8b998..9af2db1 100644 --- a/Boards/BaseBoard.cs +++ b/Boards/BaseBoard.cs @@ -1,6 +1,7 @@ using Alchegos.DataStructure; using Enigmos.Cables; using Enigmos.Modules; +using Enigmos.Modules.ControllingModules; using Enigmos.Modules.ProgrammableModules; using Godot; using Nocturnis.Enigmos.Boards; @@ -51,14 +52,14 @@ public abstract partial class BaseBoard : Panel, IBaseBoard public bool ManualOpened { get; set; } protected HashSet Modules { get; set; } = new(); - protected IEnumerable ProgrammableModules() => + protected IEnumerable ProgrammableModules => Modules .OfType(); public IEnumerable TerminalModules => Modules .OfType() - .Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard!.TerminalModules)); + .Union(ProgrammableModules.SelectMany(module => module.UnderlyingBoard!.TerminalModules)); public IPanelViewer PanelViewer { get; set; } public Dictionary CablePairing { get; set; } = new(); @@ -111,8 +112,9 @@ public abstract partial class BaseBoard : Panel, IBaseBoard pm.Board!.Reset(); foreach (IControllingModule cm in Modules.OfType()) cm.Visited = false; - - + foreach (ITerminalModule tm in Modules.OfType()) + tm.Finished = true; + /* foreach (IBaseModule module in Modules) { @@ -141,10 +143,10 @@ public abstract partial class BaseBoard : Panel, IBaseBoard controllingModule.Visited = false; if (module is TerminalModule terminalModule) terminalModule.Finished = false; - + foreach (DataOutPort port in module.Ports.OfType()) port.DataUpdated = false; - + }*/ } diff --git a/Boards/PrimaryModuleBoard.cs b/Boards/PrimaryModuleBoard.cs index 8411353..50aaa13 100644 --- a/Boards/PrimaryModuleBoard.cs +++ b/Boards/PrimaryModuleBoard.cs @@ -8,7 +8,7 @@ using Nocturnis.GlobalManagement.Controls; namespace Enigmos.Boards; -public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard +public partial class PrimaryModuleBoard : BaseBoard, IPrimaryModuleBoard { private IBaseCreature ManagedBy { get; set; } public IRootModule Root { get; set; } @@ -27,11 +27,10 @@ public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard public void Start() { - if (!Root!.ActionFinished) - return; + //Root.Timer = Stopwatch.StartNew(); - Engine!.Consume(); - if (EnigmosControl.Instance.Energy < EnigmosConstant.IdlePower) + Engine.Consume(); + if (EnigmosControl.Instance.Energy < EnigmosControl.Instance.IdlePower) { Root!.ActionFinished = true; EnigmosControl.Instance.ShutDownEngine(); @@ -40,7 +39,13 @@ public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard Root.Start(); foreach (ITerminalModule tm in TerminalModules) tm.Consume(); - } + public double IdlePower => Modules.Count * 0.05; + + public override void Reset() + { + base.Reset(); + Root.ActionFinished = true; + } } \ No newline at end of file diff --git a/Modules/ComputationalModules/Binary/V2Module.cs b/Modules/ComputationalModules/Binary/V2Module.cs index 21a9a1c..04a87ec 100644 --- a/Modules/ComputationalModules/Binary/V2Module.cs +++ b/Modules/ComputationalModules/Binary/V2Module.cs @@ -53,7 +53,7 @@ public abstract partial class V2Module : BinaryComputationalModule, if (x.Type == DataTypeConstant.BaseDataTypes.Complex || y.Type == DataTypeConstant.BaseDataTypes.Complex) return (new C2(x.Complex, y.Complex), DataTypeConstant.BaseDataTypes.C2); - return (new R2(x.Real, y.Real), DataTypeConstant.BaseDataTypes.Real); + return (new R2(x.Real, y.Real), DataTypeConstant.BaseDataTypes.R2); } this.Define(Func); } diff --git a/Modules/ControllingModules/ActionModules/MoveActionModule.cs b/Modules/ControllingModules/ActionModules/MoveActionModule.cs index bdd1465..4641533 100644 --- a/Modules/ControllingModules/ActionModules/MoveActionModule.cs +++ b/Modules/ControllingModules/ActionModules/MoveActionModule.cs @@ -31,6 +31,8 @@ public abstract partial class MoveActionModule : ActionModule, ITerminalModule public override void Act() { - CreatureControl.Instance.CurrentCharacter!.Action.Attack(DataInPorts[0].GetData.Get!.R2); + if (!DataInPorts[0].Connected) + return; + CreatureControl.Instance.CurrentCharacter!.Action.Move(DataInPorts[0].GetData.Get!.R2); } } diff --git a/Modules/TerminalModules/EngineModule.cs b/Modules/TerminalModules/EngineModule.cs index 18c20fe..8f03cec 100644 --- a/Modules/TerminalModules/EngineModule.cs +++ b/Modules/TerminalModules/EngineModule.cs @@ -30,7 +30,7 @@ public abstract partial class EngineModule : TerminalModule, IEngineModule public override void Drain() { base.Drain(); - if (FuelTank!.Item!.ContentMaterial.Layers.Count == 0) + if (FuelTank.Item == null || FuelTank.Item.ContentMaterial.Layers.Count == 0) { EnigmosControl.Instance.Energy = 0; return; diff --git a/Modules/TerminalModules/SRLatchModule.cs b/Modules/TerminalModules/SRLatchModule.cs index a70c0a8..670dda9 100644 --- a/Modules/TerminalModules/SRLatchModule.cs +++ b/Modules/TerminalModules/SRLatchModule.cs @@ -11,8 +11,8 @@ public abstract partial class SRLatchModule : BaseModule, IDuplicateOutputModule, IOperationModule { - public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty(); - public IDataInPort[] DataInPorts { get; set; } = Array.Empty(); + public IDataOutPort[] DataOutPorts { get; set; } + public IDataInPort[] DataInPorts { get; set; } private bool State { get; set; } diff --git a/Modules/TerminalModules/TestingModules/LightEmittingDiodeModule.cs b/Modules/TerminalModules/TestingModules/LightEmittingDiodeModule.cs index 44ffaad..856d592 100644 --- a/Modules/TerminalModules/TestingModules/LightEmittingDiodeModule.cs +++ b/Modules/TerminalModules/TestingModules/LightEmittingDiodeModule.cs @@ -3,18 +3,15 @@ using Godot; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Nocturnis.GlobalManagement.Constants; +using Nocturnis.GlobalManagement.Providers; namespace Enigmos.Modules.TerminalModules.TestingModules; public abstract partial class LightEmittingDiodeModule : TerminalModule { - private Sprite2D? LightEmittingDiode { get; set; } - private IDataInPort? Input { get; set; } + private Sprite2D LightEmittingDiode { get; set; } + private IDataInPort Input { get; set; } - private static readonly Texture2D TrueTexture = - ResourceLoader.Load("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-T.png"); - private static readonly Texture2D FalseTexture = - ResourceLoader.Load("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-F.png"); public override void Init() { base.Init(); @@ -27,10 +24,10 @@ public abstract partial class LightEmittingDiodeModule : TerminalModule public override void Drain() { - if (Input!.GetData.Get!.Bit) - LightEmittingDiode!.Texture = TrueTexture; + if (Input.GetData.Get.Bit) + LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOn; else - LightEmittingDiode!.Texture = FalseTexture; + LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOff; Finished = true; } } \ No newline at end of file diff --git a/Modules/TerminalModules/TestingModules/RealReaderModule.cs b/Modules/TerminalModules/TestingModules/RealReaderModule.cs index b093c7e..93a0463 100644 --- a/Modules/TerminalModules/TestingModules/RealReaderModule.cs +++ b/Modules/TerminalModules/TestingModules/RealReaderModule.cs @@ -9,7 +9,7 @@ namespace Enigmos.Modules.TerminalModules.TestingModules; public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IOperationModule { - private AnimatedSprite2D? RealReader { get; set; } + private AnimatedSprite2D RealReader { get; set; } public IDataInPort[] DataInPorts { get; set; } = Array.Empty(); public override void Init() @@ -29,7 +29,7 @@ public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IO double min = DataInPorts[2].GetData.Get!.Real; double value = DataInPorts[1].GetData.Get!.Real; double range = max - min; - double percentage = (range == 0 ? 0d : value / range).DoubleCut(); + double percentage = (range == 0 ? 0d : (value - min) / range).DoubleCut(); int frame = Mathf.FloorToInt(percentage * 122); RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f; } diff --git a/Ports/DataPorts/DataInPort.cs b/Ports/DataPorts/DataInPort.cs index 00c49cc..aa4a3ac 100644 --- a/Ports/DataPorts/DataInPort.cs +++ b/Ports/DataPorts/DataInPort.cs @@ -17,7 +17,7 @@ public partial class DataInPort : DataPort, IDataInPort other is DataOutPort dataOut && GlobalProvider.DataTypeProvider!.DataPortTypeCompatible(DataType!, dataOut.DataType!); - public DataCache GetData => Connected ? ConnectedPort!.OutData : DataCache.Null; + public DataCache GetData => Connected ? ConnectedPort!.OutData : DefaultDataCache.Default; /*public IDataPackage GetData(IRootModule root) { diff --git a/Ports/SignalPorts/SignalInPort.cs b/Ports/SignalPorts/SignalInPort.cs index a37a315..eef5e09 100644 --- a/Ports/SignalPorts/SignalInPort.cs +++ b/Ports/SignalPorts/SignalInPort.cs @@ -9,11 +9,11 @@ public partial class SignalInPort : SignalPort, ISignalInPort { public new IControllingModule Module { - get => (base.Module as PiplineModule)!; + get => (base.Module as IControllingModule)!; set => base.Module = value; } - public new ISignalOutPort? ConnectedPort + public new ISignalOutPort ConnectedPort { get => base.ConnectedPort as ISignalOutPort; set => base.ConnectedPort = value; diff --git a/Ports/SignalPorts/SignalOutPort.cs b/Ports/SignalPorts/SignalOutPort.cs index bae86a7..c00157d 100644 --- a/Ports/SignalPorts/SignalOutPort.cs +++ b/Ports/SignalPorts/SignalOutPort.cs @@ -15,7 +15,7 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort } - public new ISignalInPort? ConnectedPort + public new ISignalInPort ConnectedPort { get => base.ConnectedPort as ISignalInPort; set => base.ConnectedPort = value; @@ -38,7 +38,7 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort CreatureControl.Instance.CurrentCharacter!.MotherBoard.Root.ActionFinished = true; return; } - ConnectedPort!.Module.Visit(); + ConnectedPort.Module.Visit(); } } diff --git a/Ports/SignalPorts/SignalPort.cs b/Ports/SignalPorts/SignalPort.cs index fc907eb..34267ff 100644 --- a/Ports/SignalPorts/SignalPort.cs +++ b/Ports/SignalPorts/SignalPort.cs @@ -30,7 +30,7 @@ public abstract partial class SignalPort : BasePort, ISignalPort public override void SetStatusPending() => TextureNormal = GlobalProvider.EnigmosProvider!.SignalPortStatusPending; - + public override BaseCable MakeCable(IBasePort other) { BaseCable res = GlobalProvider.EnigmosProvider!.SignalCableScene.Instantiate();