![]() |
Unuk 1.0
|
00001 #include <string.h> 00002 #include "Input.h" 00003 00004 static mouse_t mouse; 00005 static keyboard_t keyboard; 00006 00007 bool _curr_key(int index) { 00008 return(keyboard.keys[index] != 0); 00009 } 00010 00011 bool _old_key(int index) { 00012 return(keyboard.oldKeys[index] != 0); 00013 } 00014 00015 bool _curr_mouse(int button) { 00016 return((mouse.buttons * SDL_BUTTON(button)) != 0); 00017 } 00018 00019 bool _old_mouse(int button) { 00020 return((mouse.oldButtons & SDL_BUTTON(button)) != 0); 00021 } 00022 00023 bool CreateInput(void) { 00024 memset(&keyboard, 0, sizeof(keyboard_t)); 00025 memset(&mouse, 0, sizeof(mouse_t)); 00026 SDL_PumpEvents(); 00027 SDL_PumpEvents(); 00028 unsigned char* tempKeys = SDL_GetKeyState(&keyboard.keycount); 00029 keyboard.keys = (unsigned char*)malloc(sizeof(char) * keyboard.keycount); 00030 keyboard.oldKeys = (unsigned char*)malloc(sizeof(char) * keyboard.keycount); 00031 00032 memcpy(keyboard.keys, tempKeys, sizeof(char) * keyboard.keycount); 00033 mouse.buttons = SDL_GetMouseState(&mouse.dx, &mouse.dy); 00034 return true; 00035 } 00036 00037 void UpdateInput(void) { 00038 SDL_PumpEvents(); 00039 keyboard.lastChar = -1; 00040 mouse.oldx = mouse.dx; 00041 mouse.oldy = mouse.dy; 00042 mouse.oldButtons = SDL_GetMouseState(&mouse.dx, &mouse.dy); 00043 00044 memcpy(keyboard.oldKeys, keyboard.keys, sizeof(char) * keyboard.keycount); 00045 00046 unsigned char *tmp = SDL_GetKeyState(&keyboard.keycount); 00047 memcpy(keyboard.keys, tmp, sizeof(char) * keyboard.keycount); 00048 00049 keyboard.mods = SDL_GetModState(); 00050 00051 SDL_Event event; 00052 while(SDL_PollEvent(&event)) { 00053 if(event.type == SDL_KEYDOWN) { 00054 keyboard.lastChar = event.key.keysym.sym; 00055 } 00056 } 00057 } 00058 00059 char GetKey(void) { 00060 if(keyboard.lastChar != -1) 00061 return keyboard.lastChar; 00062 return 0; 00063 } 00064 00065 unsigned int GetX(void) { return mouse.dx; } 00066 unsigned int GetY(void) { return mouse.dy; } 00067 unsigned int GetOldX(void) { return mouse.oldx; } 00068 unsigned int GetOldY(void) { return mouse.oldy; } 00069 unsigned int GetMods(void) { return keyboard.mods; } 00070 bool KeyDown(int index) { return(_curr_key(index) && !_old_key(index)); } 00071 bool KeyStillDown(int index) { return(_curr_key(index) && _old_key(index)); } 00072 bool KeyUp(int index) { return(!_curr_key(index) && _old_key(index)); } 00073 bool KeyStillUp(int index) { return(!_curr_key(index) && !_old_key(index)); } 00074 bool MouseDown(int button) { return(_curr_mouse(button) && !_old_mouse(button)); } 00075 bool MouseStillDown(int button) { return(_curr_mouse(button) && _old_mouse(button)); } 00076 bool MouseUp(int button) { return(!_curr_mouse(button) && _old_mouse(button)); } 00077 bool MouseStillUp(int button) { return(!_curr_mouse(button) && !_old_mouse(button)); } 00078 00079 void DestroyInput(void) { 00080 free(keyboard.keys); 00081 free(keyboard.oldKeys); 00082 }