rabidus-test/Assets/Plugins/QFSW/Quantum Console/Source/Scripts/Actions/GetKey.cs

48 lines
1.2 KiB
C#
Raw Permalink Normal View History

2023-08-22 15:41:12 +03:00
using System;
using System.Linq;
using UnityEngine;
namespace QFSW.QC.Actions
{
/// <summary>
/// Waits for any key to be pressed and returns the key via the given delegate.
/// </summary>
public class GetKey : ICommandAction
{
private KeyCode _key;
private readonly Action<KeyCode> _onKey;
private static readonly KeyCode[] KeyCodes = Enum.GetValues(typeof(KeyCode))
.Cast<KeyCode>()
.Where(k => (int)k < (int)KeyCode.Mouse0)
.ToArray();
public bool IsFinished
{
get
{
_key = GetCurrentKeyDown();
return _key != KeyCode.None;
}
}
public bool StartsIdle => true;
/// <param name="onKey">The action to perform when a key is pressed.</param>
public GetKey(Action<KeyCode> onKey)
{
_onKey = onKey;
}
private KeyCode GetCurrentKeyDown()
{
return KeyCodes.FirstOrDefault(InputHelper.GetKeyDown);
}
public void Start(ActionContext context) { }
public void Finalize(ActionContext context)
{
_onKey(_key);
}
}
}