bracket system

This commit is contained in:
h z
2024-07-29 17:24:31 +01:00
parent f6a8f3e899
commit 097e3522a5
12 changed files with 40 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
using Alchegos.DataStructure; using Alchegos.DataStructure;
using Enigmos.Cables; using Enigmos.Cables;
using Enigmos.Modules; using Enigmos.Modules;
using Enigmos.Modules.ControllingModules;
using Enigmos.Modules.ProgrammableModules; using Enigmos.Modules.ProgrammableModules;
using Godot; using Godot;
using Nocturnis.Enigmos.Boards; using Nocturnis.Enigmos.Boards;
@@ -51,14 +52,14 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
public bool ManualOpened { get; set; } public bool ManualOpened { get; set; }
protected HashSet<IBaseModule> Modules { get; set; } = new(); protected HashSet<IBaseModule> Modules { get; set; } = new();
protected IEnumerable<ProgrammableModule> ProgrammableModules() => protected IEnumerable<ProgrammableModule> ProgrammableModules =>
Modules Modules
.OfType<ProgrammableModule>(); .OfType<ProgrammableModule>();
public IEnumerable<ITerminalModule> TerminalModules => public IEnumerable<ITerminalModule> TerminalModules =>
Modules Modules
.OfType<ITerminalModule>() .OfType<ITerminalModule>()
.Union(ProgrammableModules().SelectMany(module => module.UnderlyingBoard!.TerminalModules)); .Union(ProgrammableModules.SelectMany(module => module.UnderlyingBoard!.TerminalModules));
public IPanelViewer PanelViewer { get; set; } public IPanelViewer PanelViewer { get; set; }
public Dictionary<IBasePort, IBaseCable> CablePairing { get; set; } = new(); public Dictionary<IBasePort, IBaseCable> CablePairing { get; set; } = new();
@@ -111,7 +112,8 @@ public abstract partial class BaseBoard : Panel, IBaseBoard
pm.Board!.Reset(); pm.Board!.Reset();
foreach (IControllingModule cm in Modules.OfType<IControllingModule>()) foreach (IControllingModule cm in Modules.OfType<IControllingModule>())
cm.Visited = false; cm.Visited = false;
foreach (ITerminalModule tm in Modules.OfType<ITerminalModule>())
tm.Finished = true;
/* /*
foreach (IBaseModule module in Modules) foreach (IBaseModule module in Modules)

View File

@@ -8,7 +8,7 @@ using Nocturnis.GlobalManagement.Controls;
namespace Enigmos.Boards; namespace Enigmos.Boards;
public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard public partial class PrimaryModuleBoard : BaseBoard, IPrimaryModuleBoard
{ {
private IBaseCreature ManagedBy { get; set; } private IBaseCreature ManagedBy { get; set; }
public IRootModule Root { get; set; } public IRootModule Root { get; set; }
@@ -27,11 +27,10 @@ public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard
public void Start() public void Start()
{ {
if (!Root!.ActionFinished)
return;
//Root.Timer = Stopwatch.StartNew(); //Root.Timer = Stopwatch.StartNew();
Engine!.Consume(); Engine.Consume();
if (EnigmosControl.Instance.Energy < EnigmosConstant.IdlePower) if (EnigmosControl.Instance.Energy < EnigmosControl.Instance.IdlePower)
{ {
Root!.ActionFinished = true; Root!.ActionFinished = true;
EnigmosControl.Instance.ShutDownEngine(); EnigmosControl.Instance.ShutDownEngine();
@@ -40,7 +39,13 @@ public partial class PrimaryModuleBoard : BaseBoard, IPrimaryBoard
Root.Start(); Root.Start();
foreach (ITerminalModule tm in TerminalModules) foreach (ITerminalModule tm in TerminalModules)
tm.Consume(); tm.Consume();
} }
public double IdlePower => Modules.Count * 0.05;
public override void Reset()
{
base.Reset();
Root.ActionFinished = true;
}
} }

View File

@@ -53,7 +53,7 @@ public abstract partial class V2Module : BinaryComputationalModule,
if (x.Type == DataTypeConstant.BaseDataTypes.Complex || y.Type == DataTypeConstant.BaseDataTypes.Complex) if (x.Type == DataTypeConstant.BaseDataTypes.Complex || y.Type == DataTypeConstant.BaseDataTypes.Complex)
return (new C2(x.Complex, y.Complex), DataTypeConstant.BaseDataTypes.C2); 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); this.Define(Func);
} }

View File

@@ -31,6 +31,8 @@ public abstract partial class MoveActionModule : ActionModule, ITerminalModule
public override void Act() 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);
} }
} }

View File

@@ -30,7 +30,7 @@ public abstract partial class EngineModule : TerminalModule, IEngineModule
public override void Drain() public override void Drain()
{ {
base.Drain(); base.Drain();
if (FuelTank!.Item!.ContentMaterial.Layers.Count == 0) if (FuelTank.Item == null || FuelTank.Item.ContentMaterial.Layers.Count == 0)
{ {
EnigmosControl.Instance.Energy = 0; EnigmosControl.Instance.Energy = 0;
return; return;

View File

@@ -11,8 +11,8 @@ public abstract partial class SRLatchModule : BaseModule,
IDuplicateOutputModule, IDuplicateOutputModule,
IOperationModule IOperationModule
{ {
public IDataOutPort[] DataOutPorts { get; set; } = Array.Empty<IDataOutPort>(); public IDataOutPort[] DataOutPorts { get; set; }
public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>(); public IDataInPort[] DataInPorts { get; set; }
private bool State { get; set; } private bool State { get; set; }

View File

@@ -3,18 +3,15 @@ using Godot;
using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules;
using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Nocturnis.Enigmos.Ports.DataPorts.Directions;
using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Constants;
using Nocturnis.GlobalManagement.Providers;
namespace Enigmos.Modules.TerminalModules.TestingModules; namespace Enigmos.Modules.TerminalModules.TestingModules;
public abstract partial class LightEmittingDiodeModule : TerminalModule public abstract partial class LightEmittingDiodeModule : TerminalModule
{ {
private Sprite2D? LightEmittingDiode { get; set; } private Sprite2D LightEmittingDiode { get; set; }
private IDataInPort? Input { get; set; } private IDataInPort Input { get; set; }
private static readonly Texture2D TrueTexture =
ResourceLoader.Load<Texture2D>("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-T.png");
private static readonly Texture2D FalseTexture =
ResourceLoader.Load<Texture2D>("res://Resources/Circuits/Modules/Terminal/Testing/LEDBubble-F.png");
public override void Init() public override void Init()
{ {
base.Init(); base.Init();
@@ -27,10 +24,10 @@ public abstract partial class LightEmittingDiodeModule : TerminalModule
public override void Drain() public override void Drain()
{ {
if (Input!.GetData.Get!.Bit) if (Input.GetData.Get.Bit)
LightEmittingDiode!.Texture = TrueTexture; LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOn;
else else
LightEmittingDiode!.Texture = FalseTexture; LightEmittingDiode.Texture = GlobalProvider.TextureProvider.LEDOff;
Finished = true; Finished = true;
} }
} }

View File

@@ -9,7 +9,7 @@ namespace Enigmos.Modules.TerminalModules.TestingModules;
public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IOperationModule 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<IDataInPort>(); public IDataInPort[] DataInPorts { get; set; } = Array.Empty<IDataInPort>();
public override void Init() public override void Init()
@@ -29,7 +29,7 @@ public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IO
double min = DataInPorts[2].GetData.Get!.Real; double min = DataInPorts[2].GetData.Get!.Real;
double value = DataInPorts[1].GetData.Get!.Real; double value = DataInPorts[1].GetData.Get!.Real;
double range = max - min; 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); int frame = Mathf.FloorToInt(percentage * 122);
RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f; RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f;
} }

View File

@@ -17,7 +17,7 @@ public partial class DataInPort : DataPort, IDataInPort
other is DataOutPort dataOut && other is DataOutPort dataOut &&
GlobalProvider.DataTypeProvider!.DataPortTypeCompatible(DataType!, dataOut.DataType!); 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) /*public IDataPackage GetData(IRootModule root)
{ {

View File

@@ -9,11 +9,11 @@ public partial class SignalInPort : SignalPort, ISignalInPort
{ {
public new IControllingModule Module public new IControllingModule Module
{ {
get => (base.Module as PiplineModule)!; get => (base.Module as IControllingModule)!;
set => base.Module = value; set => base.Module = value;
} }
public new ISignalOutPort? ConnectedPort public new ISignalOutPort ConnectedPort
{ {
get => base.ConnectedPort as ISignalOutPort; get => base.ConnectedPort as ISignalOutPort;
set => base.ConnectedPort = value; set => base.ConnectedPort = value;

View File

@@ -15,7 +15,7 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort
} }
public new ISignalInPort? ConnectedPort public new ISignalInPort ConnectedPort
{ {
get => base.ConnectedPort as ISignalInPort; get => base.ConnectedPort as ISignalInPort;
set => base.ConnectedPort = value; set => base.ConnectedPort = value;
@@ -38,7 +38,7 @@ public partial class SignalOutPort : SignalPort, ISignalOutPort
CreatureControl.Instance.CurrentCharacter!.MotherBoard.Root.ActionFinished = true; CreatureControl.Instance.CurrentCharacter!.MotherBoard.Root.ActionFinished = true;
return; return;
} }
ConnectedPort!.Module.Visit(); ConnectedPort.Module.Visit();
} }
} }