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