From aeb5e2a0e43d25d156bb7512fca291a876ddb527 Mon Sep 17 00:00:00 2001 From: Alexander Overvoorde Date: Mon, 28 Apr 2014 16:06:07 +0200 Subject: [PATCH] Add separate key buffer for shortcuts to fix misbehaving panning with keyboard --- src/game.c | 4 ++-- src/osinterface.c | 7 +++++++ src/osinterface.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/game.c b/src/game.c index 4feae6733c..5e57312080 100644 --- a/src/game.c +++ b/src/game.c @@ -850,8 +850,8 @@ int get_next_key() { int i; for (i = 0; i < 221; i++) { - if (gKeysState[i]) { - gKeysState[i] = 0; + if (gKeysPressed[i]) { + gKeysPressed[i] = 0; return i; } } diff --git a/src/osinterface.c b/src/osinterface.c index 594a398da2..851462b6dd 100644 --- a/src/osinterface.c +++ b/src/osinterface.c @@ -31,6 +31,7 @@ typedef void(*update_palette_func)(char*, int, int); openrct2_cursor gCursorState; unsigned char* gKeysState; +unsigned char* gKeysPressed; unsigned int gLastKeyPressed; static void osinterface_create_window(); @@ -49,6 +50,9 @@ void osinterface_init() { osinterface_create_window(); + gKeysPressed = malloc(sizeof(unsigned char) * 256); + memset(gKeysPressed, 0, sizeof(unsigned char) * 256); + // RCT2_CALLPROC(0x00404584); // dinput_init() } @@ -253,6 +257,7 @@ void osinterface_process_messages() break; case SDL_KEYDOWN: gLastKeyPressed = e.key.keysym.sym; + gKeysPressed[e.key.keysym.scancode] = 1; break; default: break; @@ -278,6 +283,8 @@ static void osinterface_close_window() void osinterface_free() { + free(gKeysPressed); + osinterface_close_window(); SDL_Quit(); } diff --git a/src/osinterface.h b/src/osinterface.h index ee7e83505f..205d0170a0 100644 --- a/src/osinterface.h +++ b/src/osinterface.h @@ -38,6 +38,7 @@ typedef struct { extern openrct2_cursor gCursorState; extern unsigned char* gKeysState; +extern unsigned char* gKeysPressed; extern unsigned int gLastKeyPressed; void osinterface_init();