aboutsummaryrefslogtreecommitdiff
path: root/src/sdl/input.c
diff options
context:
space:
mode:
authorptitSeb2017-11-30 22:49:38 +0100
committerptitSeb2017-11-30 22:49:38 +0100
commitde29b11a88dbdd3af0824e59b51528b91ee73c54 (patch)
treee1aabf8752043998663279fae4359a18c4b4af07 /src/sdl/input.c
parentd87f450f51372ddf013e6bac09f1ef588e6f8bea (diff)
downloadhydracastlelabyrinth-de29b11a88dbdd3af0824e59b51528b91ee73c54.tar.gz
hydracastlelabyrinth-de29b11a88dbdd3af0824e59b51528b91ee73c54.tar.bz2
hydracastlelabyrinth-de29b11a88dbdd3af0824e59b51528b91ee73c54.zip
First commit. Version works on Linux (keyboard only, not configurable)
Diffstat (limited to 'src/sdl/input.c')
-rw-r--r--src/sdl/input.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/sdl/input.c b/src/sdl/input.c
new file mode 100644
index 0000000..c5f5a65
--- /dev/null
+++ b/src/sdl/input.c
@@ -0,0 +1,88 @@
+#include "input.h"
+#include <SDL/SDL.h>
+
+Button btnUp = {0}, btnDown = {0}, btnLeft = {0}, btnRight = {0};
+Button btnFaceUp = {0}, btnFaceDown = {0}, btnFaceLeft = {0}, btnFaceRight = {0};
+Button btnL = {0}, btnR = {0};
+Button btnStart = {0}, btnSelect = {0};
+Button btnAccept = {0}, btnDecline = {0};
+int axisX = 0, axisY = 0;
+
+int bUp = 0, bDown = 0, bLeft = 0, bRight = 0;
+int bFaceUp = 0, bFaceDown = 0, bFaceLeft = 0, bFaceRight = 0;
+int bR = 0, bL = 0;
+int bStart = 0, bSelect = 0;
+int bAccept = 0, bDecline = 0;
+
+void Input_KeyEvent(SDL_Event* evt)
+{
+ int w = (evt->type==SDL_KEYDOWN)?1:0;
+ switch(evt->key.keysym.sym)
+ {
+ case SDLK_UP: bUp = w; break;
+ case SDLK_DOWN: bDown = w; break;
+ case SDLK_LEFT: bLeft = w; break;
+ case SDLK_RIGHT: bRight = w; break;
+#ifdef PANDORA
+ case SDLK_PAGEUP: bFaceUp = w; break;
+ case SDLK_PAGEDOWN: bFaceDown = w; break;
+ case SDLK_END: bFaceLeft = w; break; // reversing, so (B) is sword
+ case SDLK_HOME: bFaceRight = w; break;
+ case SDLK_RCTRL: bR = w; break;
+ case SDLK_RSHIFT: bL = w; break;
+ case SDLK_LCTRL: bSelect = w; break;
+ case SDLK_LALT: bStart = w; break;
+#else
+ case SDLK_e: bFaceUp = w; break;
+ case SDLK_x: bFaceDown = w; break;
+ case SDLK_s: bFaceLeft = w; break;
+ case SDLK_d: bFaceRight = w; break;
+ case SDLK_r: bR = w; break;
+ case SDLK_w: bL = w; break;
+ case SDLK_SPACE: bSelect = w; break;
+ case SDLK_RETURN: bStart = w; break;
+#endif
+ }
+}
+
+void updateKey(Button* btn, int state)
+{
+ if (state) {
+ if (btn->held == 1) {
+ btn->pressed = 0;
+ }else{
+ btn->pressed = 1;
+ }
+ btn->held = 1;
+ btn->released = 0;
+ }else{
+ if (btn->held == 1) {
+ btn->released = 1;
+ }else{
+ btn->released = 0;
+ }
+ btn->held = 0;
+ btn->pressed = 0;
+ }
+}
+
+void PHL_ScanInput()
+{
+ updateKey(&btnUp, bUp);
+ updateKey(&btnDown, bDown);
+ updateKey(&btnLeft, bLeft);
+ updateKey(&btnRight, bRight);
+
+ updateKey(&btnStart, bStart);
+ updateKey(&btnSelect, bSelect);
+
+ updateKey(&btnL, bL);
+ updateKey(&btnR, bR);
+
+ updateKey(&btnFaceLeft, bFaceLeft);
+ updateKey(&btnFaceDown, bFaceDown);
+ updateKey(&btnFaceRight, bFaceRight);
+
+ updateKey(&btnAccept, bFaceLeft);
+ updateKey(&btnDecline, bFaceDown);
+}