diff --git a/src/Artemis.UI.Shared/Styles/NumberBox.axaml b/src/Artemis.UI.Shared/Styles/NumberBox.axaml index 18819b3b9..f4978d15c 100644 --- a/src/Artemis.UI.Shared/Styles/NumberBox.axaml +++ b/src/Artemis.UI.Shared/Styles/NumberBox.axaml @@ -3,27 +3,30 @@ xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:attachedProperties="clr-namespace:Artemis.UI.Shared.AttachedProperties" xmlns:system="clr-namespace:System;assembly=System.Runtime"> - - - - - + + + + - + attachedProperties:NumberBoxAssist.SuffixText="%" /> + - + - - + + - + - - - diff --git a/src/Artemis.VisualScripting/Nodes/DataModel/DataModelEventCycleNode.cs b/src/Artemis.VisualScripting/Nodes/DataModel/DataModelEventCycleNode.cs index c9c3a7be2..b0c8b684a 100644 --- a/src/Artemis.VisualScripting/Nodes/DataModel/DataModelEventCycleNode.cs +++ b/src/Artemis.VisualScripting/Nodes/DataModel/DataModelEventCycleNode.cs @@ -12,7 +12,6 @@ public class DataModelEventCycleNode : Node= CycleValues.Count()) - _currentIndex = 0; - } + if (pathValue is not IDataModelEvent && EvaluateValue(pathValue)) + Cycle(); object? outputValue = CycleValues.ElementAt(_currentIndex).PinValue; if (Output.Type.IsInstanceOfType(outputValue)) @@ -65,15 +55,6 @@ public class DataModelEventCycleNode : Node e) + private void Cycle() { - e.Value.PinConnected += OnPinConnected; - e.Value.PinDisconnected += OnPinDisconnected; - } + _currentIndex++; - private void CycleValuesOnPinRemoved(object? sender, SingleValueEventArgs e) - { - e.Value.PinConnected -= OnPinConnected; - e.Value.PinDisconnected -= OnPinDisconnected; - } - - private void OnPinDisconnected(object? sender, SingleValueEventArgs e) - { - ProcessPinDisconnected(); - } - - private void OnPinConnected(object? sender, SingleValueEventArgs e) - { - ProcessPinConnected(e.Value); - } - - private void ProcessPinConnected(IPin source) - { - if (_updating) - return; - - try - { - _updating = true; - - // No need to change anything if the types haven't changed - if (_currentType != source.Type) - ChangeCurrentType(source.Type); - } - finally - { - _updating = false; - } + if (_currentIndex >= CycleValues.Count()) + _currentIndex = 0; } private void UpdateDataModelPath() { DataModelPath? old = _dataModelPath; + + if (old?.GetValue() is IDataModelEvent oldEvent) + oldEvent.EventTriggered -= OnEventTriggered; + _dataModelPath = Storage != null ? new DataModelPath(Storage) : null; + + if (_dataModelPath?.GetValue() is IDataModelEvent newEvent) + newEvent.EventTriggered += OnEventTriggered; + old?.Dispose(); } @@ -139,10 +95,28 @@ public class DataModelEventCycleNode : Node e) + { + e.Value.PinConnected += OnPinConnected; + e.Value.PinDisconnected += OnPinDisconnected; + } + + private void OnCycleValuesOnPinRemoved(object? sender, SingleValueEventArgs e) + { + e.Value.PinConnected -= OnPinConnected; + e.Value.PinDisconnected -= OnPinDisconnected; + } + + private void OnPinDisconnected(object? sender, SingleValueEventArgs e) { if (_updating) return; + try { // If there's still a connected pin, stick to the current type @@ -157,9 +131,30 @@ public class DataModelEventCycleNode : Node e) + { + if (_updating) + return; + + try + { + _updating = true; + + // No need to change anything if the types haven't changed + if (_currentType != e.Value.Type) + ChangeCurrentType(e.Value.Type); + } + finally + { + _updating = false; + } + } + /// public void Dispose() { + if (_dataModelPath?.GetValue() is IDataModelEvent newEvent) + newEvent.EventTriggered -= OnEventTriggered; _dataModelPath?.Dispose(); } } \ No newline at end of file