using Godot; using Nocturnis.DataStructures.DataPortGroups; using Nocturnis.DataStructures.DataTypes; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.GlobalManagement.Constants; using Nocturnis.GlobalManagement.Providers; using Skeleton.DataStructure; namespace Enigmos.Modules.ComputationalModules.Binary; public abstract partial class ControlledOutputModule : BinaryComputationalModule, IPolymorphismModule, IDuplicateOutputModule { [Export] private StringName? PresetDataType { get; set; } private IDataOutGroup? OutputGroup { get; set; } public HashSet ConfigurablePortGroups { get; set; } = new(); public void Inference() => DataInPorts[1].SetDataType(OutputGroup!.SelectedType); public override void Init() { base.Init(); this.DataOutInit("Output", 4); OutputGroup = GlobalProvider.DataStructureProvider!.NewDataOutGroup( this, DataOutPorts, "Output Data Type", DataTypeConstant.BaseDataTypes.Real, DataTypeConstant.DataTypeOptions.AnyType ); ConfigurablePortGroups = new HashSet { OutputGroup }; DataInPorts[0].SetDataType(DataTypeConstant.BaseDataTypes.Bit); DataInPorts[1].SetDataType(DataTypeConstant.BaseDataTypes.Real); PostInit(); } public override void Define() { (object, DataType) Func(CacheItem cache) { if (this.X(cache).Bit) return (this.Y(cache).Data!, this.Y(cache).Type!); return (0, DataTypeConstant.BaseDataTypes.Null); } this.Define(Func); } }