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