mirror of
https://github.com/decaf-emu/decaf-emu.git
synced 2026-10-14 17:48:39 +00:00
209 lines
5.6 KiB
C++
209 lines
5.6 KiB
C++
#include "decafsdl.h"
|
|
#include "config.h"
|
|
|
|
static int
|
|
getButtonMapping(vpad::Channel channel, vpad::Core button)
|
|
{
|
|
switch (button) {
|
|
case vpad::Core::Up:
|
|
return config::input::vpad0::button_up;
|
|
case vpad::Core::Down:
|
|
return config::input::vpad0::button_down;
|
|
case vpad::Core::Left:
|
|
return config::input::vpad0::button_left;
|
|
case vpad::Core::Right:
|
|
return config::input::vpad0::button_right;
|
|
case vpad::Core::A:
|
|
return config::input::vpad0::button_a;
|
|
case vpad::Core::B:
|
|
return config::input::vpad0::button_b;
|
|
case vpad::Core::X:
|
|
return config::input::vpad0::button_x;
|
|
case vpad::Core::Y:
|
|
return config::input::vpad0::button_y;
|
|
case vpad::Core::TriggerR:
|
|
return config::input::vpad0::button_trigger_r;
|
|
case vpad::Core::TriggerL:
|
|
return config::input::vpad0::button_trigger_l;
|
|
case vpad::Core::TriggerZR:
|
|
return config::input::vpad0::button_trigger_zr;
|
|
case vpad::Core::TriggerZL:
|
|
return config::input::vpad0::button_trigger_zl;
|
|
case vpad::Core::LeftStick:
|
|
return config::input::vpad0::button_stick_l;
|
|
case vpad::Core::RightStick:
|
|
return config::input::vpad0::button_stick_r;
|
|
case vpad::Core::Plus:
|
|
return config::input::vpad0::button_plus;
|
|
case vpad::Core::Minus:
|
|
return config::input::vpad0::button_minus;
|
|
case vpad::Core::Home:
|
|
return config::input::vpad0::button_home;
|
|
case vpad::Core::Sync:
|
|
return config::input::vpad0::button_sync;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
static int
|
|
getAxisMapping(vpad::Channel channel, vpad::CoreAxis axis)
|
|
{
|
|
switch (axis) {
|
|
case vpad::CoreAxis::LeftStickX:
|
|
return config::input::vpad0::left_stick_x;
|
|
case vpad::CoreAxis::LeftStickY:
|
|
return config::input::vpad0::left_stick_y;
|
|
case vpad::CoreAxis::RightStickX:
|
|
return config::input::vpad0::right_stick_x;
|
|
case vpad::CoreAxis::RightStickY:
|
|
return config::input::vpad0::right_stick_y;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
decaf::input::MouseButton
|
|
DecafSDL::translateMouseButton(int button)
|
|
{
|
|
switch (button) {
|
|
case SDL_BUTTON_LEFT:
|
|
return decaf::input::MouseButton::Left;
|
|
case SDL_BUTTON_RIGHT:
|
|
return decaf::input::MouseButton::Right;
|
|
case SDL_BUTTON_MIDDLE:
|
|
return decaf::input::MouseButton::Middle;
|
|
default:
|
|
return decaf::input::MouseButton::Unknown;
|
|
}
|
|
}
|
|
|
|
decaf::input::KeyboardKey
|
|
DecafSDL::translateKeyCode(SDL_Keysym sym)
|
|
{
|
|
switch (sym.sym) {
|
|
case SDLK_TAB:
|
|
return decaf::input::KeyboardKey::Tab;
|
|
case SDLK_LEFT:
|
|
return decaf::input::KeyboardKey::LeftArrow;
|
|
case SDLK_RIGHT:
|
|
return decaf::input::KeyboardKey::RightArrow;
|
|
case SDLK_UP:
|
|
return decaf::input::KeyboardKey::UpArrow;
|
|
case SDLK_DOWN:
|
|
return decaf::input::KeyboardKey::DownArrow;
|
|
case SDLK_PAGEUP:
|
|
return decaf::input::KeyboardKey::PageUp;
|
|
case SDLK_PAGEDOWN:
|
|
return decaf::input::KeyboardKey::PageDown;
|
|
case SDLK_HOME:
|
|
return decaf::input::KeyboardKey::Home;
|
|
case SDLK_END:
|
|
return decaf::input::KeyboardKey::End;
|
|
case SDLK_DELETE:
|
|
return decaf::input::KeyboardKey::Delete;
|
|
case SDLK_BACKSPACE:
|
|
return decaf::input::KeyboardKey::Backspace;
|
|
case SDLK_RETURN:
|
|
return decaf::input::KeyboardKey::Enter;
|
|
case SDLK_ESCAPE:
|
|
return decaf::input::KeyboardKey::Escape;
|
|
case SDLK_LCTRL:
|
|
return decaf::input::KeyboardKey::LeftControl;
|
|
case SDLK_RCTRL:
|
|
return decaf::input::KeyboardKey::RightControl;
|
|
case SDLK_LSHIFT:
|
|
return decaf::input::KeyboardKey::LeftShift;
|
|
case SDLK_RSHIFT:
|
|
return decaf::input::KeyboardKey::RightShift;
|
|
case SDLK_LALT:
|
|
return decaf::input::KeyboardKey::LeftAlt;
|
|
case SDLK_RALT:
|
|
return decaf::input::KeyboardKey::RightAlt;
|
|
case SDLK_LGUI:
|
|
return decaf::input::KeyboardKey::LeftSuper;
|
|
case SDLK_RGUI:
|
|
return decaf::input::KeyboardKey::RightSuper;
|
|
default:
|
|
if (sym.sym >= SDLK_a && sym.sym <= SDLK_z) {
|
|
auto id = (sym.sym - SDLK_a) + static_cast<int>(decaf::input::KeyboardKey::A);
|
|
return static_cast<decaf::input::KeyboardKey>(id);
|
|
} else if (sym.sym >= SDLK_F1 && sym.sym <= SDLK_F12) {
|
|
auto id = (sym.sym - SDLK_F1) + static_cast<int>(decaf::input::KeyboardKey::F1);
|
|
return static_cast<decaf::input::KeyboardKey>(id);
|
|
}
|
|
|
|
return decaf::input::KeyboardKey::Unknown;
|
|
}
|
|
}
|
|
|
|
// VPAD
|
|
vpad::Type
|
|
DecafSDL::getControllerType(vpad::Channel channel)
|
|
{
|
|
return vpad::Type::DRC;
|
|
}
|
|
|
|
ButtonStatus
|
|
DecafSDL::getButtonStatus(vpad::Channel channel, vpad::Core button)
|
|
{
|
|
int numKeys = 0;
|
|
auto scancode = getButtonMapping(channel, button);
|
|
auto state = SDL_GetKeyboardState(&numKeys);
|
|
|
|
if (scancode >= 0 && scancode < numKeys && state[scancode]) {
|
|
return ButtonStatus::ButtonPressed;
|
|
}
|
|
|
|
return ButtonStatus::ButtonReleased;
|
|
}
|
|
|
|
float
|
|
DecafSDL::getAxisValue(vpad::Channel channel, vpad::CoreAxis axis)
|
|
{
|
|
return 0.0f;
|
|
}
|
|
|
|
// WPAD
|
|
wpad::Type
|
|
DecafSDL::getControllerType(wpad::Channel channel)
|
|
{
|
|
return wpad::Type::Disconnected;
|
|
}
|
|
|
|
ButtonStatus
|
|
DecafSDL::getButtonStatus(wpad::Channel channel, wpad::Core button)
|
|
{
|
|
return ButtonStatus::ButtonReleased;
|
|
}
|
|
|
|
ButtonStatus
|
|
DecafSDL::getButtonStatus(wpad::Channel channel, wpad::Classic button)
|
|
{
|
|
return ButtonStatus::ButtonReleased;
|
|
}
|
|
|
|
ButtonStatus
|
|
DecafSDL::getButtonStatus(wpad::Channel channel, wpad::Nunchuck button)
|
|
{
|
|
return ButtonStatus::ButtonReleased;
|
|
}
|
|
|
|
ButtonStatus
|
|
DecafSDL::getButtonStatus(wpad::Channel channel, wpad::Pro button)
|
|
{
|
|
return ButtonStatus::ButtonReleased;
|
|
}
|
|
|
|
float
|
|
DecafSDL::getAxisValue(wpad::Channel channel, wpad::NunchuckAxis axis)
|
|
{
|
|
return 0.0f;
|
|
}
|
|
|
|
float
|
|
DecafSDL::getAxisValue(wpad::Channel channel, wpad::ProAxis axis)
|
|
{
|
|
return 0.0f;
|
|
}
|