1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-08-08 07:09:52 +00:00

Major input handling improvements (#28):

- Support joystick hotplugging
- Support axes as buttons (means xbox360 shoulder triggers can be used as buttons)
- Show pretty joystick axis & button names if possible
- Tabify input actions UI
- Add 'mouse' column to input actions UI
- Allow to configure form hotkeys
- Allow ALL keys, get rid of internal key remapping
- SDL2: Use scancodes instead of keycodes since they are layout independent
- Allow extra mouse buttons (if present)
- Remove "lmbd" & "lmbu" actions in favor of "PrimaryAction" & "SecondaryAction"
  Makes the configuration less redundant and doesn't send each action twice,
  which happened if both were set to the same key.
- Fix Regressions from prev commits (menu not opening on Esc)

Still has a few minor bugs/issues that need to be fixed,
but pushing this now before the commit gets too large again.
This commit is contained in:
fgenesis 2016-07-13 05:00:19 +02:00
parent 082dcacad8
commit a043dd852f
19 changed files with 585 additions and 223 deletions

View file

@ -13,6 +13,8 @@
#define MAX_JOYSTICK_BTN 32
#define MAX_JOYSTICK_AXIS 32
const static float JOY_AXIS_THRESHOLD = 0.6f;
class Joystick
{
public:
@ -32,20 +34,28 @@ public:
void calibrate(Vector &vec, float dead);
bool anyButton() const;
bool getButton(unsigned id) const { return !!(buttonBitmask & (1u << id)); }
float getAxisUncalibrated(int id) const;
int getNumAxes() const;
int getIndex() const { return stickIndex; }
int getInstanceID() const { return instanceID; }
inline bool isEnabled() const { return enabled; }
const char *getAxisName(int axis) const;
const char *getButtonName(int btn) const;
Vector rightStick;
int s1ax, s1ay, s2ax, s2ay;
private:
void clearAxes();
bool enabled;
int stickIndex;
int instanceID;
unsigned buttonBitmask; // FIXME: this should go
unsigned buttonBitmask;
int numJoyAxes;
SDL_Joystick *sdl_joy;
float axisRaw[MAX_JOYSTICK_AXIS];
# ifdef BBGE_BUILD_SDL2
SDL_GameController *sdl_controller;