3#ifndef GAMEPAD_INPUT_STATE_H
4#define GAMEPAD_INPUT_STATE_H
10#include "gamepad_input_axis.h"
11#include "gamepad_input_button.h"
13namespace gamepad::input {
14#if __cplusplus >= 201703L
15inline constexpr size_t kVersionMajor = 1;
16inline constexpr size_t kVersionMinor = 0;
17inline constexpr size_t kVersionPatch = 0;
18inline constexpr size_t kAxisCount = 4;
19inline constexpr uint8_t kAxisCenter = 0x80;
21static constexpr size_t kVersionMajor = 1;
22static constexpr size_t kVersionMinor = 0;
23static constexpr size_t kVersionPatch = 0;
24static constexpr size_t kAxisCount = 4;
25static constexpr uint8_t kAxisCenter = 0x80;
42 uint8_t axes[kAxisCount]{kAxisCenter, kAxisCenter, kAxisCenter, kAxisCenter};
56 memcpy(&state, data,
sizeof(state));
70 for (
size_t i = 0; i < kAxisCount; ++i) {
71 axes[i] = kAxisCenter;
83 inline bool operator[](
Button button)
const noexcept {
return (buttons & button) != 0; }
93 inline void Set(
Button button)
noexcept { buttons |=
static_cast<uint32_t
>(button); }
103 inline void Clear(
Button button)
noexcept { buttons &= ~static_cast<uint32_t>(button); }
113 inline uint8_t&
operator[](
Axis axis)
noexcept {
return axes[
static_cast<size_t>(axis)]; }
123 inline const uint8_t&
operator[](
Axis axis)
const noexcept {
return axes[
static_cast<size_t>(axis)]; }
126static_assert(
sizeof(State) == 8,
"State layout must be stable");