48 lines
1.2 KiB
C#
48 lines
1.2 KiB
C#
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|