void input::init()
{
+ // default all keys to released
for(int i=0; i< keySize; i++)
+ {
keyState[i] = isR;
+ }
}
void input::clean()
{
{
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
}
}
}