mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-17 07:31:01 +00:00
Fix analog axis names. Make L2/R2 on x360 controllers analog.
Also slightly nicer behaviour - don't create empty mapping, instead ask for mappings immediately.
This commit is contained in:
parent
c14fcfdae1
commit
edb0614a59
@ -77,9 +77,10 @@ static const DefMappingStruct default360KeyMap[] = {
|
||||
{CTRL_SELECT , NKCODE_BUTTON_SELECT},
|
||||
{CTRL_LTRIGGER , NKCODE_BUTTON_L1},
|
||||
{CTRL_RTRIGGER , NKCODE_BUTTON_R1},
|
||||
{VIRTKEY_UNTHROTTLE , NKCODE_BUTTON_R2},
|
||||
{VIRTKEY_UNTHROTTLE , JOYSTICK_AXIS_RTRIGGER, +1},
|
||||
{VIRTKEY_PAUSE , NKCODE_BUTTON_THUMBR},
|
||||
{VIRTKEY_SPEED_TOGGLE, NKCODE_BUTTON_L2},
|
||||
{VIRTKEY_PAUSE, NKCODE_HOME},
|
||||
};
|
||||
|
||||
static const DefMappingStruct defaultShieldKeyMap[] = {
|
||||
@ -391,33 +392,33 @@ const KeyMap_IntStrPair axis_names[] = {
|
||||
static std::string unknown_key_name = "??";
|
||||
|
||||
const KeyMap_IntStrPair psp_button_names[] = {
|
||||
{CTRL_CIRCLE, "Circle"},
|
||||
{CTRL_CROSS, "Cross"},
|
||||
{CTRL_SQUARE, "Square"},
|
||||
{CTRL_TRIANGLE, "Triangle"},
|
||||
{CTRL_LTRIGGER, "L"},
|
||||
{CTRL_RTRIGGER, "R"},
|
||||
{CTRL_START, "Start"},
|
||||
{CTRL_SELECT, "Select"},
|
||||
{CTRL_UP, "Up"},
|
||||
{CTRL_DOWN, "Down"},
|
||||
{CTRL_LEFT, "Left"},
|
||||
{CTRL_RIGHT, "Right"},
|
||||
{CTRL_CIRCLE, "Circle"},
|
||||
{CTRL_CROSS, "Cross"},
|
||||
{CTRL_SQUARE, "Square"},
|
||||
{CTRL_TRIANGLE, "Triangle"},
|
||||
{CTRL_START, "Start"},
|
||||
{CTRL_SELECT, "Select"},
|
||||
{CTRL_LTRIGGER, "L"},
|
||||
{CTRL_RTRIGGER, "R"},
|
||||
|
||||
{VIRTKEY_AXIS_X_MIN, "An.Left"},
|
||||
{VIRTKEY_AXIS_X_MAX, "An.Right"},
|
||||
{VIRTKEY_AXIS_Y_MIN, "An.Down"},
|
||||
{VIRTKEY_AXIS_Y_MAX, "An.Up"},
|
||||
|
||||
{VIRTKEY_AXIS_RIGHT_X_MIN, "RightAn.Left"},
|
||||
{VIRTKEY_AXIS_RIGHT_X_MAX, "RightAn.Right"},
|
||||
{VIRTKEY_AXIS_RIGHT_Y_MIN, "RightAn.Down"},
|
||||
{VIRTKEY_AXIS_RIGHT_Y_MAX, "RightAn.Up"},
|
||||
|
||||
{VIRTKEY_RAPID_FIRE, "RapidFire"},
|
||||
{VIRTKEY_UNTHROTTLE, "Unthrottle"},
|
||||
{VIRTKEY_SPEED_TOGGLE, "SpeedToggle"},
|
||||
{VIRTKEY_PAUSE, "Pause"},
|
||||
|
||||
{VIRTKEY_AXIS_RIGHT_X_MIN, "RightAn.Left"},
|
||||
{VIRTKEY_AXIS_RIGHT_X_MAX, "RightAn.Right"},
|
||||
{VIRTKEY_AXIS_RIGHT_Y_MIN, "RightAn.Down"},
|
||||
{VIRTKEY_AXIS_RIGHT_Y_MAX, "RightAn.Up"},
|
||||
};
|
||||
|
||||
const int AXIS_BIND_NKCODE_START = 4000;
|
||||
@ -434,6 +435,20 @@ std::string GetKeyName(int keyCode) {
|
||||
return FindName(keyCode, key_names, ARRAY_SIZE(key_names));
|
||||
}
|
||||
|
||||
std::string GetKeyOrAxisName(int keyCode) {
|
||||
if (keyCode >= AXIS_BIND_NKCODE_START) {
|
||||
int direction;
|
||||
int axis = TranslateKeyCodeToAxis(keyCode, direction);
|
||||
std::string temp = GetAxisName(axis);
|
||||
if (direction == 1)
|
||||
temp += "+";
|
||||
else if (direction == -1)
|
||||
temp += "-";
|
||||
return temp;
|
||||
}
|
||||
return FindName(keyCode, key_names, ARRAY_SIZE(key_names));
|
||||
}
|
||||
|
||||
std::string GetAxisName(int axisId) {
|
||||
return FindName(axisId, axis_names, ARRAY_SIZE(axis_names));
|
||||
}
|
||||
|
@ -113,6 +113,8 @@ namespace KeyMap {
|
||||
|
||||
// Use if you need to display the textual name
|
||||
std::string GetKeyName(int keyCode);
|
||||
std::string GetKeyOrAxisName(int keyCode);
|
||||
std::string GetAxisName(int axisId);
|
||||
std::string GetPspButtonName(int btn);
|
||||
|
||||
std::vector<KeyMap_IntStrPair> GetMappableKeys();
|
||||
@ -124,12 +126,10 @@ namespace KeyMap {
|
||||
// Returns KEYMAP_ERROR_UNKNOWN_KEY
|
||||
// for any unmapped key
|
||||
int KeyToPspButton(int deviceId, int key);
|
||||
|
||||
int TranslateKeyCodeFromAxis(int axisId, int direction);
|
||||
|
||||
bool KeyFromPspButton(int btn, std::vector<KeyDef> *keys);
|
||||
std::string NameKeyFromPspButton(int btn);
|
||||
std::string NameDeviceFromPspButton(int btn);
|
||||
|
||||
int TranslateKeyCodeToAxis(int keyCode, int &direction);
|
||||
int TranslateKeyCodeFromAxis(int axisId, int direction);
|
||||
|
||||
// Configure the key mapping.
|
||||
// Any configuration will be saved to the Core config.
|
||||
@ -139,7 +139,6 @@ namespace KeyMap {
|
||||
// Direction is negative or positive.
|
||||
void SetAxisMapping(int btn, int deviceId, int axisId, int direction, bool replace);
|
||||
|
||||
std::string GetAxisName(int axisId);
|
||||
int AxisToPspButton(int deviceId, int axisId, int direction);
|
||||
bool AxisFromPspButton(int btn, int *deviceId, int *axisId, int *direction);
|
||||
std::string NamePspButtonFromAxis(int deviceId, int axisId, int direction);
|
||||
|
@ -92,7 +92,7 @@ void ControlMapper::Refresh() {
|
||||
|
||||
for (size_t i = 0; i < mappings.size(); i++) {
|
||||
std::string deviceName = GetDeviceName(mappings[i].deviceId);
|
||||
std::string keyName = KeyMap::GetKeyName(mappings[i].keyCode);
|
||||
std::string keyName = KeyMap::GetKeyOrAxisName(mappings[i].keyCode);
|
||||
int image = -1;
|
||||
|
||||
LinearLayout *row = rightColumn->Add(new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)));
|
||||
@ -117,6 +117,9 @@ void ControlMapper::Refresh() {
|
||||
|
||||
void ControlMapper::MappedCallback(KeyDef kdf) {
|
||||
switch (action_) {
|
||||
case ADD:
|
||||
KeyMap::SetKeyMapping(pspKey_, kdf, false);
|
||||
break;
|
||||
case REPLACEALL:
|
||||
KeyMap::SetKeyMapping(pspKey_, kdf, true);
|
||||
break;
|
||||
@ -141,14 +144,14 @@ UI::EventReturn ControlMapper::OnReplaceAll(UI::EventParams ¶ms) {
|
||||
}
|
||||
|
||||
UI::EventReturn ControlMapper::OnAdd(UI::EventParams ¶ms) {
|
||||
KeyMap::g_controllerMap[pspKey_].push_back(KeyDef(0, 0));
|
||||
refresh_ = true;
|
||||
action_ = ADD;
|
||||
scrm_->push(new KeyMappingNewKeyDialog(pspKey_, true, std::bind(&ControlMapper::MappedCallback, this, placeholder::_1)));
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
||||
UI::EventReturn ControlMapper::OnDelete(UI::EventParams ¶ms) {
|
||||
actionIndex_ = atoi(params.v->Tag().c_str());
|
||||
KeyMap::g_controllerMap[pspKey_].erase(KeyMap::g_controllerMap[pspKey_].begin() + actionIndex_);
|
||||
int index = atoi(params.v->Tag().c_str());
|
||||
KeyMap::g_controllerMap[pspKey_].erase(KeyMap::g_controllerMap[pspKey_].begin() + index);
|
||||
refresh_ = true;
|
||||
return UI::EVENT_DONE;
|
||||
}
|
||||
|
@ -19,6 +19,3 @@
|
||||
|
||||
#include "InputDevice.h"
|
||||
|
||||
#define XBOX_CODE_LEFTTRIGGER 0x00010000
|
||||
#define XBOX_CODE_RIGHTTRIGGER 0x00020000
|
||||
|
||||
|
@ -74,8 +74,6 @@ static void UnloadXInputDLL() {
|
||||
|
||||
// Permanent map. Actual mapping happens elsewhere.
|
||||
static const struct {int from, to;} xinput_ctrl_map[] = {
|
||||
{XBOX_CODE_LEFTTRIGGER, NKCODE_BUTTON_L2},
|
||||
{XBOX_CODE_RIGHTTRIGGER, NKCODE_BUTTON_R2},
|
||||
{XINPUT_GAMEPAD_A, NKCODE_BUTTON_A},
|
||||
{XINPUT_GAMEPAD_B, NKCODE_BUTTON_B},
|
||||
{XINPUT_GAMEPAD_X, NKCODE_BUTTON_X},
|
||||
@ -165,6 +163,22 @@ int XinputDevice::UpdateState(InputState &input_state) {
|
||||
NativeAxis(axis);
|
||||
}
|
||||
|
||||
if (prevState.Gamepad.bLeftTrigger != state.Gamepad.bLeftTrigger) {
|
||||
AxisInput axis;
|
||||
axis.deviceId = DEVICE_ID_X360_0;
|
||||
axis.axisId = JOYSTICK_AXIS_LTRIGGER;
|
||||
axis.value = (float)state.Gamepad.bLeftTrigger / 255.0f;
|
||||
NativeAxis(axis);
|
||||
}
|
||||
|
||||
if (prevState.Gamepad.bRightTrigger != state.Gamepad.bRightTrigger) {
|
||||
AxisInput axis;
|
||||
axis.deviceId = DEVICE_ID_X360_0;
|
||||
axis.axisId = JOYSTICK_AXIS_RTRIGGER;
|
||||
axis.value = (float)state.Gamepad.bRightTrigger / 255.0f;
|
||||
NativeAxis(axis);
|
||||
}
|
||||
|
||||
this->prevState = state;
|
||||
this->check_delay = 0;
|
||||
|
||||
@ -212,11 +226,6 @@ static Stick NormalizedDeadzoneFilter(short x, short y) {
|
||||
void XinputDevice::ApplyButtons(XINPUT_STATE &state, InputState &input_state) {
|
||||
u32 buttons = state.Gamepad.wButtons;
|
||||
|
||||
if (state.Gamepad.bLeftTrigger > XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
|
||||
buttons |= XBOX_CODE_LEFTTRIGGER;
|
||||
if (state.Gamepad.bRightTrigger > XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
|
||||
buttons |= XBOX_CODE_RIGHTTRIGGER;
|
||||
|
||||
u32 downMask = buttons & (~prevButtons);
|
||||
u32 upMask = (~buttons) & prevButtons;
|
||||
prevButtons = buttons;
|
||||
|
Loading…
x
Reference in New Issue
Block a user