1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-01-28 21:41:19 +00:00

more controller fixes

This commit is contained in:
Zeno Rogue
2025-12-18 02:12:56 +01:00
parent 0386143688
commit 7c01143a60
2 changed files with 24 additions and 26 deletions

View File

@@ -255,7 +255,7 @@ EX bool gjoy_button(joydata &jd, int button) {
return SDL_JoystickGetButton(jd.joy, button);
}
EX bool gjoy_axis(joydata &jd, int axis) {
EX int gjoy_axis(joydata &jd, int axis) {
#if SDLVER >= 2
if(jd.gc) return SDL_GameControllerGetAxis(jd.gc, (SDL_GameControllerAxis) axis);
#endif
@@ -291,6 +291,13 @@ EX int gjoy_buttons(joydata& jd) {
return SDL_GetNumJoystickButtons(jd.joy);
}
EX int gjoy_axes(joydata& jd) {
#if SDLVER >= 2
if(jd.gc) return 6;
#endif
return SDL_GetNumJoystickButtons(jd.joy);
}
EX int gjoy_hats(joydata& jd) {
#if SDLVER >= 2
if(jd.gc) return 0;
@@ -1339,24 +1346,15 @@ EX void handle_event(SDL_Event& ev) {
#if SDLVER >= 2
if(ev.type == SDL_CONTROLLERAXISMOTION && normal && DEFAULTCONTROL) {
if(ev.caxis.which == 0) {
if(ev.caxis.axis == 0)
joyx = ev.caxis.value;
else if(ev.caxis.axis == 1)
joyy = ev.caxis.value;
else if(ev.caxis.axis == 2)
panjoyx = ev.caxis.value;
else if(ev.caxis.axis == 3)
panjoyy = ev.caxis.value;
checkjoy();
// printf("panjoy = %d,%d\n", panjoyx, panjoyy);
}
else {
if(ev.caxis.axis == 0)
panjoyx = ev.caxis.value;
else
panjoyy = ev.caxis.value;
}
if(ev.caxis.axis == 0)
joyx = ev.caxis.value;
else if(ev.caxis.axis == 1)
joyy = ev.caxis.value;
else if(ev.caxis.axis == 2)
panjoyx = ev.caxis.value;
else if(ev.caxis.axis == 3)
panjoyy = ev.caxis.value;
checkjoy();
}
#endif

View File

@@ -388,7 +388,7 @@ struct joy_configurer {
numaxeconfigs = 0;
int j = 0;
for(auto& s: sticks) {
for(int ax=0; ax<SDL_GetNumJoystickAxes(s.joy) && ax < MAXAXE; ax++) if(numaxeconfigs<24) {
for(int ax=0; ax<gjoy_axes(s) && ax < MAXAXE; ax++) if(numaxeconfigs<24) {
int y = gjoy_axis(s, ax);
string buf = " ";
if(configdead)
@@ -885,20 +885,20 @@ EX void get_actions(config& scfg) {
int j = 0;
for(auto& s: sticks) {
for(int b=0; b<SDL_GetNumJoystickButtons(s.joy) && b<MAXBUTTON; b++)
if(gjoy_button(sticks[j], b))
for(int b=0; b<gjoy_buttons(s) && b<MAXBUTTON; b++)
if(gjoy_button(s, b))
pressaction(scfg.joyaction[j][b]);
for(int b=0; b<SDL_GetNumJoystickHats(s.joy) && b<MAXHAT; b++) {
int stat = SDL_GetJoystickHat(sticks[j].joy, b);
for(int b=0; b<gjoy_hats(s) && b<MAXHAT; b++) {
int stat = SDL_GetJoystickHat(s.joy, b);
if(stat & SDL_HAT_UP) pressaction(scfg.hataction[j][b][0]);
if(stat & SDL_HAT_RIGHT) pressaction(scfg.hataction[j][b][1]);
if(stat & SDL_HAT_DOWN) pressaction(scfg.hataction[j][b][2]);
if(stat & SDL_HAT_LEFT) pressaction(scfg.hataction[j][b][3]);
}
for(int b=0; b<SDL_GetNumJoystickAxes(s.joy) && b<MAXAXE; b++) {
int value = gjoy_axis(sticks[j], b);
for(int b=0; b<gjoy_axes(s) && b<MAXAXE; b++) {
int value = gjoy_axis(s, b);
int dz = scfg.deadzoneval[j][b];
if(value > dz) value -= dz; else if(value < -dz) value += dz;
else value = 0;