2#ifndef RAGE_INPUT_DEVICE_H
3#define RAGE_INPUT_DEVICE_H
5#include "Etterna/Models/Misc/EnumHelper.h"
9const int NUM_JOYSTICKS = 32;
10const int NUM_PUMPS = 2;
56#define FOREACH_InputDevice(i) FOREACH_ENUM(InputDevice, i)
58InputDeviceToString(InputDevice i) ->
const std::string&;
60StringToInputDevice(
const std::string& s) -> InputDevice;
62IsJoystick(InputDevice
id) ->
bool
64 return DEVICE_JOY1 <=
id &&
id < DEVICE_JOY1 + NUM_JOYSTICKS;
67IsPump(InputDevice
id) ->
bool
69 return DEVICE_PUMP1 <=
id &&
id < DEVICE_PUMP1 + NUM_PUMPS;
72IsMouse(InputDevice
id) ->
bool
74 return id == DEVICE_MOUSE;
81 , sDesc(std::move(sDesc_))
92 return lhs.id == rhs.id && lhs.sDesc == rhs.sDesc;
98 return !operator==(lhs, rhs);
103 InputDeviceState_Connected,
105 InputDeviceState_Unplugged,
107 InputDeviceState_NeedsMultitap,
109 InputDeviceState_NoInputHandler,
111 NUM_InputDeviceState,
112 InputDeviceState_Invalid
115InputDeviceStateToString(InputDeviceState ids) ->
const std::string&;
293 KEY_LAST_OTHER = 511,
385DeviceButtonToString(DeviceButton i) -> std::string;
387StringToDeviceButton(
const std::string& s) -> DeviceButton;
392 InputDevice device{ InputDevice_Invalid };
393 DeviceButton button{ DeviceButton_Invalid };
409 std::chrono::steady_clock::time_point ts;
412 : ts(std::chrono::microseconds{ 0 })
415 DeviceInput(InputDevice d, DeviceButton b,
float l = 0)
420 , ts(std::chrono::microseconds{ 0 })
426 const std::chrono::steady_clock::time_point& t)
430 , bDown(level > 0.5F)
436 const std::chrono::steady_clock::time_point& t,
445 [[nodiscard]]
auto ToString()
const -> std::string;
446 auto FromString(
const std::string& s) -> bool;
448 [[nodiscard]]
auto IsValid()
const ->
bool
450 return device != InputDevice_Invalid;
452 void MakeInvalid() { device = InputDevice_Invalid; };
454 [[nodiscard]]
auto IsJoystick()
const ->
bool
456 return ::IsJoystick(device);
458 [[nodiscard]]
auto IsMouse()
const ->
bool { return ::IsMouse(device); }
466 return lhs.device == rhs.device && lhs.button == rhs.button;
471 return !operator==(lhs, rhs);
478 if (lhs.device != rhs.device) {
479 return lhs.device < rhs.device;
481 return lhs.button < rhs.button;
486 return operator<(rhs, lhs);
491 return !operator<(rhs, lhs);
496 return !operator<(lhs, rhs);
499typedef std::vector<DeviceInput> DeviceInputList;