using T3.Core.Utils; namespace Lib.numbers.@bool.logic; [Guid("0bec016a-5e1b-467a-8273-368d4d6b9935")] public sealed class Trigger : Instance { [Output(Guid = "2451ea62-9915-4ec1-a65e-4d44a3758fa8")] public readonly Slot Result = new(); public Trigger() { Result.UpdateAction += Update; } private void Update(EvaluationContext context) { if (!context.HasTimeChanged(ref _lastUpdateTime)) return; var value = BoolValue.GetValue(context); var wasHit = MathUtils.WasTriggered(value, ref _isSet); var onlyOnDown = OnlyOnDown.GetValue(context); Result.Value = onlyOnDown ? wasHit : value; var needsRefreshNextFrame = onlyOnDown && wasHit; Result.DirtyFlag.Trigger = needsRefreshNextFrame ? DirtyFlagTrigger.Animated : DirtyFlagTrigger.None; ColorInGraph.DirtyFlag.Clear(); Result.DirtyFlag.Clear(); } private double _lastUpdateTime = -1; private bool _isSet; [Input(Guid = "E7C1F0AF-DA6D-4E33-AC86-7DC96BFE7EB3")] public readonly InputSlot BoolValue = new(); [Input(Guid = "6AD61E57-1073-483E-A0DD-96A9033AA39B")] public readonly InputSlot OnlyOnDown = new(); [Input(Guid = "FA14AC1D-3247-4D36-BC96-14FF7356720A")] public readonly InputSlot ColorInGraph = new(); }