X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FInput.cpp;h=b18ec6ee50e26740a88654a56fee5749ee73e320;hb=e08372a2095837a0b951ccb68c3499ef67c1a827;hp=08c5732f35e4b289c5f1bae0e4784a7e8fa1b7fe;hpb=24004d6ab1e68faaf85ece11b566449997da5013;p=lugaru.git diff --git a/Source/Input.cpp b/Source/Input.cpp index 08c5732..b18ec6e 100644 --- a/Source/Input.cpp +++ b/Source/Input.cpp @@ -1,80 +1,77 @@ /* Copyright (C) 2003, 2010 - Wolfire Games -Copyright (C) 2010 - Côme BERNIGAUD +Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file) This file is part of Lugaru. -Lugaru is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -This program is distributed in the hope that it will be useful, +Lugaru is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +along with Lugaru. If not, see . */ /**> HEADER FILES <**/ #include "Input.h" -extern bool keyboardfrozen; - -bool keyDown[SDLK_LAST + 6]; -bool keyPressed[SDLK_LAST + 6]; +bool keyDown[SDL_NUM_SCANCODES + 6]; +bool keyPressed[SDL_NUM_SCANCODES + 6]; void Input::Tick() { SDL_PumpEvents(); - Uint8 *keyState = SDL_GetKeyState(NULL); - for (int i = 0; i < SDLK_LAST; i++) { + int numkeys; + const Uint8 *keyState = SDL_GetKeyboardState(&numkeys); + for (int i = 0; i < numkeys; i++) { keyPressed[i] = !keyDown[i] && keyState[i]; keyDown[i] = keyState[i]; } Uint8 mb = SDL_GetMouseState(NULL, NULL); for (int i = 1; i < 6; i++) { - keyPressed[SDLK_LAST + i] = !keyDown[SDLK_LAST + i] && (mb & SDL_BUTTON(i)); - keyDown[SDLK_LAST + i] = (mb & SDL_BUTTON(i)); + keyPressed[SDL_NUM_SCANCODES + i] = !keyDown[SDL_NUM_SCANCODES + i] && (mb & SDL_BUTTON(i)); + keyDown[SDL_NUM_SCANCODES + i] = (mb & SDL_BUTTON(i)); } } bool Input::isKeyDown(int k) { - if (keyboardfrozen || k >= SDLK_LAST + 6) // really useful? check that. + if (k >= SDL_NUM_SCANCODES + 6) // really useful? check that. return false; return keyDown[k]; } bool Input::isKeyPressed(int k) { - if (keyboardfrozen || k >= SDLK_LAST + 6) + if (k >= SDL_NUM_SCANCODES + 6) return false; return keyPressed[k]; } const char* Input::keyToChar(unsigned short i) { - if (i < SDLK_LAST) - return SDL_GetKeyName(SDLKey(i)); - else if (i == SDLK_LAST + SDL_BUTTON_LEFT) + if (i < SDL_NUM_SCANCODES) + return SDL_GetScancodeName(SDL_Scancode(i)); + else if (i == MOUSEBUTTON1) return "mouse1"; - else if (i == SDLK_LAST + SDL_BUTTON_RIGHT) + else if (i == MOUSEBUTTON2) return "mouse2"; - else if (i == SDLK_LAST + SDL_BUTTON_MIDDLE) + else if (i == MOUSEBUTTON3) return "mouse3"; else return "unknown"; } -unsigned short Input::CharToKey(const char* which) +unsigned short Input::CharToKey(const char* which) { - for (unsigned short i = 0; i < SDLK_LAST; i++) { - if (!strcasecmp(which, SDL_GetKeyName(SDLKey(i)))) + for (unsigned short i = 0; i < SDL_NUM_SCANCODES; i++) { + if (!strcasecmp(which, SDL_GetScancodeName(SDL_Scancode(i)))) return i; } if (!strcasecmp(which, "mouse1")) { @@ -83,10 +80,13 @@ unsigned short Input::CharToKey(const char* which) if (!strcasecmp(which, "mouse2")) { return MOUSEBUTTON2; } - return SDLK_LAST; + if (!strcasecmp(which, "mouse3")) { + return MOUSEBUTTON3; + } + return SDL_NUM_SCANCODES; } -Boolean Input::MouseClicked() +bool Input::MouseClicked() { - return isKeyPressed(SDLK_LAST + SDL_BUTTON_LEFT); + return isKeyPressed(SDL_NUM_SCANCODES + SDL_BUTTON_LEFT); }