#pragma once
using InputReg = uint;
// флаги нажатых клавишь:
constexpr InputReg KEY_UP = 1 << 0;
constexpr InputReg KEY_DOWN = 1 << 1;
constexpr InputReg KEY_LEFT = 1 << 2;
constexpr InputReg KEY_RIGHT = 1 << 3;
constexpr InputReg KEY_ENABLE = 1 << 4; ///< enter
constexpr InputReg KEY_ESCAPE = 1 << 5;
constexpr InputReg KEY_RESET = 1 << 6; ///< F5
constexpr InputReg KEY_DEBUG = 1 << 7; ///< F3
constexpr InputReg KEY_FPS = 1 << 8; ///< F1
constexpr InputReg KEY_FULSCRN = 1 << 9; ///< F11
constexpr InputReg KEY_SCREENSHOT = 1 << 10; ///< F2
constexpr InputReg KEY_FOCUS = 1 << 11; ///< space замедление вращения и концетрация огня
constexpr InputReg KEY_SHOOT = 1 << 12; ///< W выстрел вперёд
constexpr InputReg KEY_SHIELD = 1 << 13; ///< A защитное поле
constexpr InputReg KEY_SHOOT_BACK = 1 << 14; ///< S выстрел назад
constexpr InputReg KEY_SHOOT_SIDE = 1 << 15; ///< D выстрел по сторонам
constexpr InputReg KEY_RADAR = 1 << 16; ///< E радар
constexpr InputReg KEY_RADAR_MODE = 1 << 17; ///< Q разрешение радара
/** класс хранит виртуальные нажатия клавишь
* @details нажатые клавиши берутся из платформы */
class Input {
  protected: InputReg status = 0; ///< хранит флаги нажатых клавишь
public:
  const InputReg &get_status() const { return status; }
  //! устанавливает нажатую клавишу
  void set(InputReg key) { status |= key; }
  void unset(InputReg key) { status &= ~key; }
  //! проверяет нажата ли клавиша
  bool test(InputReg key) const { return status & key; }
  //! выключает все нажатые клавиши
  void clear() { status = 0; };
};
