2
1
Fork 0
mirror of https://github.com/yuzu-emu/yuzu.git synced 2024-07-04 23:31:19 +01:00

core: Update input interpreter

This commit is contained in:
german77 2021-09-20 20:53:04 -05:00 committed by Narr the Reg
parent 1b82d5bb4f
commit e14ae06391
4 changed files with 18 additions and 54 deletions

View file

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "core/core.h" #include "core/core.h"
#include "core/hid/hid_types.h"
#include "core/hid/input_interpreter.h" #include "core/hid/input_interpreter.h"
#include "core/hle/service/hid/controllers/npad.h" #include "core/hle/service/hid/controllers/npad.h"
#include "core/hle/service/hid/hid.h" #include "core/hle/service/hid/hid.h"
@ -38,25 +39,23 @@ void InputInterpreter::ResetButtonStates() {
} }
} }
bool InputInterpreter::IsButtonPressed(HIDButton button) const { bool InputInterpreter::IsButtonPressed(Core::HID::NpadButton button) const {
return (button_states[current_index] & (1U << static_cast<u8>(button))) != 0; return (button_states[current_index] & static_cast<u32>(button)) != 0;
} }
bool InputInterpreter::IsButtonPressedOnce(HIDButton button) const { bool InputInterpreter::IsButtonPressedOnce(Core::HID::NpadButton button) const {
const bool current_press = const bool current_press = (button_states[current_index] & static_cast<u32>(button)) != 0;
(button_states[current_index] & (1U << static_cast<u8>(button))) != 0; const bool previous_press = (button_states[previous_index] & static_cast<u32>(button)) != 0;
const bool previous_press =
(button_states[previous_index] & (1U << static_cast<u8>(button))) != 0;
return current_press && !previous_press; return current_press && !previous_press;
} }
bool InputInterpreter::IsButtonHeld(HIDButton button) const { bool InputInterpreter::IsButtonHeld(Core::HID::NpadButton button) const {
u32 held_buttons{button_states[0]}; u32 held_buttons{button_states[0]};
for (std::size_t i = 1; i < button_states.size(); ++i) { for (std::size_t i = 1; i < button_states.size(); ++i) {
held_buttons &= button_states[i]; held_buttons &= button_states[i];
} }
return (held_buttons & (1U << static_cast<u8>(button))) != 0; return (held_buttons & static_cast<u32>(button)) != 0;
} }

View file

@ -12,46 +12,14 @@ namespace Core {
class System; class System;
} }
namespace Core::HID {
enum class NpadButton : u64;
}
namespace Service::HID { namespace Service::HID {
class Controller_NPad; class Controller_NPad;
} }
enum class HIDButton : u8 {
A,
B,
X,
Y,
LStick,
RStick,
L,
R,
ZL,
ZR,
Plus,
Minus,
DLeft,
DUp,
DRight,
DDown,
LStickLeft,
LStickUp,
LStickRight,
LStickDown,
RStickLeft,
RStickUp,
RStickRight,
RStickDown,
LeftSL,
LeftSR,
RightSL,
RightSR,
};
/** /**
* The InputInterpreter class interfaces with HID to retrieve button press states. * The InputInterpreter class interfaces with HID to retrieve button press states.
* Input is intended to be polled every 50ms so that a button is considered to be * Input is intended to be polled every 50ms so that a button is considered to be
@ -76,7 +44,7 @@ public:
* *
* @returns True when the button is pressed. * @returns True when the button is pressed.
*/ */
[[nodiscard]] bool IsButtonPressed(HIDButton button) const; [[nodiscard]] bool IsButtonPressed(Core::HID::NpadButton button) const;
/** /**
* Checks whether any of the buttons in the parameter list is pressed. * Checks whether any of the buttons in the parameter list is pressed.
@ -85,7 +53,7 @@ public:
* *
* @returns True when at least one of the buttons is pressed. * @returns True when at least one of the buttons is pressed.
*/ */
template <HIDButton... T> template <Core::HID::NpadButton... T>
[[nodiscard]] bool IsAnyButtonPressed() { [[nodiscard]] bool IsAnyButtonPressed() {
return (IsButtonPressed(T) || ...); return (IsButtonPressed(T) || ...);
} }
@ -98,7 +66,7 @@ public:
* *
* @returns True when the button is pressed once. * @returns True when the button is pressed once.
*/ */
[[nodiscard]] bool IsButtonPressedOnce(HIDButton button) const; [[nodiscard]] bool IsButtonPressedOnce(Core::HID::NpadButton button) const;
/** /**
* Checks whether any of the buttons in the parameter list is pressed once. * Checks whether any of the buttons in the parameter list is pressed once.
@ -107,7 +75,7 @@ public:
* *
* @returns True when at least one of the buttons is pressed once. * @returns True when at least one of the buttons is pressed once.
*/ */
template <HIDButton... T> template <Core::HID::NpadButton... T>
[[nodiscard]] bool IsAnyButtonPressedOnce() const { [[nodiscard]] bool IsAnyButtonPressedOnce() const {
return (IsButtonPressedOnce(T) || ...); return (IsButtonPressedOnce(T) || ...);
} }
@ -119,7 +87,7 @@ public:
* *
* @returns True when the button is held down. * @returns True when the button is held down.
*/ */
[[nodiscard]] bool IsButtonHeld(HIDButton button) const; [[nodiscard]] bool IsButtonHeld(Core::HID::NpadButton button) const;
/** /**
* Checks whether any of the buttons in the parameter list is held down. * Checks whether any of the buttons in the parameter list is held down.
@ -128,7 +96,7 @@ public:
* *
* @returns True when at least one of the buttons is held down. * @returns True when at least one of the buttons is held down.
*/ */
template <HIDButton... T> template <Core::HID::NpadButton... T>
[[nodiscard]] bool IsAnyButtonHeld() const { [[nodiscard]] bool IsAnyButtonHeld() const {
return (IsButtonHeld(T) || ...); return (IsButtonHeld(T) || ...);
} }

View file

@ -9,8 +9,6 @@
#include "common/param_package.h" #include "common/param_package.h"
#include "common/string_util.h" #include "common/string_util.h"
#include "core/core.h" #include "core/core.h"
#include "core/hid/emulated_controller.h
#include "core/hid/hid_types.h
#include "core/hle/lock.h" #include "core/hle/lock.h"
#include "core/hle/service/hid/controllers/npad.h" #include "core/hle/service/hid/controllers/npad.h"
#include "core/hle/service/hid/hid.h" #include "core/hle/service/hid/hid.h"

View file

@ -24,7 +24,6 @@
#include "common/settings.h" #include "common/settings.h"
#include "core/hle/service/acc/profile_manager.h" #include "core/hle/service/acc/profile_manager.h"
#include "input_common/main.h" #include "input_common/main.h"
#include "input_common/udp/client.h"
#include "yuzu_cmd/config.h" #include "yuzu_cmd/config.h"
#include "yuzu_cmd/default_ini.h" #include "yuzu_cmd/default_ini.h"