]> git.jsancho.org Git - lugaru.git/blob - Source/Input.cpp
f7ab1ffa3dc6a5328c99a061575f0ba3df1410ca
[lugaru.git] / Source / Input.cpp
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3 Copyright (C) 2010 - Côme <MCMic> BERNIGAUD
4
5 This file is part of Lugaru.
6
7 Lugaru is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11
12 This program 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.  
15
16 See the GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21 */
22
23 /**> HEADER FILES <**/
24 #include "Input.h"
25
26 extern bool keyboardfrozen;
27
28 bool keyDown[SDLK_LAST+6];
29 bool keyPressed[SDLK_LAST+6];
30
31 void Input::Tick(){
32     SDL_PumpEvents();
33         Uint8 *keyState = SDL_GetKeyState(NULL);
34     for(int i=0;i<SDLK_LAST;i++){
35         keyPressed[i] = !keyDown[i]&&keyState[i];
36         keyDown[i] = keyState[i];
37     }
38     Uint8 mb = SDL_GetMouseState(NULL,NULL);
39     for(int i=1;i<6;i++){
40         keyPressed[SDLK_LAST+i] = !keyDown[SDLK_LAST+i]&&(mb&SDL_BUTTON(i));
41         keyDown[SDLK_LAST+i] = (mb&SDL_BUTTON(i));
42     }
43 }
44
45 bool Input::isKeyDown(int k) {
46         if(keyboardfrozen||k>=SDLK_LAST+6) // really useful? check that.
47         return false;
48     return keyDown[k];
49 }
50
51 bool Input::isKeyPressed(int k) {
52         if(keyboardfrozen||k>=SDLK_LAST+6)
53         return false;
54     return keyPressed[k];
55 }
56
57 const char* Input::keyToChar(unsigned short i) {
58         if(i<SDLK_LAST)
59                 return SDL_GetKeyName(SDLKey(i));
60         else if(i==SDLK_LAST+SDL_BUTTON_LEFT)
61                 return "mouse1";
62         else if(i==SDLK_LAST+SDL_BUTTON_RIGHT)
63                 return "mouse2";
64         else if(i==SDLK_LAST+SDL_BUTTON_MIDDLE)
65                 return "mouse3";
66         else
67                 return "unknown";
68 }
69
70 unsigned short  Input::CharToKey(const char* which) {
71         for(unsigned short i=0;i<SDLK_LAST;i++) {
72                 if(!strcasecmp(which,SDL_GetKeyName(SDLKey(i))))
73                         return i;
74         }
75         if(!strcasecmp(which,"mouse1")){
76                 return MOUSEBUTTON1;
77         }
78         if(!strcasecmp(which,"mouse2")){
79                 return MOUSEBUTTON2;
80         }
81         return SDLK_LAST;
82 }
83
84 Boolean Input::MouseClicked(){
85     return isKeyPressed(SDLK_LAST+SDL_BUTTON_LEFT);
86 }