minesweeper_game/Assets/Scripts/Input/Action.cs
2025-03-15 14:30:26 -04:00

59 lines
1.3 KiB
C#

using System;
using UnityEngine;
public class Action {
#region Structs/Enums
public enum EActionType {
Hold, PressOnce, ReleaseOnce, HoldTwice, PressTwice, ReleaseTwice, MultiHold, MultiPress, MultiRelease
}
#endregion
#region Fields
// Maximum time between 2 presses before it's considered a multi-press
public static TimeSpan MultiDelayTime = TimeSpan.FromMilliseconds(200);
private ActionNode _node;
#endregion
#region Properties
#endregion
#region Constructor
public Action(KeyCode key, EActionType type = EActionType.Hold, int multi =0) {
if ((int) type >= 3 && multi <= 1)
multi = 2;
_node = new ActionNodeManager(key, type, multi);
}
private Action(ActionNode node) {
_node = node;
}
#endregion
#region Methods
public bool IsActive() {
return _node.IsActive();
}
#endregion
#region Operators
static public Action operator &(Action lhs, Action rhs) {
return new Action(new AndActionNode(lhs._node, rhs._node));
}
static public Action operator |(Action lhs, Action rhs) {
return new Action(new OrActionNode(lhs._node, rhs._node));
}
static public Action operator !(Action rhs) {
return new Action(new NotActionNode(rhs._node));
}
#endregion
}