using Godot; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Modules.InterlayerModules; using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Enigmos.Modules.ComputationalModules; using Nocturnis.GlobalManagement.Constants; namespace Enigmos.Modules.InterlayerModules; public partial class FilterOutputModule : NullaryComputationalModule, IInterlayerModule { public override Vector2 PositionToBoard => base.PositionToBoard + (ParentModule?.PositionToBoard ?? Vector2.Zero); public IFilterModule FilterModule { get => (ParentModule as IFilterModule)!; set => ParentModule = value; } public IDataOutPort? Output { get; set; } public override IEnumerable Ports => new[] { Output! }; protected override bool Draggable => false; protected override bool HasManual => false; public override void Init() { base.Init(); this.DataOutInit("Output", 1); Output = DataOutPorts[0]; PostInit(); } public override void Define() { FilterModule.Filter(); Output!.OutData.UpdateCalculation( cache => (FilterModule.CachedResult, EnigmosConstant.DataPortTypes.AnyArrayType) ); } public IBasePort UnderlyingPort => Output!; public IProgrammableModule? ParentModule { get; set; } }