1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
2023-01-31 00:14:51 +01:00

69 lines
1.9 KiB
C#

using Artemis.Core;
using Artemis.Core.Services;
using Artemis.VisualScripting.Nodes.Input.Screens;
namespace Artemis.VisualScripting.Nodes.Input;
[Node("Hotkey press", "Outputs a boolean value for as long as a hotkey is pressed", "Input", OutputType = typeof(bool))]
public class HotkeyPressNode : Node<HotkeyEnableDisableNodeEntity, HotkeyPressNodeCustomViewModel>, IDisposable
{
private readonly IInputService _inputService;
private Hotkey? _toggleHotkey;
private bool _value;
public HotkeyPressNode(IInputService inputService)
{
_inputService = inputService;
_inputService.KeyboardKeyDown += InputServiceOnKeyboardKeyDown;
_inputService.KeyboardKeyUp += InputServiceOnKeyboardKeyUp;
Output = CreateOutputPin<bool>();
StorageModified += OnStorageModified;
}
public OutputPin<bool> Output { get; }
public override void Initialize(INodeScript script)
{
LoadHotkeys();
}
public override void Evaluate()
{
Output.Value = _value;
}
private void OnStorageModified(object? sender, EventArgs e)
{
LoadHotkeys();
}
private void LoadHotkeys()
{
if (Storage == null)
return;
_toggleHotkey = Storage.EnableHotkey != null ? new Hotkey(Storage.EnableHotkey) : null;
}
private void InputServiceOnKeyboardKeyDown(object? sender, ArtemisKeyboardKeyEventArgs e)
{
if (Storage == null)
return;
if (_toggleHotkey != null && _toggleHotkey.MatchesEventArgs(e))
_value = true;
}
private void InputServiceOnKeyboardKeyUp(object? sender, ArtemisKeyboardKeyEventArgs e)
{
if (Storage == null)
return;
if (_toggleHotkey != null && _toggleHotkey.MatchesEventArgs(e))
_value = false;
}
public void Dispose()
{
_inputService.KeyboardKeyUp -= InputServiceOnKeyboardKeyUp;
}
}