summaryrefslogtreecommitdiffstats
path: root/src/input_common/drivers/virtual_gamepad.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-12-18 02:16:13 +0100
committerGitHub <noreply@github.com>2022-12-18 02:16:13 +0100
commit48108a8c9b28e08f86aab5c2ad41414e455f4706 (patch)
tree2dc3ff390a17ebdee32958eac619632cef424fe4 /src/input_common/drivers/virtual_gamepad.cpp
parentMerge pull request #7450 from FernandoS27/ndc-vulkan (diff)
parentinput_common: Add virtual gamepad (diff)
downloadyuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar.gz
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar.bz2
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar.lz
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar.xz
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.tar.zst
yuzu-48108a8c9b28e08f86aab5c2ad41414e455f4706.zip
Diffstat (limited to 'src/input_common/drivers/virtual_gamepad.cpp')
-rw-r--r--src/input_common/drivers/virtual_gamepad.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/input_common/drivers/virtual_gamepad.cpp b/src/input_common/drivers/virtual_gamepad.cpp
new file mode 100644
index 000000000..7db945aa6
--- /dev/null
+++ b/src/input_common/drivers/virtual_gamepad.cpp
@@ -0,0 +1,78 @@
+// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "input_common/drivers/virtual_gamepad.h"
+
+namespace InputCommon {
+constexpr std::size_t PlayerIndexCount = 10;
+
+VirtualGamepad::VirtualGamepad(std::string input_engine_) : InputEngine(std::move(input_engine_)) {
+ for (std::size_t i = 0; i < PlayerIndexCount; i++) {
+ PreSetController(GetIdentifier(i));
+ }
+}
+
+void VirtualGamepad::SetButtonState(std::size_t player_index, int button_id, bool value) {
+ if (player_index > PlayerIndexCount) {
+ return;
+ }
+ const auto identifier = GetIdentifier(player_index);
+ SetButton(identifier, button_id, value);
+}
+
+void VirtualGamepad::SetButtonState(std::size_t player_index, VirtualButton button_id, bool value) {
+ SetButtonState(player_index, static_cast<int>(button_id), value);
+}
+
+void VirtualGamepad::SetStickPosition(std::size_t player_index, int axis_id, float x_value,
+ float y_value) {
+ if (player_index > PlayerIndexCount) {
+ return;
+ }
+ const auto identifier = GetIdentifier(player_index);
+ SetAxis(identifier, axis_id * 2, x_value);
+ SetAxis(identifier, (axis_id * 2) + 1, y_value);
+}
+
+void VirtualGamepad::SetStickPosition(std::size_t player_index, VirtualStick axis_id, float x_value,
+ float y_value) {
+ SetStickPosition(player_index, static_cast<int>(axis_id), x_value, y_value);
+}
+
+void VirtualGamepad::ResetControllers() {
+ for (std::size_t i = 0; i < PlayerIndexCount; i++) {
+ SetStickPosition(i, VirtualStick::Left, 0.0f, 0.0f);
+ SetStickPosition(i, VirtualStick::Right, 0.0f, 0.0f);
+
+ SetButtonState(i, VirtualButton::ButtonA, false);
+ SetButtonState(i, VirtualButton::ButtonB, false);
+ SetButtonState(i, VirtualButton::ButtonX, false);
+ SetButtonState(i, VirtualButton::ButtonY, false);
+ SetButtonState(i, VirtualButton::StickL, false);
+ SetButtonState(i, VirtualButton::StickR, false);
+ SetButtonState(i, VirtualButton::TriggerL, false);
+ SetButtonState(i, VirtualButton::TriggerR, false);
+ SetButtonState(i, VirtualButton::TriggerZL, false);
+ SetButtonState(i, VirtualButton::TriggerZR, false);
+ SetButtonState(i, VirtualButton::ButtonPlus, false);
+ SetButtonState(i, VirtualButton::ButtonMinus, false);
+ SetButtonState(i, VirtualButton::ButtonLeft, false);
+ SetButtonState(i, VirtualButton::ButtonUp, false);
+ SetButtonState(i, VirtualButton::ButtonRight, false);
+ SetButtonState(i, VirtualButton::ButtonDown, false);
+ SetButtonState(i, VirtualButton::ButtonSL, false);
+ SetButtonState(i, VirtualButton::ButtonSR, false);
+ SetButtonState(i, VirtualButton::ButtonHome, false);
+ SetButtonState(i, VirtualButton::ButtonCapture, false);
+ }
+}
+
+PadIdentifier VirtualGamepad::GetIdentifier(std::size_t player_index) const {
+ return {
+ .guid = Common::UUID{},
+ .port = player_index,
+ .pad = 0,
+ };
+}
+
+} // namespace InputCommon