diff --git a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs index 091d5bc57..af4832a68 100644 --- a/src/Artemis.Core/Models/Profile/RenderProfileElement.cs +++ b/src/Artemis.Core/Models/Profile/RenderProfileElement.cs @@ -386,7 +386,7 @@ namespace Artemis.Core if (Timeline.EventOverlapMode != TimeLineEventOverlapMode.Toggle) _toggledOnByEvent = false; - + DisplayCondition.Run(); bool conditionMet = DisplayCondition.Result; if (Parent is RenderProfileElement parent && !parent.DisplayConditionMet) diff --git a/src/Artemis.Core/Services/NodeService.cs b/src/Artemis.Core/Services/NodeService.cs index faeb4bf89..47837646b 100644 --- a/src/Artemis.Core/Services/NodeService.cs +++ b/src/Artemis.Core/Services/NodeService.cs @@ -51,8 +51,8 @@ namespace Artemis.Core.Services private INode CreateNode(Type nodeType) { INode node = _kernel.Get(nodeType) as INode ?? throw new InvalidOperationException($"Node {nodeType} is not an INode"); - if (node.CustomViewModelType != null) - node.CustomViewModel = _kernel.Get(node.CustomViewModelType); + if (node is CustomViewModelNode customViewModelNode) + customViewModelNode.BaseCustomViewModel = _kernel.Get(customViewModelNode.CustomViewModelType); return node; } diff --git a/src/Artemis.Core/VisualScripting/Interfaces/INode.cs b/src/Artemis.Core/VisualScripting/Interfaces/INode.cs index 49dee4ab1..ecd06cc3f 100644 --- a/src/Artemis.Core/VisualScripting/Interfaces/INode.cs +++ b/src/Artemis.Core/VisualScripting/Interfaces/INode.cs @@ -16,9 +16,6 @@ namespace Artemis.Core public IReadOnlyCollection Pins { get; } public IReadOnlyCollection PinCollections { get; } - public Type? CustomViewModelType { get; } - public object? CustomViewModel { get; set; } - event EventHandler Resetting; void Evaluate(); diff --git a/src/Artemis.Core/VisualScripting/Node.cs b/src/Artemis.Core/VisualScripting/Node.cs index 877cf82a7..0862bdcd3 100644 --- a/src/Artemis.Core/VisualScripting/Node.cs +++ b/src/Artemis.Core/VisualScripting/Node.cs @@ -6,6 +6,8 @@ namespace Artemis.Core { public abstract class Node : CorePropertyChanged, INode { + public event EventHandler Resetting; + #region Properties & Fields private string _name; @@ -48,15 +50,6 @@ namespace Artemis.Core private readonly List _pinCollections = new(); public IReadOnlyCollection PinCollections => new ReadOnlyCollection(_pinCollections); - public Type? CustomViewModelType { get; private set; } - public object? CustomViewModel { get; set; } - - #endregion - - #region Events - - public event EventHandler Resetting; - #endregion #region Construtors @@ -67,8 +60,8 @@ namespace Artemis.Core protected Node(string name, string description) { - this.Name = name; - this.Description = description; + Name = name; + Description = description; } #endregion @@ -135,11 +128,6 @@ namespace Artemis.Core return pin; } - protected void RegisterCustomViewModel() - { - CustomViewModelType = typeof(T); - } - public abstract void Evaluate(); public virtual void Reset() @@ -149,4 +137,34 @@ namespace Artemis.Core #endregion } + + public abstract class Node : CustomViewModelNode + { + protected Node() + { + } + + protected Node(string name, string description) : base(name, description) + { + } + + public override Type CustomViewModelType => typeof(T); + public T? CustomViewModel => (T?) BaseCustomViewModel; + } + + public abstract class CustomViewModelNode : Node + { + /// + protected CustomViewModelNode() + { + } + + /// + protected CustomViewModelNode(string name, string description) : base(name, description) + { + } + + public abstract Type CustomViewModelType { get; } + public object? BaseCustomViewModel { get; set; } + } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml index 0261dc31c..1905c82e0 100644 --- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml +++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml @@ -41,7 +41,7 @@ - + diff --git a/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs b/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs index 0b62e1cef..df95609f6 100644 --- a/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs +++ b/src/Artemis.VisualScripting/Nodes/StaticValueNodes.cs @@ -4,12 +4,10 @@ using Artemis.VisualScripting.Nodes.CustomViewModels; namespace Artemis.VisualScripting.Nodes { [Node("Integer-Value", "Outputs an configurable integer value.")] - public class StaticIntegerValueNode : Node + public class StaticIntegerValueNode : Node { #region Properties & Fields - private StaticIntegerValueNodeCustomViewModel _customViewModel = new(); - public OutputPin Output { get; } #endregion @@ -20,7 +18,6 @@ namespace Artemis.VisualScripting.Nodes : base("Integer", "Outputs an configurable integer value.") { Output = CreateOutputPin(); - RegisterCustomViewModel(); } #endregion @@ -29,19 +26,17 @@ namespace Artemis.VisualScripting.Nodes public override void Evaluate() { - Output.Value = _customViewModel.Input; + Output.Value = CustomViewModel.Input; } #endregion } [Node("Double-Value", "Outputs a configurable double value.")] - public class StaticDoubleValueNode : Node + public class StaticDoubleValueNode : Node { #region Properties & Fields - private StaticDoubleValueNodeCustomViewModel _customViewModel = new(); - public OutputPin Output { get; } #endregion @@ -52,7 +47,6 @@ namespace Artemis.VisualScripting.Nodes : base("Double", "Outputs a configurable double value.") { Output = CreateOutputPin(); - RegisterCustomViewModel(); } #endregion @@ -61,19 +55,17 @@ namespace Artemis.VisualScripting.Nodes public override void Evaluate() { - Output.Value = _customViewModel.Input; + Output.Value = CustomViewModel.Input; } #endregion } [Node("String-Value", "Outputs a configurable string value.")] - public class StaticStringValueNode : Node + public class StaticStringValueNode : Node { #region Properties & Fields - private StaticStringValueNodeCustomViewModel _customViewModel = new(); - public OutputPin Output { get; } #endregion @@ -84,7 +76,6 @@ namespace Artemis.VisualScripting.Nodes : base("String", "Outputs a configurable string value.") { Output = CreateOutputPin(); - RegisterCustomViewModel(); } #endregion @@ -93,7 +84,7 @@ namespace Artemis.VisualScripting.Nodes public override void Evaluate() { - Output.Value = _customViewModel.Input; + Output.Value = CustomViewModel.Input; } #endregion @@ -101,7 +92,5 @@ namespace Artemis.VisualScripting.Nodes #region CustomViewModels - - #endregion -} +} \ No newline at end of file