moved event pumping onto the draw thread, should fix windows event problems
[physics.git] / src / input / inputManager.cpp
index e8b92c6..94b645d 100644 (file)
@@ -1,7 +1,30 @@
+/*
+ *  Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com.
+ *
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
 
 #include "inputManager.h"
 #include "../debug.h"
 
+#include <SDL/SDL.h>
+
+#include "../config/keys.h"
+
+
+/// ***** Private Variables *****
+
 enum State
 {
     isR,
@@ -13,13 +36,23 @@ enum State
 static const int keySize = 323;
 static State keyState[keySize];
 
-void inputInit()
+/// ***** Initializers/Cleaners *****
+
+void input::init()
 {
     for(int i=0; i< keySize; i++)
         keyState[i] = isR;
 }
+void input::clean()
+{
+
+}
+
+/// ***** Public Methods *****
 
-void inputUpdate()
+const Uint32 eventMask = -1; // ALL events
+
+void input::update()
 {
     SDL_Event event;
 
@@ -31,7 +64,7 @@ void inputUpdate()
             keyState[i] = isP;
     }
 
-    while(SDL_PollEvent(&event))
+    while(0 < SDL_PeepEvents(&event, 1, SDL_GETEVENT, eventMask))
     {
         switch(event.type)
         {
@@ -41,24 +74,50 @@ void inputUpdate()
         case SDL_KEYDOWN:
             keyState[event.key.keysym.sym] = wasP;
             break;
+        case SDL_QUIT:
+            keyState[key::end] = wasR;
+            break;
+        default:
+            break;
         }
     }
 }
 
-bool isPressed(Uint8 key)
+Vector2 input::mousePosition()
+{
+    int x,y;
+    SDL_GetMouseState(&x, &y);
+
+    return Vector2(x,y);
+}
+
+bool input::mouseLeft()
+{
+    Uint8 state = SDL_GetMouseState(NULL, NULL);
+
+    return state & SDL_BUTTON(1);
+}
+bool input::mouseRight()
+{
+    Uint8 state = SDL_GetMouseState(NULL, NULL);
+
+    return state & SDL_BUTTON(3);
+}
+
+bool input::isPressed(const SDLKey& key)
 {
     return keyState[key] == isP || keyState[key] == wasP;
 }
-bool isReleased(Uint8 key)
+bool input::isReleased(const SDLKey& key)
 {
     return keyState[key] == isR || keyState[key] == wasR;
 }
 
-bool wasPressed(Uint8 key)
+bool input::wasPressed(const SDLKey& key)
 {
     return keyState[key] == wasP;
 }
-bool wasReleased(Uint8 key)
+bool input::wasReleased(const SDLKey& key)
 {
     return keyState[key] == wasR;
 }