X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2Finput%2FinputManager.cpp;h=1ba4147063f37b54da1d5c023e370e53efe0af1c;hp=23b945c4325e7a76e039d3d6cfc32f849044e290;hb=3ae4b04702cc54d19264e57105a7073c40c5e116;hpb=fd1a93a71bc0222dd77f56c145d550cb6f7829bc diff --git a/src/input/inputManager.cpp b/src/input/inputManager.cpp index 23b945c..1ba4147 100644 --- a/src/input/inputManager.cpp +++ b/src/input/inputManager.cpp @@ -42,8 +42,11 @@ static State keyState[keySize]; void input::init() { + // default all keys to released for(int i=0; i< keySize; i++) + { keyState[i] = isR; + } } void input::clean() { @@ -58,29 +61,38 @@ void input::update() { SDL_Event event; - for(int i=0; i< keySize; i++) + for(int i=0; i < keySize; i++) { - if(keyState[i] == wasR) - keyState[i] = isR; - else if(keyState[i] == wasP) - keyState[i] = isP; + State newKeyState; + + switch(keyState[i]) + { + case isR: newKeyState = isR; break; + case wasR: newKeyState = isR; break; + case isP: newKeyState = isP; break; + case wasP: newKeyState = isP; break; + default: DASSERT(false); return; + } + + keyState[i] = newKeyState; } while(0 < SDL_PeepEvents(&event, 1, SDL_GETEVENT, eventMask)) { switch(event.type) { - case SDL_KEYUP: - keyState[event.key.keysym.sym] = wasR; - break; - case SDL_KEYDOWN: - keyState[event.key.keysym.sym] = wasP; - break; - case SDL_QUIT: - keyState[key::end] = wasR; - break; - default: - break; + case SDL_KEYUP: + keyState[event.key.keysym.sym] = wasR; + break; + case SDL_KEYDOWN: + keyState[event.key.keysym.sym] = wasP; + break; + case SDL_QUIT: + // HACK: simulate an SDL_QUIT event as an ESC key press + keyState[key::end] = wasR; + break; + default: + break; // somthing I don't care about } } }