mirror of
https://github.com/Zelda64Recomp/Zelda64Recomp.git
synced 2026-04-28 13:11:58 +00:00
feat: allow configuring menu toggle button
This commit is contained in:
parent
3c34fa63c1
commit
dad9663bc4
4 changed files with 34 additions and 6 deletions
|
|
@ -36,9 +36,13 @@ namespace recomp {
|
||||||
DEFINE_INPUT(X_AXIS_NEG, 0, "Left") \
|
DEFINE_INPUT(X_AXIS_NEG, 0, "Left") \
|
||||||
DEFINE_INPUT(X_AXIS_POS, 0, "Right") \
|
DEFINE_INPUT(X_AXIS_POS, 0, "Right") \
|
||||||
|
|
||||||
|
#define DEFINE_RECOMP_UI_INPUTS() \
|
||||||
|
DEFINE_INPUT(TOGGLE_MENU, 0, "Toggle Menu")
|
||||||
|
|
||||||
#define DEFINE_ALL_INPUTS() \
|
#define DEFINE_ALL_INPUTS() \
|
||||||
DEFINE_N64_BUTTON_INPUTS() \
|
DEFINE_N64_BUTTON_INPUTS() \
|
||||||
DEFINE_N64_AXIS_INPUTS()
|
DEFINE_N64_AXIS_INPUTS() \
|
||||||
|
DEFINE_RECOMP_UI_INPUTS()
|
||||||
|
|
||||||
// Enum containing every recomp input.
|
// Enum containing every recomp input.
|
||||||
#define DEFINE_INPUT(name, value, readable) name,
|
#define DEFINE_INPUT(name, value, readable) name,
|
||||||
|
|
@ -104,6 +108,8 @@ namespace recomp {
|
||||||
std::vector<InputField> analog_right;
|
std::vector<InputField> analog_right;
|
||||||
std::vector<InputField> analog_up;
|
std::vector<InputField> analog_up;
|
||||||
std::vector<InputField> analog_down;
|
std::vector<InputField> analog_down;
|
||||||
|
|
||||||
|
std::vector<InputField> toggle_menu;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const DefaultN64Mappings default_n64_keyboard_mappings;
|
extern const DefaultN64Mappings default_n64_keyboard_mappings;
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,7 @@ void assign_all_mappings(recomp::InputDevice device, const recomp::DefaultN64Map
|
||||||
assign_mapping_complete(device, recomp::GameInput::X_AXIS_POS, values.analog_right);
|
assign_mapping_complete(device, recomp::GameInput::X_AXIS_POS, values.analog_right);
|
||||||
assign_mapping_complete(device, recomp::GameInput::Y_AXIS_NEG, values.analog_down);
|
assign_mapping_complete(device, recomp::GameInput::Y_AXIS_NEG, values.analog_down);
|
||||||
assign_mapping_complete(device, recomp::GameInput::Y_AXIS_POS, values.analog_up);
|
assign_mapping_complete(device, recomp::GameInput::Y_AXIS_POS, values.analog_up);
|
||||||
|
assign_mapping_complete(device, recomp::GameInput::TOGGLE_MENU, values.toggle_menu);
|
||||||
};
|
};
|
||||||
|
|
||||||
void recomp::reset_input_bindings() {
|
void recomp::reset_input_bindings() {
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,11 @@ bool sdl_event_filter(void* userdata, SDL_Event* event) {
|
||||||
break;
|
break;
|
||||||
case SDL_EventType::SDL_CONTROLLERBUTTONDOWN:
|
case SDL_EventType::SDL_CONTROLLERBUTTONDOWN:
|
||||||
if (scanning_device != recomp::InputDevice::COUNT) {
|
if (scanning_device != recomp::InputDevice::COUNT) {
|
||||||
if (event->cbutton.button == SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_BACK) {
|
auto menuToggleBinding0 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 0, recomp::InputDevice::Controller);
|
||||||
|
auto menuToggleBinding1 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 1, recomp::InputDevice::Controller);
|
||||||
|
// note - magic number: 0 is InputType::None
|
||||||
|
if ((menuToggleBinding0.input_type != 0 && event->cbutton.button == menuToggleBinding0.input_id) ||
|
||||||
|
(menuToggleBinding1.input_type != 0 && event->cbutton.button == menuToggleBinding1.input_id)) {
|
||||||
recomp::cancel_scanning_input();
|
recomp::cancel_scanning_input();
|
||||||
} else if (scanning_device == recomp::InputDevice::Controller) {
|
} else if (scanning_device == recomp::InputDevice::Controller) {
|
||||||
SDL_ControllerButtonEvent* button_event = &event->cbutton;
|
SDL_ControllerButtonEvent* button_event = &event->cbutton;
|
||||||
|
|
@ -325,6 +329,9 @@ const recomp::DefaultN64Mappings recomp::default_n64_keyboard_mappings = {
|
||||||
.analog_down = {
|
.analog_down = {
|
||||||
{.input_type = (uint32_t)InputType::Keyboard, .input_id = SDL_SCANCODE_S}
|
{.input_type = (uint32_t)InputType::Keyboard, .input_id = SDL_SCANCODE_S}
|
||||||
},
|
},
|
||||||
|
.toggle_menu = {
|
||||||
|
{.input_type = (uint32_t)InputType::Keyboard, .input_id = SDL_SCANCODE_ESCAPE}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const recomp::DefaultN64Mappings recomp::default_n64_controller_mappings = {
|
const recomp::DefaultN64Mappings recomp::default_n64_controller_mappings = {
|
||||||
|
|
@ -386,6 +393,9 @@ const recomp::DefaultN64Mappings recomp::default_n64_controller_mappings = {
|
||||||
.analog_down = {
|
.analog_down = {
|
||||||
{.input_type = (uint32_t)InputType::ControllerAnalog, .input_id = SDL_CONTROLLER_AXIS_LEFTY + 1},
|
{.input_type = (uint32_t)InputType::ControllerAnalog, .input_id = SDL_CONTROLLER_AXIS_LEFTY + 1},
|
||||||
},
|
},
|
||||||
|
.toggle_menu = {
|
||||||
|
{.input_type = (uint32_t)InputType::ControllerDigital, .input_id = SDL_CONTROLLER_BUTTON_BACK},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void recomp::poll_inputs() {
|
void recomp::poll_inputs() {
|
||||||
|
|
|
||||||
|
|
@ -1193,10 +1193,17 @@ int cont_button_to_key(SDL_ControllerButtonEvent& button) {
|
||||||
case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_X:
|
case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_X:
|
||||||
case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_START:
|
case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_START:
|
||||||
return SDLK_f;
|
return SDLK_f;
|
||||||
// Allows closing the menu
|
|
||||||
case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_BACK:
|
|
||||||
return SDLK_ESCAPE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allows closing the menu
|
||||||
|
auto menuToggleBinding0 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 0, recomp::InputDevice::Controller);
|
||||||
|
auto menuToggleBinding1 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 1, recomp::InputDevice::Controller);
|
||||||
|
// note - magic number: 0 is InputType::None
|
||||||
|
if ((menuToggleBinding0.input_type != 0 && button.button == menuToggleBinding0.input_id) ||
|
||||||
|
(menuToggleBinding1.input_type != 0 && button.button == menuToggleBinding1.input_id)) {
|
||||||
|
return SDLK_ESCAPE;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1383,7 +1390,11 @@ void draw_hook(RT64::RenderCommandList* command_list, RT64::RenderFramebuffer* s
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_EventType::SDL_CONTROLLERBUTTONDOWN:
|
case SDL_EventType::SDL_CONTROLLERBUTTONDOWN:
|
||||||
if (cur_event.cbutton.button == SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_BACK) {
|
auto menuToggleBinding0 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 0, recomp::InputDevice::Controller);
|
||||||
|
auto menuToggleBinding1 = recomp::get_input_binding(recomp::GameInput::TOGGLE_MENU, 1, recomp::InputDevice::Controller);
|
||||||
|
// note - magic number: 0 is InputType::None
|
||||||
|
if ((menuToggleBinding0.input_type != 0 && cur_event.cbutton.button == menuToggleBinding0.input_id) ||
|
||||||
|
(menuToggleBinding1.input_type != 0 && cur_event.cbutton.button == menuToggleBinding1.input_id)) {
|
||||||
open_config = true;
|
open_config = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue