From 7a48bf788e3806dcebaad6077dce0bf1b89199d5 Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 21 Aug 2022 12:03:46 +0200 Subject: [PATCH] Nodes - Added static boolean node --- .../StaticBooleanValueNodeCustomView.axaml | 13 ++++++++ .../StaticBooleanValueNodeCustomView.axaml.cs | 19 +++++++++++ .../StaticBooleanValueNodeCustomViewModel.cs | 27 +++++++++++++++ .../Nodes/Static/StaticBooleanValueNode.cs | 33 +++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml create mode 100644 src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml.cs create mode 100644 src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomViewModel.cs create mode 100644 src/Artemis.VisualScripting/Nodes/Static/StaticBooleanValueNode.cs diff --git a/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml new file mode 100644 index 000000000..4207380d2 --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml @@ -0,0 +1,13 @@ + + + False + True + + diff --git a/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml.cs b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml.cs new file mode 100644 index 000000000..a60961c46 --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomView.axaml.cs @@ -0,0 +1,19 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.ReactiveUI; + +namespace Artemis.VisualScripting.Nodes.Static.Screens; + +public partial class StaticBooleanValueNodeCustomView : ReactiveUserControl +{ + public StaticBooleanValueNodeCustomView() + { + InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } +} \ No newline at end of file diff --git a/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomViewModel.cs b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomViewModel.cs new file mode 100644 index 000000000..6dde68817 --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Static/Screens/StaticBooleanValueNodeCustomViewModel.cs @@ -0,0 +1,27 @@ +using Artemis.Core; +using Artemis.UI.Shared.Services.NodeEditor; +using Artemis.UI.Shared.Services.NodeEditor.Commands; +using Artemis.UI.Shared.VisualScripting; +using ReactiveUI; + +namespace Artemis.VisualScripting.Nodes.Static.Screens; + +public class StaticBooleanValueNodeCustomViewModel : CustomNodeViewModel +{ + private readonly StaticBooleanValueNode _node; + private readonly INodeEditorService _nodeEditorService; + + public StaticBooleanValueNodeCustomViewModel(StaticBooleanValueNode node, INodeScript script, INodeEditorService nodeEditorService) : base(node, script) + { + _node = node; + _nodeEditorService = nodeEditorService; + + NodeModified += (_, _) => this.RaisePropertyChanged(nameof(CurrentValue)); + } + + public int? CurrentValue + { + get => _node.Storage ? 1 : 0; + set => _nodeEditorService.ExecuteCommand(Script, new UpdateStorage(_node, value == 1)); + } +} \ No newline at end of file diff --git a/src/Artemis.VisualScripting/Nodes/Static/StaticBooleanValueNode.cs b/src/Artemis.VisualScripting/Nodes/Static/StaticBooleanValueNode.cs new file mode 100644 index 000000000..76000d70b --- /dev/null +++ b/src/Artemis.VisualScripting/Nodes/Static/StaticBooleanValueNode.cs @@ -0,0 +1,33 @@ +using Artemis.Core; +using Artemis.VisualScripting.Nodes.Static.Screens; + +namespace Artemis.VisualScripting.Nodes.Static; + +[Node("Boolean-Value", "Outputs a configurable static boolean value.", "Static", OutputType = typeof(bool))] +public class StaticBooleanValueNode : Node +{ + #region Constructors + + public StaticBooleanValueNode() + : base("Boolean", "Outputs a configurable static boolean value.") + { + Output = CreateOutputPin(); + } + + #endregion + + #region Properties & Fields + + public OutputPin Output { get; } + + #endregion + + #region Methods + + public override void Evaluate() + { + Output.Value = Storage; + } + + #endregion +} \ No newline at end of file