diff --git a/Common/KeyMap.cpp b/Common/KeyMap.cpp index 6083fe238f..8a31095de9 100644 --- a/Common/KeyMap.cpp +++ b/Common/KeyMap.cpp @@ -69,8 +69,9 @@ static const DefMappingStruct defaultQwertyKeyboardKeyMap[] = { {VIRTKEY_RAPID_FIRE, NKCODE_SHIFT_LEFT}, {VIRTKEY_UNTHROTTLE, NKCODE_TAB}, {VIRTKEY_SPEED_TOGGLE, NKCODE_GRAVE}, - {VIRTKEY_PAUSE, NKCODE_ESCAPE}, - {VIRTKEY_REWIND, NKCODE_DEL}, + {VIRTKEY_PAUSE , NKCODE_ESCAPE}, + {VIRTKEY_REWIND , NKCODE_DEL}, + {VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT}, }; static const DefMappingStruct defaultAzertyKeyboardKeyMap[] = { @@ -98,8 +99,9 @@ static const DefMappingStruct defaultAzertyKeyboardKeyMap[] = { {VIRTKEY_RAPID_FIRE, NKCODE_SHIFT_LEFT}, {VIRTKEY_UNTHROTTLE, NKCODE_TAB}, {VIRTKEY_SPEED_TOGGLE, NKCODE_GRAVE}, - {VIRTKEY_PAUSE, NKCODE_ESCAPE}, - {VIRTKEY_REWIND, NKCODE_DEL}, + {VIRTKEY_PAUSE , NKCODE_ESCAPE}, + {VIRTKEY_REWIND , NKCODE_DEL}, + {VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT}, }; static const DefMappingStruct defaultQwertzKeyboardKeyMap[] = { @@ -127,8 +129,9 @@ static const DefMappingStruct defaultQwertzKeyboardKeyMap[] = { {VIRTKEY_RAPID_FIRE, NKCODE_SHIFT_LEFT}, {VIRTKEY_UNTHROTTLE, NKCODE_TAB}, {VIRTKEY_SPEED_TOGGLE, NKCODE_GRAVE}, - {VIRTKEY_PAUSE, NKCODE_ESCAPE}, - {VIRTKEY_REWIND, NKCODE_DEL}, + {VIRTKEY_PAUSE , NKCODE_ESCAPE}, + {VIRTKEY_REWIND , NKCODE_DEL}, + {VIRTKEY_ANALOG_LIGHTLY, NKCODE_SHIFT_RIGHT}, }; static const DefMappingStruct default360KeyMap[] = { @@ -627,6 +630,9 @@ const KeyMap_IntStrPair psp_button_names[] = { {VIRTKEY_AXIS_Y_MIN, "An.Down"}, {VIRTKEY_AXIS_X_MIN, "An.Left"}, {VIRTKEY_AXIS_X_MAX, "An.Right"}, +#ifndef MOBILE_DEVICE + { VIRTKEY_ANALOG_LIGHTLY, "Analog limiter" }, +#endif {VIRTKEY_RAPID_FIRE, "RapidFire"}, {VIRTKEY_UNTHROTTLE, "Unthrottle"}, diff --git a/Common/KeyMap.h b/Common/KeyMap.h index fc25c2026f..30fae0c7ea 100644 --- a/Common/KeyMap.h +++ b/Common/KeyMap.h @@ -46,6 +46,7 @@ enum { VIRTKEY_LOAD_STATE = 0x1000e, VIRTKEY_NEXT_SLOT = 0x1000f, VIRTKEY_TOGGLE_FULLSCREEN = 0x10010, + VIRTKEY_ANALOG_LIGHTLY = 0x10011, VIRTKEY_LAST, VIRTKEY_COUNT = VIRTKEY_LAST - VIRTKEY_FIRST }; diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index baf0871b39..94533c123e 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -288,6 +288,13 @@ void EmuScreen::onVKeyDown(int virtualKeyCode) { setVKeyAnalogY(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX); break; + case VIRTKEY_ANALOG_LIGHTLY: + setVKeyAnalogX(CTRL_STICK_LEFT, VIRTKEY_AXIS_X_MIN, VIRTKEY_AXIS_X_MAX); + setVKeyAnalogY(CTRL_STICK_LEFT, VIRTKEY_AXIS_Y_MIN, VIRTKEY_AXIS_Y_MAX); + setVKeyAnalogX(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_X_MIN, VIRTKEY_AXIS_RIGHT_X_MAX); + setVKeyAnalogY(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX); + break; + case VIRTKEY_REWIND: if (SaveState::CanRewind()) { SaveState::Rewind(); @@ -336,27 +343,36 @@ void EmuScreen::onVKeyUp(int virtualKeyCode) { setVKeyAnalogY(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX); break; + case VIRTKEY_ANALOG_LIGHTLY: + setVKeyAnalogX(CTRL_STICK_LEFT, VIRTKEY_AXIS_X_MIN, VIRTKEY_AXIS_X_MAX); + setVKeyAnalogY(CTRL_STICK_LEFT, VIRTKEY_AXIS_Y_MIN, VIRTKEY_AXIS_Y_MAX); + setVKeyAnalogX(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_X_MIN, VIRTKEY_AXIS_RIGHT_X_MAX); + setVKeyAnalogY(CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX); + break; + default: break; } } inline void EmuScreen::setVKeyAnalogX(int stick, int virtualKeyMin, int virtualKeyMax) { + const float value = virtKeys[VIRTKEY_ANALOG_LIGHTLY - VIRTKEY_FIRST] ? 0.5f : 1.0f; float axis = 0.0f; // The down events can repeat, so just trust the virtKeys array. if (virtKeys[virtualKeyMin - VIRTKEY_FIRST]) - axis -= 1.0f; + axis -= value; if (virtKeys[virtualKeyMax - VIRTKEY_FIRST]) - axis += 1.0f; + axis += value; __CtrlSetAnalogX(axis, stick); } inline void EmuScreen::setVKeyAnalogY(int stick, int virtualKeyMin, int virtualKeyMax) { + const float value = virtKeys[VIRTKEY_ANALOG_LIGHTLY - VIRTKEY_FIRST] ? 0.5f : 1.0f; float axis = 0.0f; if (virtKeys[virtualKeyMin - VIRTKEY_FIRST]) - axis -= 1.0f; + axis -= value; if (virtKeys[virtualKeyMax - VIRTKEY_FIRST]) - axis += 1.0f; + axis += value; __CtrlSetAnalogY(axis, stick); }