protected virtual void Update() { KeyPhase mask = GetPhaseMask(); if (mask.HasFlag(phase)) { onTrigger?.Invoke(); } #region LOCAL_FUNCTIONS KeyPhase GetPhaseMask() { var p = KeyPhase.None; p |= Input.GetKeyDown(keyCode) ? KeyPhase.Down : KeyPhase.None; p |= Input.GetKeyUp(keyCode) ? KeyPhase.Up : KeyPhase.None; p |= Input.GetKey(keyCode) ? KeyPhase.Pressed : KeyPhase.Unpressed; return(p); } #endregion }