using Enigmos.Modules.ComputationalModules; using Enigmos.Ports; using Enigmos.Ports.DataPorts; using Godot; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Modules.InterlayerModules; using Nocturnis.Enigmos.Ports; using Nocturnis.GlobalManagement.Constants; namespace Enigmos.Modules.InterlayerModules; public partial class OptimizationValueOutputModule : NullaryComputationalModule, IInterlayerModule, IDuplicateOutputModule { public override Vector2 PositionToBoard => base.PositionToBoard + (OptimizationModule?.PositionToBoard ?? Vector2.Zero); protected override bool Draggable => false; protected override bool HasManual => false; public DataOutPort? DataOut { get; set; } public IOptimizationModule OptimizationModule { get => (ParentModule as IOptimizationModule)!; set => ParentModule = value; } public override IEnumerable Ports => new[] { DataOut }!; public override void Init() { base.Init(); this.DataOutInit("DataOut", 1); DataOut.SetDataType(EnigmosConstant.DataPortTypes.Real); PostInit(); } public override void Define() { this.Define(cache => (OptimizationModule.CachedResult.Data, OptimizationModule.CachedResult.Type) ); } public IBasePort UnderlyingPort => DataOut; public IProgrammableModule? ParentModule { get; set; } }