using Godot; using Nocturnis.Enigmos.Modules; using Nocturnis.Enigmos.Modules.ComputationalModules; using Nocturnis.Enigmos.Ports; using Nocturnis.Enigmos.Ports.DataPorts.Directions; using Nocturnis.GlobalManagement.Constants; using Skeleton.Utils.Helpers; namespace Enigmos.Modules.TerminalModules.TestingModules; public abstract partial class RealReaderModule : BaseModule, ITerminalModule, IOperationModule { private AnimatedSprite2D? RealReader { get; set; } public IDataInPort[] DataInPorts { get; set; } = Array.Empty(); public override void Init() { base.Init(); this.DataInInit("Input", 3); this.SetInputType(EnigmosConstant.DataPortTypes.Real); RealReader = GetNode("RealReader"); RealReader.SpeedScale = 0; RealReader.Play(); PostInit(); } public void Drain() { double max = DataInPorts[0].GetData.Get!.Double; double min = DataInPorts[2].GetData.Get!.Double; double value = DataInPorts[1].GetData.Get!.Double; double range = max - min; double percentage = (range == 0 ? 0d : value / range).DoubleCut(); int frame = Mathf.FloorToInt(percentage * 122); RealReader!.SpeedScale = (frame - RealReader.Frame) / 60f; } public bool Finished { get; set; } }