diff options
Diffstat (limited to 'hge/input.cpp')
-rw-r--r-- | hge/input.cpp | 363 |
1 files changed, 0 insertions, 363 deletions
diff --git a/hge/input.cpp b/hge/input.cpp deleted file mode 100644 index 2710c7f..0000000 --- a/hge/input.cpp +++ /dev/null @@ -1,363 +0,0 @@ -/* -** Haaf's Game Engine 1.8 -** Copyright (C) 2003-2007, Relish Games -** hge.relishgames.com -** -** Core functions implementation: input -*/ - - -#include "hge_impl.h" - -const char *KeyNames[] = -{ - "?", - "Left Mouse Button", "Right Mouse Button", "?", "Middle Mouse Button", - "?", "?", "?", "Backspace", "Tab", "?", "?", "?", "Enter", "?", "?", - "Shift", "Ctrl", "Alt", "Pause", "Caps Lock", "?", "?", "?", "?", "?", "?", - "Escape", "?", "?", "?", "?", - "Space", "Page Up", "Page Down", "End", "Home", - "Left Arrow", "Up Arrow", "Right Arrow", "Down Arrow", - "?", "?", "?", "?", "Insert", "Delete", "?", - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", - "?", "?", "?", "?", "?", "?", "?", - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", - "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", - "Left Win", "Right Win", "Application", "?", "?", - "NumPad 0", "NumPad 1", "NumPad 2", "NumPad 3", "NumPad 4", - "NumPad 5", "NumPad 6", "NumPad 7", "NumPad 8", "NumPad 9", - "Multiply", "Add", "?", "Subtract", "Decimal", "Divide", - "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "Num Lock", "Scroll Lock", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "Semicolon", "Equals", "Comma", "Minus", "Period", "Slash", "Grave", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", - "Left bracket", "Backslash", "Right bracket", "Apostrophe", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", - "?", "?", "?" -}; - - -static int SDLKeyToHGEKey(const int sdlkey) -{ - switch (sdlkey) - { - case SDLK_ESCAPE: return HGEK_ESCAPE; - case SDLK_BACKSPACE: return HGEK_BACKSPACE; - case SDLK_TAB: return HGEK_TAB; - case SDLK_RETURN: return HGEK_ENTER; - case SDLK_SPACE: return HGEK_SPACE; - case SDLK_LSHIFT: return HGEK_SHIFT; - case SDLK_RSHIFT: return HGEK_SHIFT; - case SDLK_LCTRL: return HGEK_CTRL; - case SDLK_RCTRL: return HGEK_CTRL; - case SDLK_LALT: return HGEK_ALT; - case SDLK_RALT: return HGEK_ALT; - case SDLK_LMETA: return HGEK_LWIN; - case SDLK_RMETA: return HGEK_RWIN; - //case SDLK_APPS: return HGEK_APPS; - case SDLK_PAUSE: return HGEK_PAUSE; - case SDLK_CAPSLOCK: return HGEK_CAPSLOCK; - case SDLK_NUMLOCK: return HGEK_NUMLOCK; - case SDLK_SCROLLOCK: return HGEK_SCROLLLOCK; - case SDLK_PAGEUP: return HGEK_PGUP; - case SDLK_PAGEDOWN: return HGEK_PGDN; - case SDLK_HOME: return HGEK_HOME; - case SDLK_END: return HGEK_END; - case SDLK_INSERT: return HGEK_INSERT; - case SDLK_DELETE: return HGEK_DELETE; - case SDLK_LEFT: return HGEK_LEFT; - case SDLK_UP: return HGEK_UP; - case SDLK_RIGHT: return HGEK_RIGHT; - case SDLK_DOWN: return HGEK_DOWN; - case SDLK_0: return HGEK_0; - case SDLK_1: return HGEK_1; - case SDLK_2: return HGEK_2; - case SDLK_3: return HGEK_3; - case SDLK_4: return HGEK_4; - case SDLK_5: return HGEK_5; - case SDLK_6: return HGEK_6; - case SDLK_7: return HGEK_7; - case SDLK_8: return HGEK_8; - case SDLK_9: return HGEK_9; - case SDLK_a: return HGEK_A; - case SDLK_b: return HGEK_B; - case SDLK_c: return HGEK_C; - case SDLK_d: return HGEK_D; - case SDLK_e: return HGEK_E; - case SDLK_f: return HGEK_F; - case SDLK_g: return HGEK_G; - case SDLK_h: return HGEK_H; - case SDLK_i: return HGEK_I; - case SDLK_j: return HGEK_J; - case SDLK_k: return HGEK_K; - case SDLK_l: return HGEK_L; - case SDLK_m: return HGEK_M; - case SDLK_n: return HGEK_N; - case SDLK_o: return HGEK_O; - case SDLK_p: return HGEK_P; - case SDLK_q: return HGEK_Q; - case SDLK_r: return HGEK_R; - case SDLK_s: return HGEK_S; - case SDLK_t: return HGEK_T; - case SDLK_u: return HGEK_U; - case SDLK_v: return HGEK_V; - case SDLK_w: return HGEK_W; - case SDLK_x: return HGEK_X; - case SDLK_y: return HGEK_Y; - case SDLK_z: return HGEK_Z; - //case SDLK_GRAVE: return HGEK_GRAVE; - case SDLK_MINUS: return HGEK_MINUS; - case SDLK_EQUALS: return HGEK_EQUALS; - case SDLK_BACKSLASH: return HGEK_BACKSLASH; - case SDLK_LEFTBRACKET: return HGEK_LBRACKET; - case SDLK_RIGHTBRACKET: return HGEK_RBRACKET; - case SDLK_SEMICOLON: return HGEK_SEMICOLON; - case SDLK_QUOTE: return HGEK_APOSTROPHE; - case SDLK_COMMA: return HGEK_COMMA; - case SDLK_PERIOD: return HGEK_PERIOD; - case SDLK_SLASH: return HGEK_SLASH; - case SDLK_KP0: return HGEK_NUMPAD0; - case SDLK_KP1: return HGEK_NUMPAD1; - case SDLK_KP2: return HGEK_NUMPAD2; - case SDLK_KP3: return HGEK_NUMPAD3; - case SDLK_KP4: return HGEK_NUMPAD4; - case SDLK_KP5: return HGEK_NUMPAD5; - case SDLK_KP6: return HGEK_NUMPAD6; - case SDLK_KP7: return HGEK_NUMPAD7; - case SDLK_KP8: return HGEK_NUMPAD8; - case SDLK_KP9: return HGEK_NUMPAD9; - case SDLK_KP_MULTIPLY: return HGEK_MULTIPLY; - case SDLK_KP_DIVIDE: return HGEK_DIVIDE; - case SDLK_KP_PLUS: return HGEK_ADD; - case SDLK_KP_MINUS: return HGEK_SUBTRACT; - case SDLK_KP_PERIOD: return HGEK_DECIMAL; - case SDLK_F1: return HGEK_F1; - case SDLK_F2: return HGEK_F2; - case SDLK_F3: return HGEK_F3; - case SDLK_F4: return HGEK_F4; - case SDLK_F5: return HGEK_F5; - case SDLK_F6: return HGEK_F6; - case SDLK_F7: return HGEK_F7; - case SDLK_F8: return HGEK_F8; - case SDLK_F9: return HGEK_F9; - case SDLK_F10: return HGEK_F10; - case SDLK_F11: return HGEK_F11; - case SDLK_F12: return HGEK_F12; - default: return -1; - } - - return -1; -} - - -bool CALL HGE_Impl::Input_GetEvent(hgeInputEvent *event) -{ - CInputEventList *eptr; - - if(queue) - { - eptr=queue; - memcpy(event, &eptr->event, sizeof(hgeInputEvent)); - queue=eptr->next; - delete eptr; - return true; - } - - return false; -} - -void CALL HGE_Impl::Input_GetMousePos(float *x, float *y) -{ - *x=Xpos; *y=Ypos; -} - - -void CALL HGE_Impl::Input_SetMousePos(float x, float y) -{ - SDL_WarpMouse(x, y); -} - -int CALL HGE_Impl::Input_GetMouseWheel() -{ - return Zpos; -} - -bool CALL HGE_Impl::Input_IsMouseOver() -{ - return bMouseOver; -} - -bool CALL HGE_Impl::Input_GetKeyState(int key) -{ - return (keyz[key] & 4) != 0; -} - -int CALL HGE_Impl::Input_GetKeyStateEx(int key)//New function -{ - if (!Input_GetKeyState(key)&&keylast[key])return HGEKST_RELEASE; - if (!Input_GetKeyState(key))return HGEKST_NONE; - if (Input_GetKeyState(key)&&!keylast[key])return HGEKST_HIT; - return HGEKST_KEEP; -} - -bool CALL HGE_Impl::Input_KeyDown(int key) -{ - return (keyz[key] & 1) != 0; -} - -bool CALL HGE_Impl::Input_KeyUp(int key) -{ - return (keyz[key] & 2) != 0; -} - -const char* CALL HGE_Impl::Input_GetKeyName(int key) -{ - return KeyNames[key]; -} - -int CALL HGE_Impl::Input_GetKey() -{ - return VKey; -} - -int CALL HGE_Impl::Input_GetChar() -{ - return Char; -} - - -//////// Implementation //////// - - -void HGE_Impl::_InputInit() -{ - Xpos = 0; // eh. - Ypos = 0; - memset(&keyz, 0, sizeof(keyz)); -} - -void HGE_Impl::_UpdateMouse() -{ - // no-op. -} - - -void HGE_Impl::_BuildEvent(int type, int key, int scan, int flags, int x, int y) -{ - CInputEventList *last, *eptr=new CInputEventList; - - eptr->event.type=type; - eptr->event.chr=0; - int ptx=x; - int pty=y; - - if(type==INPUT_KEYDOWN) - { - key = SDLKeyToHGEKey(key); - if ( (key < 0) || (key > (int)(sizeof (keyz) / sizeof (keyz[0]))) ) return; - keyz[key] |= 4; - if((flags & HGEINP_REPEAT) == 0) keyz[key] |= 1; - eptr->event.chr = (char) ((key >= 32) && (key <= 127)) ? key : 0; // these map to ASCII in sdl. - } - if(type==INPUT_KEYUP) - { - key = SDLKeyToHGEKey(key); - if ( (key < 0) || (key > (int)(sizeof (keyz) / sizeof (keyz[0]))) ) return; - keyz[key] &= ~4; - keyz[key] |= 2; - eptr->event.chr = (char) ((key >= 32) && (key <= 127)) ? key : 0; // these map to ASCII in sdl. - } - if(type==INPUT_MOUSEWHEEL) - { - eptr->event.key=0; eptr->event.wheel=key; - } - else { eptr->event.key=key; eptr->event.wheel=0; } - - if(type==INPUT_MBUTTONDOWN) - { - keyz[key] |= 1; - keyz[key] |= 4; - //SetCapture(hwnd); - bCaptured=true; - } - if(type==INPUT_MBUTTONUP) - { - keyz[key] |= 2; - keyz[key] &= ~4; - //ReleaseCapture(); - //Input_SetMousePos(Xpos, Ypos); - ptx=(int)Xpos; pty=(int)Ypos; - bCaptured=false; - } - - if(keymods & KMOD_SHIFT) flags|=HGEINP_SHIFT; - if(keymods & KMOD_CTRL) flags|=HGEINP_CTRL; - if(keymods & KMOD_ALT) flags|=HGEINP_ALT; - if(keymods & KMOD_CAPS) flags|=HGEINP_CAPSLOCK; - if(keymods & KMOD_MODE) flags|=HGEINP_SCROLLLOCK; - if(keymods & KMOD_NUM) flags|=HGEINP_NUMLOCK; - eptr->event.flags=flags; - - if(ptx==-1) { eptr->event.x=Xpos;eptr->event.y=Ypos; } - else - { - if(ptx<0) ptx=0; - if(pty<0) pty=0; - if(ptx>=nScreenWidth) ptx=nScreenWidth-1; - if(pty>=nScreenHeight) pty=nScreenHeight-1; - - eptr->event.x=(float)ptx; - eptr->event.y=(float)pty; - } - - eptr->next=0; - - if(!queue) queue=eptr; - else - { - last=queue; - while(last->next) last=last->next; - last->next=eptr; - } - - if(eptr->event.type==INPUT_KEYDOWN || eptr->event.type==INPUT_MBUTTONDOWN) - { - VKey=eptr->event.key;Char=eptr->event.chr; - } - else if(eptr->event.type==INPUT_MOUSEMOVE) - { - Xpos=eptr->event.x;Ypos=eptr->event.y; - } - else if(eptr->event.type==INPUT_MOUSEWHEEL) - { - Zpos+=eptr->event.wheel; - } -} - -void HGE_Impl::_ClearQueue() -{ - CInputEventList *nexteptr, *eptr=queue; - - //memset(&keyz, 0, sizeof(keyz)); - for (int i = 0; i < (int)(sizeof (keyz) / sizeof (keyz[0])); i++) - keyz[i] &= ~3; // only reset some of the bits. - - while(eptr) - { - nexteptr=eptr->next; - delete eptr; - eptr=nexteptr; - } - - queue=0; VKey=0; Char=0; Zpos=0; -} |