From ee1a7167f609340f6f916b7811f1fd7a22608cf4 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Sat, 28 Dec 2024 15:39:11 +0100 Subject: [PATCH] dreamconn: open pause menu when LT+RT+Start is pressed Issue #1305 --- core/sdl/dreamconn.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++ core/sdl/dreamconn.h | 6 ++++++ 2 files changed, 54 insertions(+) diff --git a/core/sdl/dreamconn.cpp b/core/sdl/dreamconn.cpp index 7685ef26a..c379042fb 100644 --- a/core/sdl/dreamconn.cpp +++ b/core/sdl/dreamconn.cpp @@ -20,6 +20,7 @@ #ifdef USE_DREAMCONN #include "hw/maple/maple_devs.h" +#include "ui/gui.h" #include #include #include @@ -156,6 +157,47 @@ void DreamConnGamepad::handleEvent(Event event, void *arg) createDreamConnDevices(gamepad->dreamconn, event == Event::Start); } +bool DreamConnGamepad::gamepad_btn_input(u32 code, bool pressed) +{ + if (!is_detecting_input() && input_mapper) + { + DreamcastKey key = input_mapper->get_button_id(0, code); + if (key == DC_BTN_START) { + startPressed = pressed; + checkKeyCombo(); + } + } + else { + startPressed = false; + } + return SDLGamepad::gamepad_btn_input(code, pressed); +} + +bool DreamConnGamepad::gamepad_axis_input(u32 code, int value) +{ + if (!is_detecting_input()) + { + if (code == leftTrigger) { + ltrigPressed = value > 0; + checkKeyCombo(); + } + else if (code == rightTrigger) { + rtrigPressed = value > 0; + checkKeyCombo(); + } + } + else { + ltrigPressed = false; + rtrigPressed = false; + } + return SDLGamepad::gamepad_axis_input(code, value); +} + +void DreamConnGamepad::checkKeyCombo() { + if (ltrigPressed && rtrigPressed && startPressed) + gui_open_settings(); +} + #else void DreamConn::connect() { @@ -174,4 +216,10 @@ DreamConnGamepad::~DreamConnGamepad() { void DreamConnGamepad::set_maple_port(int port) { SDLGamepad::set_maple_port(port); } +bool DreamConnGamepad::gamepad_btn_input(u32 code, bool pressed) { + return SDLGamepad::gamepad_btn_input(code, pressed); +} +bool DreamConnGamepad::gamepad_axis_input(u32 code, int value) { + return SDLGamepad::gamepad_axis_input(code, value); +} #endif diff --git a/core/sdl/dreamconn.h b/core/sdl/dreamconn.h index 08ae9083b..bf2e32680 100644 --- a/core/sdl/dreamconn.h +++ b/core/sdl/dreamconn.h @@ -86,10 +86,16 @@ public: ~DreamConnGamepad(); void set_maple_port(int port) override; + bool gamepad_btn_input(u32 code, bool pressed) override; + bool gamepad_axis_input(u32 code, int value) override; static bool isDreamConn(int deviceIndex); private: static void handleEvent(Event event, void *arg); + void checkKeyCombo(); std::shared_ptr dreamconn; + bool ltrigPressed = false; + bool rtrigPressed = false; + bool startPressed = false; };