From 21e16c157b379018338c339c563565a178ee2d79 Mon Sep 17 00:00:00 2001 From: Layla Marchant Date: Mon, 27 Jul 2020 10:36:10 -0400 Subject: [PATCH] Restored the old digital conversion of analog input for main menu. This allows using an analog stick to control the main menu once again. Part of #7. --- src/player.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/player.c b/src/player.c index 4582994..547549c 100644 --- a/src/player.c +++ b/src/player.c @@ -246,6 +246,8 @@ static enum keys mapkey(int code) { void player_getInput() { + static int prevjoyup = 0, prevjoydown = 0, prevjoyleft = 0, prevjoyright = 0; + int joyup, joydown, joyleft, joyright; double val; static int px = -1, py = -1; int x, y, w, h; @@ -317,14 +319,32 @@ void player_getInput() break; case SDL_JOYAXISMOTION: - val = MIN(1, (double)(abs(engine.event.jaxis.value)) / JS_MAX); - if (val < JS_DEADZONE) - val = 0; + if (engine.gameSection == SECTION_TITLE) { + if (engine.event.jaxis.axis == 0) { + joyleft = engine.event.jaxis.value < -16384; + joyright = engine.event.jaxis.value >= 16384; + if (joyleft != prevjoyleft) + engine.keyState[KEY_LEFT] = prevjoyleft = joyleft; + if (joyright != prevjoyright) + engine.keyState[KEY_RIGHT] = prevjoyright = joyright; + } else if (engine.event.jaxis.axis == 1) { + joyup = engine.event.jaxis.value < -16384; + joydown = engine.event.jaxis.value >= 16384; + if (joyup != prevjoyup) + engine.keyState[KEY_UP] = prevjoyup = joyup; + if (joydown != prevjoydown) + engine.keyState[KEY_DOWN] = prevjoydown = joydown; + } + } else { + val = MIN(1, (double)(abs(engine.event.jaxis.value)) / JS_MAX); + if (val < JS_DEADZONE) + val = 0; - if (engine.event.jaxis.axis == 0) - engine.xaxis = copysign(val, engine.event.jaxis.value); - else if (engine.event.jaxis.axis == 1) - engine.yaxis = copysign(val, engine.event.jaxis.value); + if (engine.event.jaxis.axis == 0) + engine.xaxis = copysign(val, engine.event.jaxis.value); + else if (engine.event.jaxis.axis == 1) + engine.yaxis = copysign(val, engine.event.jaxis.value); + } break;