mirror of
https://github.com/visualboyadvance-m/visualboyadvance-m
synced 2025-10-06 08:02:50 +02:00
Compare commits
1 Commits
build-libr
...
game-contr
Author | SHA1 | Date | |
---|---|---|---|
|
d3f345208d |
@@ -211,6 +211,7 @@ std::array<Option, kNbOptions>& Option::All() {
|
||||
|
||||
/// Joypad
|
||||
uint32_t default_stick = 1;
|
||||
bool sdl_game_controller_mode = true;
|
||||
|
||||
/// Geometry
|
||||
bool fullscreen = false;
|
||||
@@ -293,6 +294,7 @@ std::array<Option, kNbOptions>& Option::All() {
|
||||
Option(OptionID::kJoy),
|
||||
Option(OptionID::kJoyAutofireThrottle, &gopts.autofire_rate, 1, 1000),
|
||||
Option(OptionID::kJoyDefault, &g_owned_opts.default_stick, 1, 4),
|
||||
Option(OptionID::kSDLGameControllerMode, &g_owned_opts.sdl_game_controller_mode),
|
||||
|
||||
/// Keyboard
|
||||
Option(OptionID::kKeyboard),
|
||||
@@ -478,6 +480,8 @@ const std::array<OptionData, kNbOptions + 1> kAllOptionsData = {
|
||||
_("The autofire toggle period, in frames (1/60 s)")},
|
||||
OptionData{"Joypad/Default", "",
|
||||
_("The number of the stick to use in single-player mode")},
|
||||
OptionData{"Joypad/SDLGameControllerMode", "SDLGameControllerMode",
|
||||
_("Whether to enable SDL GameController mode")},
|
||||
|
||||
/// Keyboard
|
||||
OptionData{"Keyboard/*", "",
|
||||
|
@@ -61,6 +61,7 @@ enum class OptionID {
|
||||
kJoy,
|
||||
kJoyAutofireThrottle,
|
||||
kJoyDefault,
|
||||
kSDLGameControllerMode,
|
||||
|
||||
/// Keyboard
|
||||
kKeyboard,
|
||||
|
@@ -65,6 +65,7 @@ static constexpr std::array<Option::Type, kNbOptions> kOptionsTypes = {
|
||||
/*kJoy*/ Option::Type::kNone,
|
||||
/*kJoyAutofireThrottle*/ Option::Type::kInt,
|
||||
/*kJoyDefault*/ Option::Type::kUnsigned,
|
||||
/*kSDLGameControllerMode*/ Option::Type::kBool,
|
||||
|
||||
/// Keyboard
|
||||
/*kKeyboard*/ Option::Type::kNone,
|
||||
|
@@ -3,9 +3,11 @@
|
||||
#include <wx/xrc/xmlres.h>
|
||||
|
||||
#include "wx/dialogs/validated-child.h"
|
||||
#include "wx/opts.h"
|
||||
#include "wx/config/option-proxy.h"
|
||||
#include "wx/config/option.h"
|
||||
#include "wx/widgets/option-validator.h"
|
||||
#include "wx/widgets/user-input-ctrl.h"
|
||||
#include "wx/wxvbam.h"
|
||||
|
||||
namespace dialogs {
|
||||
|
||||
@@ -23,9 +25,14 @@ JoypadConfig::JoypadConfig(wxWindow* parent) : wxDialog(), keep_on_top_styler_(t
|
||||
#endif
|
||||
wxXmlResource::Get()->LoadDialog(this, parent, "JoypadConfig");
|
||||
|
||||
this->Bind(wxEVT_CHECKBOX, std::bind(&JoypadConfig::ToggleSDLGameControllerMode, this),
|
||||
XRCID("SDLGameControllerMode"));
|
||||
|
||||
GetValidatedChild<wxCheckBox>(this, "SDLGameControllerMode")->SetValue(OPTION(kSDLGameControllerMode));
|
||||
|
||||
for (int joypad = 0; joypad < 4; joypad++) {
|
||||
wxWindow* panel = GetValidatedChild(this, wxString::Format("joy%d", joypad + 1));
|
||||
|
||||
|
||||
GetValidatedChild(panel, "DefaultConfig")
|
||||
->SetValidator(
|
||||
widgets::OptionSelectedValidator(config::OptionID::kJoyDefault, joypad + 1));
|
||||
@@ -82,4 +89,19 @@ void JoypadConfig::ClearJoypad(wxWindow* panel) {
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace dialogs
|
||||
void JoypadConfig::ToggleSDLGameControllerMode() {
|
||||
OPTION(kSDLGameControllerMode) = GetValidatedChild<wxCheckBox>(this, "SDLGameControllerMode")
|
||||
->IsChecked();
|
||||
ClearAllJoypads();
|
||||
wxGetApp().frame->PollAllJoysticks();
|
||||
}
|
||||
|
||||
void JoypadConfig::ClearAllJoypads() {
|
||||
for (unsigned joypad = 0; joypad < 4; joypad++) {
|
||||
wxWindow* panel = GetValidatedChild(this, wxString::Format("joy%d", joypad + 1));
|
||||
|
||||
ClearJoypad(panel);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace dialogs
|
@@ -25,6 +25,12 @@ private:
|
||||
// Clears all Joypad controls.
|
||||
void ClearJoypad(wxWindow* panel);
|
||||
|
||||
// Clears all Joypad controls for all Joypads.
|
||||
void ClearAllJoypads();
|
||||
|
||||
// Toggle SDL GameController mode for all joysticks.
|
||||
void ToggleSDLGameControllerMode();
|
||||
|
||||
const widgets::KeepOnTopStyler keep_on_top_styler_;
|
||||
};
|
||||
|
||||
|
@@ -3,6 +3,8 @@
|
||||
#include <wx/timer.h>
|
||||
#include <SDL.h>
|
||||
|
||||
#include "wx/config/option-proxy.h"
|
||||
#include "wx/config/option.h"
|
||||
#include "wx/wxvbam.h"
|
||||
|
||||
namespace {
|
||||
@@ -171,7 +173,7 @@ wxSDLJoyState::wxSDLJoyState(int sdl_index)
|
||||
|
||||
wxSDLJoyState::wxSDLJoyState(wxJoystick joystick) : wx_joystick_(joystick) {
|
||||
int sdl_index = wx_joystick_.sdl_index_;
|
||||
if (SDL_IsGameController(sdl_index)) {
|
||||
if (OPTION(kSDLGameControllerMode) && SDL_IsGameController(sdl_index)) {
|
||||
game_controller_ = SDL_GameControllerOpen(sdl_index);
|
||||
if (game_controller_)
|
||||
sdl_joystick_ = SDL_GameControllerGetJoystick(game_controller_);
|
||||
|
@@ -314,6 +314,8 @@ public:
|
||||
}
|
||||
|
||||
void PollJoysticks() { joy.Poll(); }
|
||||
|
||||
void PollAllJoysticks() { joy.PollAllJoysticks(); }
|
||||
|
||||
// Poll joysticks with timer.
|
||||
void StartJoyPollTimer();
|
||||
|
@@ -4,6 +4,12 @@
|
||||
<title>Joypad Configuration</title>
|
||||
<object class="wxBoxSizer">
|
||||
<orient>wxVERTICAL</orient>
|
||||
<object class="sizeritem">
|
||||
<flag>wxALIGN_CENTRE_HORIZONTAL</flag>
|
||||
<object class="wxCheckBox" name="SDLGameControllerMode">
|
||||
<label>SDL GameController Mode</label>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxNotebook">
|
||||
<object class="notebookpage">
|
||||
|
Reference in New Issue
Block a user