1 /* 2 Copyright (C) 2003, 2010 - Wolfire Games 3 Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file) 4 5 This file is part of Lugaru. 6 7 Lugaru is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 Lugaru is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Lugaru. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include "Utils/Input.hpp" 22 23 bool keyDown[SDL_NUM_SCANCODES + 6]; 24 bool keyPressed[SDL_NUM_SCANCODES + 6]; 25 Tick()26void Input::Tick() 27 { 28 SDL_PumpEvents(); 29 int numkeys; 30 const Uint8* keyState = SDL_GetKeyboardState(&numkeys); 31 for (int i = 0; i < numkeys; i++) { 32 keyPressed[i] = !keyDown[i] && keyState[i]; 33 keyDown[i] = keyState[i]; 34 } 35 Uint8 mb = SDL_GetMouseState(NULL, NULL); 36 for (int i = 1; i < 6; i++) { 37 keyPressed[SDL_NUM_SCANCODES + i] = !keyDown[SDL_NUM_SCANCODES + i] && (mb & SDL_BUTTON(i)); 38 keyDown[SDL_NUM_SCANCODES + i] = (mb & SDL_BUTTON(i)); 39 } 40 } 41 isKeyDown(int k)42bool Input::isKeyDown(int k) 43 { 44 if (k >= SDL_NUM_SCANCODES + 6) { 45 return false; 46 } 47 return keyDown[k]; 48 } 49 isKeyPressed(int k)50bool Input::isKeyPressed(int k) 51 { 52 if (k >= SDL_NUM_SCANCODES + 6) { 53 return false; 54 } 55 return keyPressed[k]; 56 } 57 keyToChar(unsigned short i)58const char* Input::keyToChar(unsigned short i) 59 { 60 if (i < SDL_NUM_SCANCODES) { 61 return SDL_GetKeyName(SDL_GetKeyFromScancode(SDL_Scancode(i))); 62 } else if (i == MOUSEBUTTON_LEFT) { 63 return "mouse left button"; 64 } else if (i == MOUSEBUTTON_RIGHT) { 65 return "mouse right button"; 66 } else if (i == MOUSEBUTTON_MIDDLE) { 67 return "mouse middle button"; 68 } else if (i == MOUSEBUTTON_X1) { 69 return "mouse button 4"; 70 } else if (i == MOUSEBUTTON_X2) { 71 return "mouse button 5"; 72 } else { 73 return "unknown"; 74 } 75 } 76 MouseClicked()77bool Input::MouseClicked() 78 { 79 return isKeyPressed(MOUSEBUTTON_LEFT); 80 } 81