renamed a few more members and changed some switch statements
[physics.git] / src / input / inputManager.cpp
index 21934c4..1ba4147 100644 (file)
  */
 
 #include "inputManager.h"
-#include "../debug.h"
 
-#include "../config/keys.h"
+#include <bear/debug.h>
+using namespace bear;
+
+#include <SDL/SDL.h>
+
+#include "config/keys.h"
 
 
 /// ***** Private Variables *****
@@ -38,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()
 {
@@ -48,31 +55,44 @@ void input::clean()
 
 /// ***** Public Methods *****
 
+const Uint32 eventMask = -1; // ALL events
+
 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(SDL_PollEvent(&event))
+    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;
+            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
         }
     }
 }
@@ -98,20 +118,20 @@ bool input::mouseRight()
     return state & SDL_BUTTON(3);
 }
 
-bool input::isPressed(SDLKey key)
+bool input::isPressed(const SDLKey& key)
 {
     return keyState[key] == isP || keyState[key] == wasP;
 }
-bool input::isReleased(SDLKey key)
+bool input::isReleased(const SDLKey& key)
 {
     return keyState[key] == isR || keyState[key] == wasR;
 }
 
-bool input::wasPressed(SDLKey key)
+bool input::wasPressed(const SDLKey& key)
 {
     return keyState[key] == wasP;
 }
-bool input::wasReleased(SDLKey key)
+bool input::wasReleased(const SDLKey& key)
 {
     return keyState[key] == wasR;
 }