mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
[Android] Fix a bunch of input bugs.
Looking at the old code for the ButtonManager was a brainfsck. This fixes a ton of bugs I kept uncovering as I was moving along. Fixes the gamepad configuration file being incorrect. No longer treats touchscreen in a special way. Ends up as a regular device with a "Touchscreen" device name. Was incorrectly converting a index from integer to ButtonType. Wouldn't work due to the addition of some unused(in JNI) enumerators in ButtonType. Fixes an issue where a map had a key as an axis which was causing its binding to be overwritten for every axis that was used twice (eg main stick left and right); Fixes Triggers not working at all. Fixes DPad not working at all. Fixes C-Stick only half working. Removes touch screen specific nativelibrary types onTouchAxisEvent and onTouchEvent. Adds a configuration version configuration option. Allows easy configuration overwriting if the options need to be changed during updating. Supersedes github PR #291.
This commit is contained in:
@ -86,17 +86,19 @@ namespace ButtonManager
|
||||
const std::string _dev;
|
||||
std::map<ButtonType, bool> _buttons;
|
||||
std::map<ButtonType, float> _axises;
|
||||
std::map<ButtonType, sBind*> _binds;
|
||||
std::map<int, sBind*> _inputbinds;
|
||||
|
||||
// Key is padID and ButtonType
|
||||
std::map<std::pair<int, ButtonType>, sBind*> _inputbinds;
|
||||
public:
|
||||
InputDevice(std::string dev)
|
||||
: _dev(dev) {}
|
||||
~InputDevice()
|
||||
{
|
||||
for (const auto& bind : _binds)
|
||||
for (const auto& bind : _inputbinds)
|
||||
delete bind.second;
|
||||
_inputbinds.clear();
|
||||
}
|
||||
void AddBind(sBind *bind) { _binds[bind->_buttontype] = bind; _inputbinds[bind->_bind] = bind; }
|
||||
void AddBind(sBind *bind) { _inputbinds[std::make_pair(bind->_padID, bind->_buttontype)] = bind; }
|
||||
void PressEvent(int button, int action);
|
||||
void AxisEvent(int axis, float value);
|
||||
bool ButtonValue(int padID, ButtonType button);
|
||||
@ -106,8 +108,6 @@ namespace ButtonManager
|
||||
void Init();
|
||||
bool GetButtonPressed(int padID, ButtonType button);
|
||||
float GetAxisValue(int padID, ButtonType axis);
|
||||
void TouchEvent(int padID, ButtonType button, int action);
|
||||
void TouchAxisEvent(int padID, ButtonType axis, float value);
|
||||
void GamepadEvent(std::string dev, int button, int action);
|
||||
void GamepadAxisEvent(std::string dev, int axis, float value);
|
||||
void Shutdown();
|
||||
|
Reference in New Issue
Block a user