Forráskód Böngészése

Changed Input.h to separate out Keyboard and Touch into seperate headers.
Updated interfaces for Game input handling and added accellerometer api here too.

Sean Paul Taylor 14 éve
szülő
commit
6722f1d75d

+ 4 - 4
gameplay-encoder/gameplay-encoder.vcxproj

@@ -145,16 +145,16 @@
       </PrecompiledHeader>
       </PrecompiledHeader>
       <WarningLevel>Level4</WarningLevel>
       <WarningLevel>Level4</WarningLevel>
       <Optimization>Disabled</Optimization>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../external-deps/freetype2/include;../external-deps/collada-dom/include;../external-deps/collada-dom/include/1.4;../external-deps/libpng/include;../external-deps/zlib/include</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;USE_FBX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../external-deps/freetype2/include;../external-deps/collada-dom/include;../external-deps/collada-dom/include/1.4;../external-deps/libpng/include;../external-deps/zlib/include;C:/Program Files/Autodesk/FBX/FbxSdk/2012.2/include</AdditionalIncludeDirectories>
       <DisableLanguageExtensions>
       <DisableLanguageExtensions>
       </DisableLanguageExtensions>
       </DisableLanguageExtensions>
     </ClCompile>
     </ClCompile>
     <Link>
     <Link>
       <SubSystem>Console</SubSystem>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>../external-deps/freetype2/lib/win32;../external-deps/collada-dom/lib/win32;../external-deps/libpng/lib/win32;../external-deps/zlib/lib/win32</AdditionalLibraryDirectories>
-      <AdditionalDependencies>freetype245.lib;libcollada14dom22-d.lib;libpng14.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../external-deps/freetype2/lib/win32;../external-deps/collada-dom/lib/win32;../external-deps/libpng/lib/win32;../external-deps/zlib/lib/win32;C:/Program Files/Autodesk/FBX/FbxSdk/2012.2/lib/vs2010/x86</AdditionalLibraryDirectories>
+      <AdditionalDependencies>freetype245.lib;libcollada14dom22-d.lib;libpng14.lib;zlib.lib;fbxsdk-2012.2-mdd.lib;wininet.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
       <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
     </Link>
     </Link>
     <PostBuildEvent>
     <PostBuildEvent>

+ 2 - 2
gameplay/gameplay.vcxproj

@@ -39,7 +39,6 @@
     <ClCompile Include="src\gameplay-main-qnx.cpp" />
     <ClCompile Include="src\gameplay-main-qnx.cpp" />
     <ClCompile Include="src\gameplay-main-win32.cpp" />
     <ClCompile Include="src\gameplay-main-win32.cpp" />
     <ClCompile Include="src\Image.cpp" />
     <ClCompile Include="src\Image.cpp" />
-    <ClCompile Include="src\Input.cpp" />
     <ClCompile Include="src\Joint.cpp" />
     <ClCompile Include="src\Joint.cpp" />
     <ClCompile Include="src\Light.cpp" />
     <ClCompile Include="src\Light.cpp" />
     <ClCompile Include="src\Material.cpp" />
     <ClCompile Include="src\Material.cpp" />
@@ -110,8 +109,8 @@
     <ClInclude Include="src\Game.h" />
     <ClInclude Include="src\Game.h" />
     <ClInclude Include="src\gameplay.h" />
     <ClInclude Include="src\gameplay.h" />
     <ClInclude Include="src\Image.h" />
     <ClInclude Include="src\Image.h" />
-    <ClInclude Include="src\Input.h" />
     <ClInclude Include="src\Joint.h" />
     <ClInclude Include="src\Joint.h" />
+    <ClInclude Include="src\Keyboard.h" />
     <ClInclude Include="src\Light.h" />
     <ClInclude Include="src\Light.h" />
     <ClInclude Include="src\Material.h" />
     <ClInclude Include="src\Material.h" />
     <ClInclude Include="src\Pass.h" />
     <ClInclude Include="src\Pass.h" />
@@ -147,6 +146,7 @@
     <ClInclude Include="src\SpriteBatch.h" />
     <ClInclude Include="src\SpriteBatch.h" />
     <ClInclude Include="src\Technique.h" />
     <ClInclude Include="src\Technique.h" />
     <ClInclude Include="src\Texture.h" />
     <ClInclude Include="src\Texture.h" />
+    <ClInclude Include="src\Touch.h" />
     <ClInclude Include="src\Transform.h" />
     <ClInclude Include="src\Transform.h" />
     <ClInclude Include="src\Vector2.h" />
     <ClInclude Include="src\Vector2.h" />
     <ClInclude Include="src\Vector3.h" />
     <ClInclude Include="src\Vector3.h" />

+ 6 - 6
gameplay/gameplay.vcxproj.filters

@@ -54,9 +54,6 @@
     <ClCompile Include="src\Game.cpp">
     <ClCompile Include="src\Game.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="src\Input.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
     <ClCompile Include="src\Light.cpp">
     <ClCompile Include="src\Light.cpp">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClCompile>
     </ClCompile>
@@ -272,9 +269,6 @@
     <ClInclude Include="src\gameplay.h">
     <ClInclude Include="src\gameplay.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="src\Input.h">
-      <Filter>src</Filter>
-    </ClInclude>
     <ClInclude Include="src\Light.h">
     <ClInclude Include="src\Light.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
@@ -428,6 +422,12 @@
     <ClInclude Include="src\DepthStencilTarget.h">
     <ClInclude Include="src\DepthStencilTarget.h">
       <Filter>src</Filter>
       <Filter>src</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="src\Keyboard.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Touch.h">
+      <Filter>src</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="res\shaders\bumped-specular.vsh">
     <None Include="res\shaders\bumped-specular.vsh">

+ 2 - 6
gameplay/src/Game.cpp

@@ -237,15 +237,11 @@ void Game::menu()
 {
 {
 }
 }
 
 
-void Game::keyChar(char key)
+void Game::keyEvent(Keyboard::KeyEvent evt, int key)
 {
 {
 }
 }
 
 
-void Game::keyPress(int key, int keyEvent)
-{
-}
-
-void Game::touch(int x, int y, int touchEvent)
+void Game::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
 {
 {
 }
 }
 
 

+ 31 - 18
gameplay/src/Game.h

@@ -1,7 +1,8 @@
 #ifndef GAME_H_
 #ifndef GAME_H_
 #define GAME_H_
 #define GAME_H_
 
 
-#include "Input.h"
+#include "Keyboard.h"
+#include "Touch.h"
 #include "AudioController.h"
 #include "AudioController.h"
 #include "AnimationController.h"
 #include "AnimationController.h"
 #include "PhysicsController.h"
 #include "PhysicsController.h"
@@ -185,33 +186,45 @@ public:
     virtual void menu();
     virtual void menu();
 
 
     /**
     /**
-     * Input callback on keyChar events.
+     * Keyboard callback on keyPress events.
      *
      *
-     * @param key The key code pressed.
+     * @param evt The key event that occured.
+     * @param key The key code that was pressed, released or repeated.
+     * 
+     * @see Keyboard::Key
      */
      */
-    virtual void keyChar(char key);
+    virtual void keyEvent(Keyboard::KeyEvent evt, int key);
 
 
     /**
     /**
-     * Input callback on keyPress events.
+     * Touch callback on touch events.
      *
      *
-     * @param key The key code pressed.
-     * @param keyEvent The key event that occured.
-     * 
-     * @see Input::Key
-     * @see Input::KeyEvent
+     * @param evt The touch event that occurred.
+     *
+     * @see Touch::TouchEvent
      */
      */
-    virtual void keyPress(int key, int keyEvent);
+    virtual void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
 
 
     /**
     /**
-     * Input callback on touch events.
+     * Sets muli-touch is to be enabled/disabled. Default is disabled.
      *
      *
-     * @param x The x position of the touch.
-     * @param y The y position of the touch.
-     * @param touchEvent The touch event that occurred.
-     * 
-     * @see Input::TouchEvent
+     * @param enabled true sets multi-touch is enabled, false to be disabled.
+     */
+    inline void setMultiTouch(bool enabled);
+
+    /**
+     * Is multi-touch mode enabled.
+     *
+     * @return true is multi-touch is enabled.
+     */
+    inline bool isMultiTouch() const;
+
+    /**
+     * Gets the current accelerometer values.
+     *
+     * @param pitch The pitch angle returned (in degrees). If NULL then not returned.
+     * @param roll The roll angle returned (in degrees). If NULL then not returned.
      */
      */
-    virtual void touch(int x, int y, int touchEvent);
+    inline void getAccelerometerValues(float* pitch, float* roll);
 
 
 protected:
 protected:
 
 

+ 15 - 2
gameplay/src/Game.inl

@@ -42,8 +42,21 @@ inline PhysicsController* Game::getPhysicsController() const
 template <class T>
 template <class T>
 void  Game::renderOnce(T* instance, void (T::*method)(void*), void* cookie)
 void  Game::renderOnce(T* instance, void (T::*method)(void*), void* cookie)
 {
 {
-    (instance->*method)(cookie);
-    Platform::swapBuffers();
+}
+
+inline void Game::setMultiTouch(bool enabled)
+{
+    Platform::setMultiTouch(enabled);
+}
+
+inline bool isMultiTouch()
+{
+    return Platform::isMultiTouch();
+}
+
+inline void Game::getAccelerometerValues(float* pitch, float* roll)
+{
+    Platform::getAccelerometerValues(pitch, roll);
 }
 }
 
 
 }
 }

+ 0 - 23
gameplay/src/Input.cpp

@@ -1,23 +0,0 @@
-#include "Base.h"
-#include "Input.h"
-#include "Platform.h"
-#include "Game.h"
-
-namespace gameplay
-{
-
-Input::Input()
-{
-}
-
-bool Input::isAccelerometerSupported()
-{
-    return Platform::isAccelerometerSupported();
-}
-
-void Input::getAccelerometerPitchAndRoll(float* pitch, float* roll)
-{
-    Platform::getAccelerometerPitchAndRoll(pitch, roll);
-}
-
-}

+ 12 - 34
gameplay/src/Input.h → gameplay/src/Keyboard.h

@@ -1,33 +1,26 @@
-#ifndef INPUT_H_
-#define INPUT_H_
+
+#ifndef KEYBOARD_H_
+#define KEYBOARD_H_
 
 
 namespace gameplay
 namespace gameplay
 {
 {
 
 
 /**
 /**
- * Defines an input class for requesting input.
+ * Keyboard key event and key definitions.
  */
  */
-class Input
+class Keyboard
 {
 {
-public:
+    friend class Platform;
 
 
-    /**
-     * The touch event.
-     */
-    enum TouchEvent
-    {
-        TOUCHEVENT_PRESS,
-        TOUCHEVENT_RELEASE,
-        TOUCHEVENT_MOVE
-    };
+public:
 
 
-    /**
-     * The key event.
+   /**
+     * The keyboard event.
      */
      */
     enum KeyEvent
     enum KeyEvent
     {
     {
-        KEYEVENT_DOWN,
-        KEYEVENT_UP
+        KEY_PRESS,
+        KEY_RELEASE
     };
     };
 
 
     /**
     /**
@@ -192,27 +185,12 @@ public:
         KEY_TILDE
         KEY_TILDE
     };
     };
 
 
-    /**
-     * Indicates if the game device supports accelerometer.
-     * 
-     * @return true if the accelerometer is supported; false otherwise.
-     */
-    static bool isAccelerometerSupported();
-
-    /**
-     * Gets the current accelerometer pitch and roll angles.
-     *
-     * @param pitch The pitch angle returned (in degrees). If NULL then not returned.
-     * @param roll The roll angle returned (in degrees). If NULL then not returned.
-     */
-    static void getAccelerometerPitchAndRoll(float* pitch, float* roll);
-
 private:
 private:
 
 
     /**
     /**
      * Constructor. Private for static.
      * Constructor. Private for static.
      */
      */
-    Input();
+    Keyboard() { }
 };
 };
 
 
 }
 }

+ 11 - 9
gameplay/src/Platform.h

@@ -73,22 +73,25 @@ public:
     static int getOrientationAngle();
     static int getOrientationAngle();
 
 
     /**
     /**
-     * Indicates whether the platform supports an accelerometer.
-     * 
-     * @return true if the accelerometer is supported, false otherwise.
+     * Set if multi-touch is enabled on the platform
      */
      */
-    static bool isAccelerometerSupported();
+    static void setMultiTouch(bool enabled);
+
+   /**
+    * Is multi-touch mode enabled.
+    */
+    static bool isMultiTouch();
 
 
     /**
     /**
-     * Gets the platform accelerometer pitch and roll.
+     * Gets the platform accelerometer values.
      * 
      * 
      * @param pitch The accelerometer pitch.
      * @param pitch The accelerometer pitch.
      * @param roll The accelerometer roll.
      * @param roll The accelerometer roll.
      */
      */
-    static void getAccelerometerPitchAndRoll(float* pitch, float* roll);
+    static void getAccelerometerValues(float* pitch, float* roll);
 
 
     /**
     /**
-     * Swaps the 
+     * Swaps the frame buffer on the device.
      */
      */
     static void swapBuffers();
     static void swapBuffers();
 
 
@@ -104,8 +107,7 @@ private:
      */
      */
     Platform(const Platform& copy);
     Platform(const Platform& copy);
 
 
-    Game* _game;
-
+    Game* _game;                // The game this platform is interfacing with.
 };
 };
 
 
 }
 }

+ 110 - 117
gameplay/src/PlatformMacOS.mm

@@ -4,7 +4,6 @@
 #include "Platform.h"
 #include "Platform.h"
 #include "FileSystem.h"
 #include "FileSystem.h"
 #include "Game.h"
 #include "Game.h"
-#include "Input.h"
 
 
 #import <Cocoa/Cocoa.h>
 #import <Cocoa/Cocoa.h>
 #import <QuartzCore/CVDisplayLink.h>
 #import <QuartzCore/CVDisplayLink.h>
@@ -179,14 +178,14 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
 {
 {
     NSPoint point = [event locationInWindow];
     NSPoint point = [event locationInWindow];
     __leftMouseDown = true;
     __leftMouseDown = true;
-    _game->touch(point.x, WINDOW_HEIGHT - point.y, Input::TOUCHEVENT_PRESS);
+    _game->touchEvent(Touch::TOUCH_PRESS, point.x, WINDOW_HEIGHT - point.y, 0);
 }
 }
 
 
 - (void) mouseUp: (NSEvent*) event
 - (void) mouseUp: (NSEvent*) event
 {
 {
     NSPoint point = [event locationInWindow];
     NSPoint point = [event locationInWindow];
     __leftMouseDown = false;
     __leftMouseDown = false;
-    _game->touch(point.x, WINDOW_HEIGHT - point.y, Input::TOUCHEVENT_RELEASE);
+    _game->touchEvent(Touch::TOUCH_RELEASE, point.x, WINDOW_HEIGHT - point.y, 0);
 }
 }
 
 
 - (void) mouseDragged: (NSEvent*) event
 - (void) mouseDragged: (NSEvent*) event
@@ -194,7 +193,7 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
     NSPoint point = [event locationInWindow];
     NSPoint point = [event locationInWindow];
     if (__leftMouseDown)
     if (__leftMouseDown)
     {
     {
-        _game->touch(point.x, WINDOW_HEIGHT - point.y, Input::TOUCHEVENT_MOVE);
+        _game->touchEvent(Touch::EVENT_MOVE, point.x, WINDOW_HEIGHT - point.y, 0);
     }
     }
 }
 }
 
 
@@ -253,194 +252,194 @@ int getKey(unsigned short keyCode, unsigned int modifierFlags)
     switch(keyCode)
     switch(keyCode)
     {
     {
         case 0x69:
         case 0x69:
-            return Input::KEY_PRINT;
+            return Keyboard::KEY_PRINT;
         case 0x35:
         case 0x35:
-            return Input::KEY_ESCAPE;
+            return Keyboard::KEY_ESCAPE;
         case 0x33:
         case 0x33:
-            return Input::KEY_BACKSPACE;
+            return Keyboard::KEY_BACKSPACE;
         case 0x30:
         case 0x30:
-            return Input::KEY_TAB;
+            return Keyboard::KEY_TAB;
         case 0x24:
         case 0x24:
-            return Input::KEY_RETURN;
+            return Keyboard::KEY_RETURN;
         case 0x72:
         case 0x72:
-            return Input::KEY_INSERT;
+            return Keyboard::KEY_INSERT;
         case 0x73:
         case 0x73:
-            return Input::KEY_HOME;
+            return Keyboard::KEY_HOME;
         case 0x74:
         case 0x74:
-            return Input::KEY_PG_UP;
+            return Keyboard::KEY_PG_UP;
         case 0x79:
         case 0x79:
-            return Input::KEY_PG_DOWN;
+            return Keyboard::KEY_PG_DOWN;
         case 0x75:
         case 0x75:
-            return Input::KEY_DELETE;
+            return Keyboard::KEY_DELETE;
         case 0x77:
         case 0x77:
-            return Input::KEY_END;
+            return Keyboard::KEY_END;
         case 0x7B:
         case 0x7B:
-            return Input::KEY_LEFT_ARROW;
+            return Keyboard::KEY_LEFT_ARROW;
         case 0x7C:
         case 0x7C:
-            return Input::KEY_RIGHT_ARROW;
+            return Keyboard::KEY_RIGHT_ARROW;
         case 0x7E:
         case 0x7E:
-            return Input::KEY_UP_ARROW;
+            return Keyboard::KEY_UP_ARROW;
         case 0x7D:
         case 0x7D:
-            return Input::KEY_DOWN_ARROW;
+            return Keyboard::KEY_DOWN_ARROW;
         case 0x47:
         case 0x47:
-            return Input::KEY_NUM_LOCK;
+            return Keyboard::KEY_NUM_LOCK;
         case 0x45:
         case 0x45:
-            return Input::KEY_KP_PLUS;
+            return Keyboard::KEY_KP_PLUS;
         case 0x4E:
         case 0x4E:
-            return Input::KEY_KP_MINUS;
+            return Keyboard::KEY_KP_MINUS;
         case 0x43:
         case 0x43:
-            return Input::KEY_KP_MULTIPLY;
+            return Keyboard::KEY_KP_MULTIPLY;
         case 0x4B:
         case 0x4B:
-            return Input::KEY_KP_DIVIDE;
+            return Keyboard::KEY_KP_DIVIDE;
         case 0x59:
         case 0x59:
-            return Input::KEY_KP_HOME;
+            return Keyboard::KEY_KP_HOME;
         case 0x5B:
         case 0x5B:
-            return Input::KEY_KP_UP;
+            return Keyboard::KEY_KP_UP;
         case 0x5C:
         case 0x5C:
-            return Input::KEY_KP_PG_UP;
+            return Keyboard::KEY_KP_PG_UP;
         case 0x56:
         case 0x56:
-            return Input::KEY_KP_LEFT;
+            return Keyboard::KEY_KP_LEFT;
         case 0x57:
         case 0x57:
-            return Input::KEY_KP_FIVE;
+            return Keyboard::KEY_KP_FIVE;
         case 0x58:
         case 0x58:
-            return Input::KEY_KP_RIGHT;
+            return Keyboard::KEY_KP_RIGHT;
         case 0x53:
         case 0x53:
-            return Input::KEY_KP_END;
+            return Keyboard::KEY_KP_END;
         case 0x54:
         case 0x54:
-            return Input::KEY_KP_DOWN;
+            return Keyboard::KEY_KP_DOWN;
         case 0x55:
         case 0x55:
-            return Input::KEY_KP_PG_DOWN;
+            return Keyboard::KEY_KP_PG_DOWN;
         case 0x52:
         case 0x52:
-            return Input::KEY_KP_INSERT;
+            return Keyboard::KEY_KP_INSERT;
         case 0x41:
         case 0x41:
-            return Input::KEY_KP_DELETE;
+            return Keyboard::KEY_KP_DELETE;
         case 0x7A:
         case 0x7A:
-            return Input::KEY_F1;
+            return Keyboard::KEY_F1;
         case 0x78:
         case 0x78:
-            return Input::KEY_F2;
+            return Keyboard::KEY_F2;
         case 0x63:
         case 0x63:
-            return Input::KEY_F3;
+            return Keyboard::KEY_F3;
         case 0x76:
         case 0x76:
-            return Input::KEY_F4;
+            return Keyboard::KEY_F4;
         case 0x60:
         case 0x60:
-            return Input::KEY_F5;
+            return Keyboard::KEY_F5;
         case 0x61:
         case 0x61:
-            return Input::KEY_F6;
+            return Keyboard::KEY_F6;
         case 0x62:
         case 0x62:
-            return Input::KEY_F7;
+            return Keyboard::KEY_F7;
         case 0x64:
         case 0x64:
-            return Input::KEY_F8;
+            return Keyboard::KEY_F8;
         case 0x65:
         case 0x65:
-            return Input::KEY_F9;
+            return Keyboard::KEY_F9;
         case 0x6D:
         case 0x6D:
-            return Input::KEY_F10;
+            return Keyboard::KEY_F10;
         
         
         // MACOS reserved:
         // MACOS reserved:
-        //return Input::KEY_F11;
-        //return Input::KEY_F12;
-        // return Input::KEY_PAUSE;
-        // return Input::KEY_SCROLL_LOCK;
+        //return Keyboard::KEY_F11;
+        //return Keyboard::KEY_F12;
+        // return Keyboard::KEY_PAUSE;
+        // return Keyboard::KEY_SCROLL_LOCK;
             
             
         case 0x31:
         case 0x31:
-            return Input::KEY_SPACE;
+            return Keyboard::KEY_SPACE;
         case 0x1D:
         case 0x1D:
-            return __shiftDown ? Input::KEY_RIGHT_PARENTHESIS : Input::KEY_ZERO;
+            return __shiftDown ? Keyboard::KEY_RIGHT_PARENTHESIS : Keyboard::KEY_ZERO;
         case 0x12:
         case 0x12:
-            return __shiftDown ? Input::KEY_EXCLAM : Input::KEY_ONE;
+            return __shiftDown ? Keyboard::KEY_EXCLAM : Keyboard::KEY_ONE;
         case 0x13:
         case 0x13:
-            return __shiftDown ? Input::KEY_AT : Input::KEY_TWO;
+            return __shiftDown ? Keyboard::KEY_AT : Keyboard::KEY_TWO;
         case 0x14:
         case 0x14:
-            return __shiftDown ? Input::KEY_NUMBER : Input::KEY_THREE;
+            return __shiftDown ? Keyboard::KEY_NUMBER : Keyboard::KEY_THREE;
         case 0x15:
         case 0x15:
-            return __shiftDown ? Input::KEY_DOLLAR : Input::KEY_FOUR;
+            return __shiftDown ? Keyboard::KEY_DOLLAR : Keyboard::KEY_FOUR;
         case 0x17:
         case 0x17:
-            return __shiftDown ? Input::KEY_PERCENT : Input::KEY_FIVE;
+            return __shiftDown ? Keyboard::KEY_PERCENT : Keyboard::KEY_FIVE;
         case 0x16:
         case 0x16:
-            return __shiftDown ? Input::KEY_CIRCUMFLEX : Input::KEY_SIX;
+            return __shiftDown ? Keyboard::KEY_CIRCUMFLEX : Keyboard::KEY_SIX;
         case 0x1A:
         case 0x1A:
-            return __shiftDown ? Input::KEY_AMPERSAND : Input::KEY_SEVEN;
+            return __shiftDown ? Keyboard::KEY_AMPERSAND : Keyboard::KEY_SEVEN;
         case 0x1C:
         case 0x1C:
-            return __shiftDown ? Input::KEY_ASTERISK : Input::KEY_EIGHT;
+            return __shiftDown ? Keyboard::KEY_ASTERISK : Keyboard::KEY_EIGHT;
         case 0x19:
         case 0x19:
-            return __shiftDown ? Input::KEY_LEFT_PARENTHESIS : Input::KEY_NINE;
+            return __shiftDown ? Keyboard::KEY_LEFT_PARENTHESIS : Keyboard::KEY_NINE;
         case 0x18:
         case 0x18:
-            return __shiftDown ? Input::KEY_EQUAL : Input::KEY_PLUS;
+            return __shiftDown ? Keyboard::KEY_EQUAL : Keyboard::KEY_PLUS;
         case 0x2B:
         case 0x2B:
-            return __shiftDown ? Input::KEY_LESS_THAN : Input::KEY_COMMA;
+            return __shiftDown ? Keyboard::KEY_LESS_THAN : Keyboard::KEY_COMMA;
         case 0x1B:
         case 0x1B:
-            return __shiftDown ? Input::KEY_UNDERSCORE : Input::KEY_MINUS;
+            return __shiftDown ? Keyboard::KEY_UNDERSCORE : Keyboard::KEY_MINUS;
         case 0x2F:
         case 0x2F:
-            return __shiftDown ? Input::KEY_GREATER_THAN : Input::KEY_PERIOD;
+            return __shiftDown ? Keyboard::KEY_GREATER_THAN : Keyboard::KEY_PERIOD;
         case 0x29:
         case 0x29:
-            return __shiftDown ? Input::KEY_COLON : Input::KEY_SEMICOLON;
+            return __shiftDown ? Keyboard::KEY_COLON : Keyboard::KEY_SEMICOLON;
         case 0x2C:
         case 0x2C:
-            return __shiftDown ? Input::KEY_QUESTION : Input::KEY_SLASH;
+            return __shiftDown ? Keyboard::KEY_QUESTION : Keyboard::KEY_SLASH;
         case 0x32:
         case 0x32:
-            return __shiftDown ? Input::KEY_GRAVE : Input::KEY_TILDE;
+            return __shiftDown ? Keyboard::KEY_GRAVE : Keyboard::KEY_TILDE;
         case 0x21:
         case 0x21:
-            return __shiftDown ? Input::KEY_LEFT_BRACE : Input::KEY_LEFT_BRACKET;
+            return __shiftDown ? Keyboard::KEY_LEFT_BRACE : Keyboard::KEY_LEFT_BRACKET;
         case 0x2A:
         case 0x2A:
-            return __shiftDown ? Input::KEY_BAR : Input::KEY_BACK_SLASH;
+            return __shiftDown ? Keyboard::KEY_BAR : Keyboard::KEY_BACK_SLASH;
         case 0x1E:
         case 0x1E:
-            return __shiftDown ? Input::KEY_RIGHT_BRACE : Input::KEY_RIGHT_BRACKET;
+            return __shiftDown ? Keyboard::KEY_RIGHT_BRACE : Keyboard::KEY_RIGHT_BRACKET;
         case 0x27:
         case 0x27:
-            return __shiftDown ? Input::KEY_QUOTE : Input::KEY_APOSTROPHE;
+            return __shiftDown ? Keyboard::KEY_QUOTE : Keyboard::KEY_APOSTROPHE;
             
             
         case 0x00:
         case 0x00:
-             return __shiftDown ? Input::KEY_CAPITAL_A : Input::KEY_A;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_A : Keyboard::KEY_A;
         case 0x0B:
         case 0x0B:
-             return __shiftDown ? Input::KEY_CAPITAL_B : Input::KEY_B;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_B : Keyboard::KEY_B;
         case 0x08:
         case 0x08:
-             return __shiftDown ? Input::KEY_CAPITAL_C : Input::KEY_C;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_C : Keyboard::KEY_C;
         case 0x02:
         case 0x02:
-             return __shiftDown ? Input::KEY_CAPITAL_D : Input::KEY_D;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_D : Keyboard::KEY_D;
         case 0x0E:
         case 0x0E:
-             return __shiftDown ? Input::KEY_CAPITAL_E : Input::KEY_E;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_E : Keyboard::KEY_E;
         case 0x03:
         case 0x03:
-             return __shiftDown ? Input::KEY_CAPITAL_F : Input::KEY_F;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_F : Keyboard::KEY_F;
         case 0x05:
         case 0x05:
-             return __shiftDown ? Input::KEY_CAPITAL_G : Input::KEY_G;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_G : Keyboard::KEY_G;
         case 0x04:
         case 0x04:
-             return __shiftDown ? Input::KEY_CAPITAL_H : Input::KEY_H;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_H : Keyboard::KEY_H;
         case 0x22:
         case 0x22:
-             return __shiftDown ? Input::KEY_CAPITAL_I : Input::KEY_I;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_I : Keyboard::KEY_I;
         case 0x26:
         case 0x26:
-             return __shiftDown ? Input::KEY_CAPITAL_J : Input::KEY_J;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_J : Keyboard::KEY_J;
         case 0x28:
         case 0x28:
-             return __shiftDown ? Input::KEY_CAPITAL_K : Input::KEY_K;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_K : Keyboard::KEY_K;
         case 0x25:
         case 0x25:
-             return __shiftDown ? Input::KEY_CAPITAL_L : Input::KEY_L;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_L : Keyboard::KEY_L;
         case 0x2E:
         case 0x2E:
-             return __shiftDown ? Input::KEY_CAPITAL_M : Input::KEY_M;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_M : Keyboard::KEY_M;
         case 0x2D:
         case 0x2D:
-             return __shiftDown ? Input::KEY_CAPITAL_N : Input::KEY_N;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_N : Keyboard::KEY_N;
         case 0x1F:
         case 0x1F:
-             return __shiftDown ? Input::KEY_CAPITAL_O : Input::KEY_O;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_O : Keyboard::KEY_O;
         case 0x23:
         case 0x23:
-             return __shiftDown ? Input::KEY_CAPITAL_P : Input::KEY_P;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_P : Keyboard::KEY_P;
         case 0x0C:
         case 0x0C:
-             return __shiftDown ? Input::KEY_CAPITAL_Q : Input::KEY_Q;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_Q : Keyboard::KEY_Q;
         case 0x0F:
         case 0x0F:
-             return __shiftDown ? Input::KEY_CAPITAL_R : Input::KEY_R;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_R : Keyboard::KEY_R;
         case 0x01:
         case 0x01:
-             return __shiftDown ? Input::KEY_CAPITAL_S : Input::KEY_S;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_S : Keyboard::KEY_S;
         case 0x11:
         case 0x11:
-             return __shiftDown ? Input::KEY_CAPITAL_T : Input::KEY_T;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_T : Keyboard::KEY_T;
         case 0x20:
         case 0x20:
-             return __shiftDown ? Input::KEY_CAPITAL_U : Input::KEY_U;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_U : Keyboard::KEY_U;
         case 0x09:
         case 0x09:
-             return __shiftDown ? Input::KEY_CAPITAL_V : Input::KEY_V;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_V : Keyboard::KEY_V;
         case 0x0D:
         case 0x0D:
-             return __shiftDown ? Input::KEY_CAPITAL_W : Input::KEY_W;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_W : Keyboard::KEY_W;
         case 0x07:
         case 0x07:
-             return __shiftDown ? Input::KEY_CAPITAL_X : Input::KEY_X;
+             return __shiftDown ? Keyboard::KEY_CAPITAL_X : Keyboard::KEY_X;
         case 0x10:
         case 0x10:
-            return __shiftDown ? Input::KEY_CAPITAL_Y : Input::KEY_Y;
+            return __shiftDown ? Keyboard::KEY_CAPITAL_Y : Keyboard::KEY_Y;
         case 0x06:
         case 0x06:
-            return __shiftDown ? Input::KEY_CAPITAL_Z : Input::KEY_Z;
+            return __shiftDown ? Keyboard::KEY_CAPITAL_Z : Keyboard::KEY_Z;
 
 
         default:
         default:
-            return Input::KEY_NONE;
+            return Keyboard::KEY_NONE;
     }
     }
 }
 }
 
 
@@ -448,47 +447,46 @@ int getKey(unsigned short keyCode, unsigned int modifierFlags)
 {
 {
     unsigned int keyCode = [event keyCode];
     unsigned int keyCode = [event keyCode];
     unsigned int flags = [event modifierFlags];
     unsigned int flags = [event modifierFlags];
-    
     switch (keyCode) 
     switch (keyCode) 
     {
     {
         case 0x39:
         case 0x39:
-            _game->keyPress(Input::KEY_CAPS_LOCK, (flags & NSAlphaShiftKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSAlphaShiftKeyMask) ? Keyboard::KEY_PRESS : Keyboard::KEY_RELEASE, Keyboard::KEY_CAPS_LOCK);
             break;
             break;
         case 0x38:
         case 0x38:
-            _game->keyPress(Input::KEY_LEFT_SHIFT, (flags & NSShiftKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSShiftKeyMask) ? Keyboard::KEY_PRESS : Keyboard::KEY_RELEASE, Keyboard::KEY_LEFT_SHIFT);
             break;
             break;
         case 0x3C:
         case 0x3C:
-            _game->keyPress(Input::KEY_RIGHT_SHIFT, (flags & NSShiftKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSShiftKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_RIGHT_SHIFT);
             break;
             break;
         case 0x3A:
         case 0x3A:
-            _game->keyPress(Input::KEY_LEFT_ALT, (flags & NSAlternateKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSAlternateKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_LEFT_ALT);
             break;
             break;
         case 0x3D:
         case 0x3D:
-            _game->keyPress(Input::KEY_RIGHT_ALT, (flags & NSAlternateKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSAlternateKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_RIGHT_ALT);
             break;
             break;
         case 0x3B:
         case 0x3B:
-            _game->keyPress(Input::KEY_LEFT_CTRL, (flags & NSControlKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSControlKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_LEFT_CTRL);
             break;
             break;
         case 0x3E:
         case 0x3E:
-            _game->keyPress(Input::KEY_RIGHT_CTRL, (flags & NSControlKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSControlKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_RIGHT_CTRL);
             break;
             break;
         case 0x37:
         case 0x37:
-            _game->keyPress(Input::KEY_LEFT_HYPER, (flags & NSCommandKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSCommandKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_LEFT_HYPER);
             break;
             break;
         case 0x36:
         case 0x36:
-            _game->keyPress(Input::KEY_RIGHT_HYPER, (flags & NSCommandKeyMask) ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP);
+            _game->keyEvent((flags & NSCommandKeyMask) ? Keyboard::KEYEVENT_DOWN : Keyboard::KEY_RELEASE, Keyboard::KEY_RIGHT_HYPER);
             break;
             break;
     }
     }
 }
 }
 
 
 - (void) keyDown: (NSEvent*) event
 - (void) keyDown: (NSEvent*) event
 {    
 {    
-    _game->keyPress(getKey([event keyCode], [event modifierFlags]), Input::KEYEVENT_DOWN);
+    _game->keyEvent(getKey([event keyCode], [event modifierFlags]), Keyboard::KEYEVENT_PRESS);
 }
 }
 
 
 - (void) keyUp: (NSEvent*) event
 - (void) keyUp: (NSEvent*) event
 {    
 {    
-    _game->keyPress(getKey([event keyCode], [event modifierFlags]), Input::KEYEVENT_UP);
+    _game->keyEvent(getKey([event keyCode], [event modifierFlags]), Keyboard::KEY_RELEASE);
 }
 }
 
 
 @end
 @end
@@ -584,12 +582,7 @@ int Platform::getOrientationAngle()
     return 0;
     return 0;
 }
 }
 
 
-bool Platform::isAccelerometerSupported()
-{
-    return true;
-}
-
-void Platform::getAccelerometerPitchAndRoll(float* pitch, float* roll)
+void Platform::getAccelerometerValues(float* pitch, float* roll)
 {
 {
     *pitch = __pitch;
     *pitch = __pitch;
     *roll = __roll;
     *roll = __roll;
@@ -600,7 +593,7 @@ void Platform::swapBuffers()
     if (__view)
     if (__view)
         CGLFlushDrawable((CGLContextObj)[[__view openGLContext] CGLContextObj]);
         CGLFlushDrawable((CGLContextObj)[[__view openGLContext] CGLContextObj]);
 }
 }
-    
+
 }
 }
 
 
 #endif
 #endif

+ 214 - 172
gameplay/src/PlatformQNX.cpp

@@ -4,9 +4,9 @@
 #include "Platform.h"
 #include "Platform.h"
 #include "FileSystem.h"
 #include "FileSystem.h"
 #include "Game.h"
 #include "Game.h"
-#include "Input.h"
 #include <sys/keycodes.h>
 #include <sys/keycodes.h>
 #include <screen/screen.h>
 #include <screen/screen.h>
+#include <input/screen_helpers.h>
 #include <bps/bps.h>
 #include <bps/bps.h>
 #include <bps/event.h>
 #include <bps/event.h>
 #include <bps/screen.h>
 #include <bps/screen.h>
@@ -14,6 +14,8 @@
 #include <bps/accelerometer.h>
 #include <bps/accelerometer.h>
 #include <bps/orientation.h>
 #include <bps/orientation.h>
 
 
+#define TOUCH_COUNT_MAX     4
+
 using namespace std;
 using namespace std;
 
 
 struct timespec __timespec;
 struct timespec __timespec;
@@ -29,6 +31,7 @@ static EGLContext __eglContext = EGL_NO_CONTEXT;
 static EGLSurface __eglSurface = EGL_NO_SURFACE;
 static EGLSurface __eglSurface = EGL_NO_SURFACE;
 static EGLConfig __eglConfig = 0;
 static EGLConfig __eglConfig = 0;
 static int __orientationAngle;
 static int __orientationAngle;
+static bool __multiTouch = false;
 
 
 static const char* __glExtensions;
 static const char* __glExtensions;
 PFNGLBINDVERTEXARRAYOESPROC glBindVertexArray = NULL;
 PFNGLBINDVERTEXARRAYOESPROC glBindVertexArray = NULL;
@@ -39,321 +42,321 @@ PFNGLISVERTEXARRAYOESPROC glIsVertexArray = NULL;
 namespace gameplay
 namespace gameplay
 {
 {
 
 
-// Gets the Input::Key enumeration constant that corresponds to the given QNX key code.
-static Input::Key getGameplayInputKey(int qnxKeycode)
+// Gets the Keyboard::Key enumeration constant that corresponds to the given QNX key code.
+static Keyboard::Key getKey(int qnxKeycode)
 {
 {
     switch (qnxKeycode)
     switch (qnxKeycode)
     {
     {
     case KEYCODE_SYSREQ:
     case KEYCODE_SYSREQ:
-        return Input::KEY_SYSREQ;
+        return Keyboard::KEY_SYSREQ;
     case KEYCODE_BREAK:
     case KEYCODE_BREAK:
-        return Input::KEY_BREAK;
+        return Keyboard::KEY_BREAK;
     case KEYCODE_MENU:
     case KEYCODE_MENU:
-        return Input::KEY_MENU;
+        return Keyboard::KEY_MENU;
     case KEYCODE_KP_ENTER:
     case KEYCODE_KP_ENTER:
-        return Input::KEY_KP_ENTER;
+        return Keyboard::KEY_KP_ENTER;
     case KEYCODE_PAUSE:
     case KEYCODE_PAUSE:
-        return Input::KEY_PAUSE;
+        return Keyboard::KEY_PAUSE;
     case KEYCODE_SCROLL_LOCK:
     case KEYCODE_SCROLL_LOCK:
-        return Input::KEY_SCROLL_LOCK;
+        return Keyboard::KEY_SCROLL_LOCK;
     case KEYCODE_PRINT:
     case KEYCODE_PRINT:
-        return Input::KEY_PRINT;
+        return Keyboard::KEY_PRINT;
     case KEYCODE_ESCAPE:
     case KEYCODE_ESCAPE:
-        return Input::KEY_ESCAPE;
+        return Keyboard::KEY_ESCAPE;
     case KEYCODE_BACKSPACE:
     case KEYCODE_BACKSPACE:
-        return Input::KEY_BACKSPACE;
+        return Keyboard::KEY_BACKSPACE;
     case KEYCODE_BACK_TAB:
     case KEYCODE_BACK_TAB:
-        return Input::KEY_BACK_TAB;
+        return Keyboard::KEY_BACK_TAB;
     case KEYCODE_TAB:
     case KEYCODE_TAB:
-        return Input::KEY_TAB;
+        return Keyboard::KEY_TAB;
     case KEYCODE_RETURN:
     case KEYCODE_RETURN:
-        return Input::KEY_RETURN;
+        return Keyboard::KEY_RETURN;
     case KEYCODE_CAPS_LOCK:
     case KEYCODE_CAPS_LOCK:
-        return Input::KEY_CAPS_LOCK;
+        return Keyboard::KEY_CAPS_LOCK;
     case KEYCODE_LEFT_SHIFT:
     case KEYCODE_LEFT_SHIFT:
-        return Input::KEY_LEFT_SHIFT;
+        return Keyboard::KEY_LEFT_SHIFT;
     case KEYCODE_RIGHT_SHIFT:
     case KEYCODE_RIGHT_SHIFT:
-        return Input::KEY_RIGHT_SHIFT;
+        return Keyboard::KEY_RIGHT_SHIFT;
     case KEYCODE_LEFT_CTRL:
     case KEYCODE_LEFT_CTRL:
-        return Input::KEY_LEFT_CTRL;
+        return Keyboard::KEY_LEFT_CTRL;
     case KEYCODE_RIGHT_CTRL:
     case KEYCODE_RIGHT_CTRL:
-        return Input::KEY_RIGHT_CTRL;
+        return Keyboard::KEY_RIGHT_CTRL;
     case KEYCODE_LEFT_ALT:
     case KEYCODE_LEFT_ALT:
-        return Input::KEY_LEFT_ALT;
+        return Keyboard::KEY_LEFT_ALT;
     case KEYCODE_RIGHT_ALT:
     case KEYCODE_RIGHT_ALT:
-        return Input::KEY_RIGHT_ALT;
+        return Keyboard::KEY_RIGHT_ALT;
     case KEYCODE_LEFT_HYPER:
     case KEYCODE_LEFT_HYPER:
-        return Input::KEY_LEFT_HYPER;
+        return Keyboard::KEY_LEFT_HYPER;
     case KEYCODE_RIGHT_HYPER:
     case KEYCODE_RIGHT_HYPER:
-        return Input::KEY_RIGHT_HYPER;
+        return Keyboard::KEY_RIGHT_HYPER;
     case KEYCODE_INSERT:
     case KEYCODE_INSERT:
-        return Input::KEY_INSERT;
+        return Keyboard::KEY_INSERT;
     case KEYCODE_HOME:
     case KEYCODE_HOME:
-        return Input::KEY_HOME;
+        return Keyboard::KEY_HOME;
     case KEYCODE_PG_UP:
     case KEYCODE_PG_UP:
-        return Input::KEY_PG_UP;
+        return Keyboard::KEY_PG_UP;
     case KEYCODE_DELETE:
     case KEYCODE_DELETE:
-        return Input::KEY_DELETE;
+        return Keyboard::KEY_DELETE;
     case KEYCODE_END:
     case KEYCODE_END:
-        return Input::KEY_END;
+        return Keyboard::KEY_END;
     case KEYCODE_PG_DOWN:
     case KEYCODE_PG_DOWN:
-        return Input::KEY_PG_DOWN;
+        return Keyboard::KEY_PG_DOWN;
     case KEYCODE_LEFT:
     case KEYCODE_LEFT:
-        return Input::KEY_LEFT_ARROW;
+        return Keyboard::KEY_LEFT_ARROW;
     case KEYCODE_RIGHT:
     case KEYCODE_RIGHT:
-        return Input::KEY_RIGHT_ARROW;
+        return Keyboard::KEY_RIGHT_ARROW;
     case KEYCODE_UP:
     case KEYCODE_UP:
-        return Input::KEY_UP_ARROW;
+        return Keyboard::KEY_UP_ARROW;
     case KEYCODE_DOWN:
     case KEYCODE_DOWN:
-        return Input::KEY_DOWN_ARROW;
+        return Keyboard::KEY_DOWN_ARROW;
     case KEYCODE_NUM_LOCK:
     case KEYCODE_NUM_LOCK:
-        return Input::KEY_NUM_LOCK;
+        return Keyboard::KEY_NUM_LOCK;
     case KEYCODE_KP_PLUS:
     case KEYCODE_KP_PLUS:
-        return Input::KEY_KP_PLUS;
+        return Keyboard::KEY_KP_PLUS;
     case KEYCODE_KP_MINUS:
     case KEYCODE_KP_MINUS:
-        return Input::KEY_KP_MINUS;
+        return Keyboard::KEY_KP_MINUS;
     case KEYCODE_KP_MULTIPLY:
     case KEYCODE_KP_MULTIPLY:
-        return Input::KEY_KP_MULTIPLY;
+        return Keyboard::KEY_KP_MULTIPLY;
     case KEYCODE_KP_DIVIDE:
     case KEYCODE_KP_DIVIDE:
-        return Input::KEY_KP_DIVIDE;
+        return Keyboard::KEY_KP_DIVIDE;
     case KEYCODE_KP_HOME:
     case KEYCODE_KP_HOME:
-        return Input::KEY_KP_HOME;
+        return Keyboard::KEY_KP_HOME;
     case KEYCODE_KP_UP:
     case KEYCODE_KP_UP:
-        return Input::KEY_KP_UP;
+        return Keyboard::KEY_KP_UP;
     case KEYCODE_KP_PG_UP:
     case KEYCODE_KP_PG_UP:
-        return Input::KEY_KP_PG_UP;
+        return Keyboard::KEY_KP_PG_UP;
     case KEYCODE_KP_LEFT:
     case KEYCODE_KP_LEFT:
-        return Input::KEY_KP_LEFT;
+        return Keyboard::KEY_KP_LEFT;
     case KEYCODE_KP_FIVE:
     case KEYCODE_KP_FIVE:
-        return Input::KEY_KP_FIVE;
+        return Keyboard::KEY_KP_FIVE;
     case KEYCODE_KP_RIGHT:
     case KEYCODE_KP_RIGHT:
-        return Input::KEY_KP_RIGHT;
+        return Keyboard::KEY_KP_RIGHT;
     case KEYCODE_KP_END:
     case KEYCODE_KP_END:
-        return Input::KEY_KP_END;
+        return Keyboard::KEY_KP_END;
     case KEYCODE_KP_DOWN:
     case KEYCODE_KP_DOWN:
-        return Input::KEY_KP_DOWN;
+        return Keyboard::KEY_KP_DOWN;
     case KEYCODE_KP_PG_DOWN:
     case KEYCODE_KP_PG_DOWN:
-        return Input::KEY_KP_PG_DOWN;
+        return Keyboard::KEY_KP_PG_DOWN;
     case KEYCODE_KP_INSERT:
     case KEYCODE_KP_INSERT:
-        return Input::KEY_KP_INSERT;
+        return Keyboard::KEY_KP_INSERT;
     case KEYCODE_KP_DELETE:
     case KEYCODE_KP_DELETE:
-        return Input::KEY_KP_DELETE;
+        return Keyboard::KEY_KP_DELETE;
     case KEYCODE_F1:
     case KEYCODE_F1:
-        return Input::KEY_F1;
+        return Keyboard::KEY_F1;
     case KEYCODE_F2:
     case KEYCODE_F2:
-        return Input::KEY_F2;
+        return Keyboard::KEY_F2;
     case KEYCODE_F3:
     case KEYCODE_F3:
-        return Input::KEY_F3;
+        return Keyboard::KEY_F3;
     case KEYCODE_F4:
     case KEYCODE_F4:
-        return Input::KEY_F4;
+        return Keyboard::KEY_F4;
     case KEYCODE_F5:
     case KEYCODE_F5:
-        return Input::KEY_F5;
+        return Keyboard::KEY_F5;
     case KEYCODE_F6:
     case KEYCODE_F6:
-        return Input::KEY_F6;
+        return Keyboard::KEY_F6;
     case KEYCODE_F7:
     case KEYCODE_F7:
-        return Input::KEY_F7;
+        return Keyboard::KEY_F7;
     case KEYCODE_F8:
     case KEYCODE_F8:
-        return Input::KEY_F8;
+        return Keyboard::KEY_F8;
     case KEYCODE_F9:
     case KEYCODE_F9:
-        return Input::KEY_F9;
+        return Keyboard::KEY_F9;
     case KEYCODE_F10:
     case KEYCODE_F10:
-        return Input::KEY_F10;
+        return Keyboard::KEY_F10;
     case KEYCODE_F11:
     case KEYCODE_F11:
-        return Input::KEY_F11;
+        return Keyboard::KEY_F11;
     case KEYCODE_F12:
     case KEYCODE_F12:
-        return Input::KEY_F12;
+        return Keyboard::KEY_F12;
     case KEYCODE_SPACE:
     case KEYCODE_SPACE:
-        return Input::KEY_SPACE;
+        return Keyboard::KEY_SPACE;
     case KEYCODE_RIGHT_PAREN:
     case KEYCODE_RIGHT_PAREN:
-        return Input::KEY_RIGHT_PARENTHESIS;
+        return Keyboard::KEY_RIGHT_PARENTHESIS;
     case KEYCODE_ZERO:
     case KEYCODE_ZERO:
-        return Input::KEY_ZERO;
+        return Keyboard::KEY_ZERO;
     case KEYCODE_EXCLAM:
     case KEYCODE_EXCLAM:
-        return Input::KEY_EXCLAM;
+        return Keyboard::KEY_EXCLAM;
     case KEYCODE_ONE:
     case KEYCODE_ONE:
-        return Input::KEY_ONE;
+        return Keyboard::KEY_ONE;
     case KEYCODE_AT:
     case KEYCODE_AT:
-        return Input::KEY_AT;
+        return Keyboard::KEY_AT;
     case KEYCODE_TWO:
     case KEYCODE_TWO:
-        return Input::KEY_TWO;
+        return Keyboard::KEY_TWO;
     case KEYCODE_NUMBER:
     case KEYCODE_NUMBER:
-        return Input::KEY_NUMBER;
+        return Keyboard::KEY_NUMBER;
     case KEYCODE_THREE:
     case KEYCODE_THREE:
-        return Input::KEY_THREE;
+        return Keyboard::KEY_THREE;
     case KEYCODE_DOLLAR:
     case KEYCODE_DOLLAR:
-        return Input::KEY_DOLLAR;
+        return Keyboard::KEY_DOLLAR;
     case KEYCODE_FOUR:
     case KEYCODE_FOUR:
-        return Input::KEY_FOUR;
+        return Keyboard::KEY_FOUR;
     case KEYCODE_PERCENT:
     case KEYCODE_PERCENT:
-        return Input::KEY_PERCENT;
+        return Keyboard::KEY_PERCENT;
     case KEYCODE_FIVE:
     case KEYCODE_FIVE:
-        return Input::KEY_FIVE;
+        return Keyboard::KEY_FIVE;
     case KEYCODE_CIRCUMFLEX:
     case KEYCODE_CIRCUMFLEX:
-        return Input::KEY_CIRCUMFLEX;
+        return Keyboard::KEY_CIRCUMFLEX;
     case KEYCODE_SIX:
     case KEYCODE_SIX:
-        return Input::KEY_SIX;
+        return Keyboard::KEY_SIX;
     case KEYCODE_AMPERSAND:
     case KEYCODE_AMPERSAND:
-        return Input::KEY_AMPERSAND;
+        return Keyboard::KEY_AMPERSAND;
     case KEYCODE_SEVEN:
     case KEYCODE_SEVEN:
-        return Input::KEY_SEVEN;
+        return Keyboard::KEY_SEVEN;
     case KEYCODE_ASTERISK:
     case KEYCODE_ASTERISK:
-        return Input::KEY_ASTERISK;
+        return Keyboard::KEY_ASTERISK;
     case KEYCODE_EIGHT:
     case KEYCODE_EIGHT:
-        return Input::KEY_EIGHT;
+        return Keyboard::KEY_EIGHT;
     case KEYCODE_LEFT_PAREN:
     case KEYCODE_LEFT_PAREN:
-        return Input::KEY_LEFT_PARENTHESIS;
+        return Keyboard::KEY_LEFT_PARENTHESIS;
     case KEYCODE_NINE:
     case KEYCODE_NINE:
-        return Input::KEY_NINE;
+        return Keyboard::KEY_NINE;
     case KEYCODE_EQUAL:
     case KEYCODE_EQUAL:
-        return Input::KEY_EQUAL;
+        return Keyboard::KEY_EQUAL;
     case KEYCODE_PLUS:
     case KEYCODE_PLUS:
-        return Input::KEY_PLUS;
+        return Keyboard::KEY_PLUS;
     case KEYCODE_LESS_THAN:
     case KEYCODE_LESS_THAN:
-        return Input::KEY_LESS_THAN;
+        return Keyboard::KEY_LESS_THAN;
     case KEYCODE_COMMA:
     case KEYCODE_COMMA:
-        return Input::KEY_COMMA;
+        return Keyboard::KEY_COMMA;
     case KEYCODE_UNDERSCORE:
     case KEYCODE_UNDERSCORE:
-        return Input::KEY_UNDERSCORE;
+        return Keyboard::KEY_UNDERSCORE;
     case KEYCODE_MINUS:
     case KEYCODE_MINUS:
-        return Input::KEY_MINUS;
+        return Keyboard::KEY_MINUS;
     case KEYCODE_GREATER_THAN:
     case KEYCODE_GREATER_THAN:
-        return Input::KEY_GREATER_THAN;
+        return Keyboard::KEY_GREATER_THAN;
     case KEYCODE_PERIOD:
     case KEYCODE_PERIOD:
-        return Input::KEY_PERIOD;
+        return Keyboard::KEY_PERIOD;
     case KEYCODE_COLON:
     case KEYCODE_COLON:
-        return Input::KEY_COLON;
+        return Keyboard::KEY_COLON;
     case KEYCODE_SEMICOLON:
     case KEYCODE_SEMICOLON:
-        return Input::KEY_SEMICOLON;
+        return Keyboard::KEY_SEMICOLON;
     case KEYCODE_QUESTION:
     case KEYCODE_QUESTION:
-        return Input::KEY_QUESTION;
+        return Keyboard::KEY_QUESTION;
     case KEYCODE_SLASH:
     case KEYCODE_SLASH:
-        return Input::KEY_SLASH;
+        return Keyboard::KEY_SLASH;
     case KEYCODE_GRAVE:
     case KEYCODE_GRAVE:
-        return Input::KEY_GRAVE;
+        return Keyboard::KEY_GRAVE;
     case KEYCODE_TILDE:
     case KEYCODE_TILDE:
-        return Input::KEY_TILDE;
+        return Keyboard::KEY_TILDE;
     case KEYCODE_LEFT_BRACE:
     case KEYCODE_LEFT_BRACE:
-        return Input::KEY_LEFT_BRACE;
+        return Keyboard::KEY_LEFT_BRACE;
     case KEYCODE_LEFT_BRACKET:
     case KEYCODE_LEFT_BRACKET:
-        return Input::KEY_LEFT_BRACKET;
+        return Keyboard::KEY_LEFT_BRACKET;
     case KEYCODE_BAR:
     case KEYCODE_BAR:
-        return Input::KEY_BAR;
+        return Keyboard::KEY_BAR;
     case KEYCODE_BACK_SLASH:
     case KEYCODE_BACK_SLASH:
-        return Input::KEY_BACK_SLASH;
+        return Keyboard::KEY_BACK_SLASH;
     case KEYCODE_RIGHT_BRACE:
     case KEYCODE_RIGHT_BRACE:
-        return Input::KEY_RIGHT_BRACE;
+        return Keyboard::KEY_RIGHT_BRACE;
     case KEYCODE_RIGHT_BRACKET:
     case KEYCODE_RIGHT_BRACKET:
-        return Input::KEY_RIGHT_BRACKET;
+        return Keyboard::KEY_RIGHT_BRACKET;
     case KEYCODE_QUOTE:
     case KEYCODE_QUOTE:
-        return Input::KEY_QUOTE;
+        return Keyboard::KEY_QUOTE;
     case KEYCODE_APOSTROPHE:
     case KEYCODE_APOSTROPHE:
-        return Input::KEY_APOSTROPHE;
+        return Keyboard::KEY_APOSTROPHE;
     case KEYCODE_CAPITAL_A:
     case KEYCODE_CAPITAL_A:
-        return Input::KEY_CAPITAL_A;
+        return Keyboard::KEY_CAPITAL_A;
     case KEYCODE_A:
     case KEYCODE_A:
-        return Input::KEY_A;
+        return Keyboard::KEY_A;
     case KEYCODE_CAPITAL_B:
     case KEYCODE_CAPITAL_B:
-        return Input::KEY_CAPITAL_B;
+        return Keyboard::KEY_CAPITAL_B;
     case KEYCODE_B:
     case KEYCODE_B:
-        return Input::KEY_B;
+        return Keyboard::KEY_B;
     case KEYCODE_CAPITAL_C:
     case KEYCODE_CAPITAL_C:
-        return Input::KEY_CAPITAL_C;
+        return Keyboard::KEY_CAPITAL_C;
     case KEYCODE_C:
     case KEYCODE_C:
-        return Input::KEY_C;
+        return Keyboard::KEY_C;
     case KEYCODE_CAPITAL_D:
     case KEYCODE_CAPITAL_D:
-        return Input::KEY_CAPITAL_D;
+        return Keyboard::KEY_CAPITAL_D;
     case KEYCODE_D:
     case KEYCODE_D:
-        return Input::KEY_D;
+        return Keyboard::KEY_D;
     case KEYCODE_CAPITAL_E:
     case KEYCODE_CAPITAL_E:
-        return Input::KEY_CAPITAL_E;
+        return Keyboard::KEY_CAPITAL_E;
     case KEYCODE_E:
     case KEYCODE_E:
-        return Input::KEY_E;
+        return Keyboard::KEY_E;
     case KEYCODE_CAPITAL_F:
     case KEYCODE_CAPITAL_F:
-        return Input::KEY_CAPITAL_F;
+        return Keyboard::KEY_CAPITAL_F;
     case KEYCODE_F:
     case KEYCODE_F:
-        return Input::KEY_F;
+        return Keyboard::KEY_F;
     case KEYCODE_CAPITAL_G:
     case KEYCODE_CAPITAL_G:
-        return Input::KEY_CAPITAL_G;
+        return Keyboard::KEY_CAPITAL_G;
     case KEYCODE_G:
     case KEYCODE_G:
-        return Input::KEY_G;
+        return Keyboard::KEY_G;
     case KEYCODE_CAPITAL_H:
     case KEYCODE_CAPITAL_H:
-        return Input::KEY_CAPITAL_H;
+        return Keyboard::KEY_CAPITAL_H;
     case KEYCODE_H:
     case KEYCODE_H:
-        return Input::KEY_H;
+        return Keyboard::KEY_H;
     case KEYCODE_CAPITAL_I:
     case KEYCODE_CAPITAL_I:
-        return Input::KEY_CAPITAL_I;
+        return Keyboard::KEY_CAPITAL_I;
     case KEYCODE_I:
     case KEYCODE_I:
-        return Input::KEY_I;
+        return Keyboard::KEY_I;
     case KEYCODE_CAPITAL_J:
     case KEYCODE_CAPITAL_J:
-        return Input::KEY_CAPITAL_J;
+        return Keyboard::KEY_CAPITAL_J;
     case KEYCODE_J:
     case KEYCODE_J:
-        return Input::KEY_J;
+        return Keyboard::KEY_J;
     case KEYCODE_CAPITAL_K:
     case KEYCODE_CAPITAL_K:
-        return Input::KEY_CAPITAL_K;
+        return Keyboard::KEY_CAPITAL_K;
     case KEYCODE_K:
     case KEYCODE_K:
-        return Input::KEY_K;
+        return Keyboard::KEY_K;
     case KEYCODE_CAPITAL_L:
     case KEYCODE_CAPITAL_L:
-        return Input::KEY_CAPITAL_L;
+        return Keyboard::KEY_CAPITAL_L;
     case KEYCODE_L:
     case KEYCODE_L:
-        return Input::KEY_L;
+        return Keyboard::KEY_L;
     case KEYCODE_CAPITAL_M:
     case KEYCODE_CAPITAL_M:
-        return Input::KEY_CAPITAL_M;
+        return Keyboard::KEY_CAPITAL_M;
     case KEYCODE_M:
     case KEYCODE_M:
-        return Input::KEY_M;
+        return Keyboard::KEY_M;
     case KEYCODE_CAPITAL_N:
     case KEYCODE_CAPITAL_N:
-        return Input::KEY_CAPITAL_N;
+        return Keyboard::KEY_CAPITAL_N;
     case KEYCODE_N:
     case KEYCODE_N:
-        return Input::KEY_N;
+        return Keyboard::KEY_N;
     case KEYCODE_CAPITAL_O:
     case KEYCODE_CAPITAL_O:
-        return Input::KEY_CAPITAL_O;
+        return Keyboard::KEY_CAPITAL_O;
     case KEYCODE_O:
     case KEYCODE_O:
-        return Input::KEY_O;
+        return Keyboard::KEY_O;
     case KEYCODE_CAPITAL_P:
     case KEYCODE_CAPITAL_P:
-        return Input::KEY_CAPITAL_P;
+        return Keyboard::KEY_CAPITAL_P;
     case KEYCODE_P:
     case KEYCODE_P:
-        return Input::KEY_P;
+        return Keyboard::KEY_P;
     case KEYCODE_CAPITAL_Q:
     case KEYCODE_CAPITAL_Q:
-        return Input::KEY_CAPITAL_Q;
+        return Keyboard::KEY_CAPITAL_Q;
     case KEYCODE_Q:
     case KEYCODE_Q:
-        return Input::KEY_Q;
+        return Keyboard::KEY_Q;
     case KEYCODE_CAPITAL_R:
     case KEYCODE_CAPITAL_R:
-        return Input::KEY_CAPITAL_R;
+        return Keyboard::KEY_CAPITAL_R;
     case KEYCODE_R:
     case KEYCODE_R:
-        return Input::KEY_R;
+        return Keyboard::KEY_R;
     case KEYCODE_CAPITAL_S:
     case KEYCODE_CAPITAL_S:
-        return Input::KEY_CAPITAL_S;
+        return Keyboard::KEY_CAPITAL_S;
     case KEYCODE_S:
     case KEYCODE_S:
-        return Input::KEY_S;
+        return Keyboard::KEY_S;
     case KEYCODE_CAPITAL_T:
     case KEYCODE_CAPITAL_T:
-        return Input::KEY_CAPITAL_T;
+        return Keyboard::KEY_CAPITAL_T;
     case KEYCODE_T:
     case KEYCODE_T:
-        return Input::KEY_T;
+        return Keyboard::KEY_T;
     case KEYCODE_CAPITAL_U:
     case KEYCODE_CAPITAL_U:
-        return Input::KEY_CAPITAL_U;
+        return Keyboard::KEY_CAPITAL_U;
     case KEYCODE_U:
     case KEYCODE_U:
-        return Input::KEY_U;
+        return Keyboard::KEY_U;
     case KEYCODE_CAPITAL_V:
     case KEYCODE_CAPITAL_V:
-        return Input::KEY_CAPITAL_V;
+        return Keyboard::KEY_CAPITAL_V;
     case KEYCODE_V:
     case KEYCODE_V:
-        return Input::KEY_V;
+        return Keyboard::KEY_V;
     case KEYCODE_CAPITAL_W:
     case KEYCODE_CAPITAL_W:
-        return Input::KEY_CAPITAL_W;
+        return Keyboard::KEY_CAPITAL_W;
     case KEYCODE_W:
     case KEYCODE_W:
-        return Input::KEY_W;
+        return Keyboard::KEY_W;
     case KEYCODE_CAPITAL_X:
     case KEYCODE_CAPITAL_X:
-        return Input::KEY_CAPITAL_X;
+        return Keyboard::KEY_CAPITAL_X;
     case KEYCODE_X:
     case KEYCODE_X:
-        return Input::KEY_X;
+        return Keyboard::KEY_X;
     case KEYCODE_CAPITAL_Y:
     case KEYCODE_CAPITAL_Y:
-        return Input::KEY_CAPITAL_Y;
+        return Keyboard::KEY_CAPITAL_Y;
     case KEYCODE_Y:
     case KEYCODE_Y:
-        return Input::KEY_Y;
+        return Keyboard::KEY_Y;
     case KEYCODE_CAPITAL_Z:
     case KEYCODE_CAPITAL_Z:
-        return Input::KEY_CAPITAL_Z;
+        return Keyboard::KEY_CAPITAL_Z;
     case KEYCODE_Z:
     case KEYCODE_Z:
-        return Input::KEY_Z;
+        return Keyboard::KEY_Z;
     default:
     default:
-        return Input::KEY_NONE;
+        return Keyboard::KEY_NONE;
     }
     }
 }
 }
 
 
@@ -671,6 +674,8 @@ int Platform::enterMessagePump()
     int visible = 1;
     int visible = 1;
     int position[2];
     int position[2];
     int domain;
     int domain;
+    mtouch_event_t touchEvent;
+    int touchId = 0;
 
 
     // Get the initial time.
     // Get the initial time.
     clock_gettime(CLOCK_REALTIME, &__timespec);
     clock_gettime(CLOCK_REALTIME, &__timespec);
@@ -686,7 +691,7 @@ int Platform::enterMessagePump()
         
         
         while (true)
         while (true)
         {
         {
-            rc = bps_get_event(&event, 1);  // 1 = Hack for now until bps is fixed. Soon.
+            rc = bps_get_event(&event, 1);
             assert(rc == BPS_SUCCESS);
             assert(rc == BPS_SUCCESS);
 
 
             if (event == NULL)
             if (event == NULL)
@@ -701,25 +706,57 @@ int Platform::enterMessagePump()
                 switch (eventType)
                 switch (eventType)
                 {
                 {
                     case SCREEN_EVENT_MTOUCH_TOUCH:
                     case SCREEN_EVENT_MTOUCH_TOUCH:
-                        screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
-                        Game::getInstance()->touch(position[0], position[1], Input::TOUCHEVENT_PRESS);
+                    {
+                        if (!__multiTouch)
+                        {
+                            screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
+                           Game::getInstance()->touchEvent(Touch::TOUCH_PRESS, position[0], position[1], 0);
+                        }
+                        else
+                        {
+                            screen_get_mtouch_event(__screenEvent, &touchEvent, 0);
+                            Game::getInstance()->touchEvent(Touch::TOUCH_PRESS, touchEvent.x, touchEvent.y, touchEvent.contact_id);
+                        }
+                        break;
+                    }
+
+                    case SCREEN_EVENT_MTOUCH_RELEASE:
+                    {
+                        if (!__multiTouch)
+                        {
+                            screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
+                           Game::getInstance()->touchEvent(Touch::TOUCH_RELEASE, position[0], position[1], 0);
+                        }
+                        else
+                        {
+                            screen_get_mtouch_event(__screenEvent, &touchEvent, 0);
+                            Game::getInstance()->touchEvent(Touch::TOUCH_RELEASE, touchEvent.x, touchEvent.y, touchEvent.contact_id);
+                        }
                         break;
                         break;
+                    }
+
                     case SCREEN_EVENT_MTOUCH_MOVE:
                     case SCREEN_EVENT_MTOUCH_MOVE:
-                        screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
-                        Game::getInstance()->touch(position[0], position[1], Input::TOUCHEVENT_MOVE);
+                    {
+                        if (!__multiTouch)
+                        {
+                            screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
+                           Game::getInstance()->touchEvent(Touch::TOUCH_MOVE, position[0], position[1], 0);
+                        }
+                        else
+                        {
+                            screen_get_mtouch_event(__screenEvent, &touchEvent, 0);
+                            Game::getInstance()->touchEvent(Touch::TOUCH_MOVE, touchEvent.x, touchEvent.y, touchEvent.contact_id);
+                        }
                         break;
                         break;
-                    case SCREEN_EVENT_MTOUCH_RELEASE:
-                        screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_POSITION, position);
-                        Game::getInstance()->touch(position[0], position[1], Input::TOUCHEVENT_RELEASE);
                         break;
                         break;
+                    }
 
 
                     case SCREEN_EVENT_KEYBOARD:
                     case SCREEN_EVENT_KEYBOARD:
                     {
                     {
-                        // Keyboard event.
                         screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_KEY_FLAGS, &flags);
                         screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_KEY_FLAGS, &flags);
                         screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_KEY_SYM, &value);
                         screen_get_event_property_iv(__screenEvent, SCREEN_PROPERTY_KEY_SYM, &value);
-                        int keyEvent = flags & KEY_DOWN ? Input::KEYEVENT_DOWN : Input::KEYEVENT_UP;
-                        Game::getInstance()->keyPress(getGameplayInputKey(value), keyEvent);
+                        gameplay::Keyboard::KeyEvent evt = (flags & KEY_DOWN) ? gameplay::Keyboard::KEY_PRESS :  gameplay::Keyboard::KEY_RELEASE;
+                        Game::getInstance()->keyEvent(evt, getKey(value));
                         break;
                         break;
                     }
                     }
                 }
                 }
@@ -808,12 +845,17 @@ int Platform::getOrientationAngle()
     return __orientationAngle;
     return __orientationAngle;
 }
 }
 
 
-bool Platform::isAccelerometerSupported()
+void Platform::setMultiTouch(bool enabled)
+{
+    __multiTouch = enabled;
+}
+
+bool Platform::isMultiTouch()
 {
 {
-    return accelerometer_is_supported();
+    return __multiTouch;
 }
 }
 
 
-void Platform::getAccelerometerPitchAndRoll(float* pitch, float* roll)
+void Platform::getAccelerometerValues(float* pitch, float* roll)
 {
 {
     double tx, ty, tz;
     double tx, ty, tz;
     accelerometer_read_forces(&tx, &ty, &tz);
     accelerometer_read_forces(&tx, &ty, &tz);

+ 121 - 117
gameplay/src/PlatformWin32.cpp

@@ -17,224 +17,224 @@ static HWND __hwnd = 0;
 static HDC __hdc = 0;
 static HDC __hdc = 0;
 static HGLRC __hrc = 0;
 static HGLRC __hrc = 0;
 
 
-// Gets the gameplay::Input::Key enumeration constant that corresponds
+// Gets the gameplay::Keyboard::Key enumeration constant that corresponds
 // to the given key and shift modifier combination.
 // to the given key and shift modifier combination.
-static gameplay::Input::Key getGameplayInputKey(WPARAM win32KeyCode, bool shiftDown)
+static gameplay::Keyboard::Key getKey(WPARAM win32KeyCode, bool shiftDown)
 {
 {
     // TODO: Handle the following keys
     // TODO: Handle the following keys
-    //gameplay::Input::KEY_SYSREQ
-    //gameplay::Input::KEY_BREAK
-    //gameplay::Input::KEY_MENU
-    //gameplay::Input::KEY_KP_ENTER
+    //gameplay::Keyboard::KEY_SYSREQ
+    //gameplay::Keyboard::KEY_BREAK
+    //gameplay::Keyboard::KEY_MENU
+    //gameplay::Keyboard::KEY_KP_ENTER
 
 
     switch (win32KeyCode)
     switch (win32KeyCode)
     {
     {
     case VK_PAUSE:
     case VK_PAUSE:
-        return gameplay::Input::KEY_PAUSE;
+        return gameplay::Keyboard::KEY_PAUSE;
     case VK_SCROLL:
     case VK_SCROLL:
-        return gameplay::Input::KEY_SCROLL_LOCK;
+        return gameplay::Keyboard::KEY_SCROLL_LOCK;
     case VK_PRINT:
     case VK_PRINT:
-        return gameplay::Input::KEY_PRINT;
+        return gameplay::Keyboard::KEY_PRINT;
     case VK_ESCAPE:
     case VK_ESCAPE:
-        return gameplay::Input::KEY_ESCAPE;
+        return gameplay::Keyboard::KEY_ESCAPE;
     case VK_BACK:
     case VK_BACK:
-        return gameplay::Input::KEY_BACKSPACE;
+        return gameplay::Keyboard::KEY_BACKSPACE;
     case VK_TAB:
     case VK_TAB:
-        return shiftDown ? gameplay::Input::KEY_BACK_TAB : gameplay::Input::KEY_TAB;
+        return shiftDown ? gameplay::Keyboard::KEY_BACK_TAB : gameplay::Keyboard::KEY_TAB;
     case VK_RETURN:
     case VK_RETURN:
-        return gameplay::Input::KEY_RETURN;
+        return gameplay::Keyboard::KEY_RETURN;
     case VK_CAPITAL:
     case VK_CAPITAL:
-        return gameplay::Input::KEY_CAPS_LOCK;
+        return gameplay::Keyboard::KEY_CAPS_LOCK;
     case VK_LSHIFT:
     case VK_LSHIFT:
-        return gameplay::Input::KEY_LEFT_SHIFT;
+        return gameplay::Keyboard::KEY_LEFT_SHIFT;
     case VK_RSHIFT:
     case VK_RSHIFT:
-        return gameplay::Input::KEY_RIGHT_SHIFT;
+        return gameplay::Keyboard::KEY_RIGHT_SHIFT;
     case VK_LCONTROL:
     case VK_LCONTROL:
-        return gameplay::Input::KEY_LEFT_CTRL;
+        return gameplay::Keyboard::KEY_LEFT_CTRL;
     case VK_RCONTROL:
     case VK_RCONTROL:
-        return gameplay::Input::KEY_RIGHT_CTRL;
+        return gameplay::Keyboard::KEY_RIGHT_CTRL;
     case VK_LMENU:
     case VK_LMENU:
-        return gameplay::Input::KEY_LEFT_ALT;
+        return gameplay::Keyboard::KEY_LEFT_ALT;
     case VK_RMENU:
     case VK_RMENU:
-        return gameplay::Input::KEY_RIGHT_ALT;
+        return gameplay::Keyboard::KEY_RIGHT_ALT;
     case VK_LWIN:
     case VK_LWIN:
-        return gameplay::Input::KEY_LEFT_HYPER;
+        return gameplay::Keyboard::KEY_LEFT_HYPER;
     case VK_RWIN:
     case VK_RWIN:
-        return gameplay::Input::KEY_RIGHT_HYPER;
+        return gameplay::Keyboard::KEY_RIGHT_HYPER;
     case VK_INSERT:
     case VK_INSERT:
-        return gameplay::Input::KEY_INSERT;
+        return gameplay::Keyboard::KEY_INSERT;
     case VK_HOME:
     case VK_HOME:
-        return gameplay::Input::KEY_HOME;
+        return gameplay::Keyboard::KEY_HOME;
     case VK_PRIOR:
     case VK_PRIOR:
-        return gameplay::Input::KEY_PG_UP;
+        return gameplay::Keyboard::KEY_PG_UP;
     case VK_DELETE:
     case VK_DELETE:
-        return gameplay::Input::KEY_DELETE;
+        return gameplay::Keyboard::KEY_DELETE;
     case VK_END:
     case VK_END:
-        return gameplay::Input::KEY_END;
+        return gameplay::Keyboard::KEY_END;
     case VK_NEXT:
     case VK_NEXT:
-        return gameplay::Input::KEY_PG_DOWN;
+        return gameplay::Keyboard::KEY_PG_DOWN;
     case VK_LEFT:
     case VK_LEFT:
-        return gameplay::Input::KEY_LEFT_ARROW;
+        return gameplay::Keyboard::KEY_LEFT_ARROW;
     case VK_RIGHT:
     case VK_RIGHT:
-        return gameplay::Input::KEY_RIGHT_ARROW;
+        return gameplay::Keyboard::KEY_RIGHT_ARROW;
     case VK_UP:
     case VK_UP:
-        return gameplay::Input::KEY_UP_ARROW;
+        return gameplay::Keyboard::KEY_UP_ARROW;
     case VK_DOWN:
     case VK_DOWN:
-        return gameplay::Input::KEY_DOWN_ARROW;
+        return gameplay::Keyboard::KEY_DOWN_ARROW;
     case VK_NUMLOCK:
     case VK_NUMLOCK:
-        return gameplay::Input::KEY_NUM_LOCK;
+        return gameplay::Keyboard::KEY_NUM_LOCK;
     case VK_ADD:
     case VK_ADD:
-        return gameplay::Input::KEY_KP_PLUS;
+        return gameplay::Keyboard::KEY_KP_PLUS;
     case VK_SUBTRACT:
     case VK_SUBTRACT:
-        return gameplay::Input::KEY_KP_MINUS;
+        return gameplay::Keyboard::KEY_KP_MINUS;
     case VK_MULTIPLY:
     case VK_MULTIPLY:
-        return gameplay::Input::KEY_KP_MULTIPLY;
+        return gameplay::Keyboard::KEY_KP_MULTIPLY;
     case VK_DIVIDE:
     case VK_DIVIDE:
-        return gameplay::Input::KEY_KP_DIVIDE;
+        return gameplay::Keyboard::KEY_KP_DIVIDE;
     case VK_NUMPAD7:
     case VK_NUMPAD7:
-        return gameplay::Input::KEY_KP_HOME;
+        return gameplay::Keyboard::KEY_KP_HOME;
     case VK_NUMPAD8:
     case VK_NUMPAD8:
-        return gameplay::Input::KEY_KP_UP;
+        return gameplay::Keyboard::KEY_KP_UP;
     case VK_NUMPAD9:
     case VK_NUMPAD9:
-        return gameplay::Input::KEY_KP_PG_UP;
+        return gameplay::Keyboard::KEY_KP_PG_UP;
     case VK_NUMPAD4:
     case VK_NUMPAD4:
-        return gameplay::Input::KEY_KP_LEFT;
+        return gameplay::Keyboard::KEY_KP_LEFT;
     case VK_NUMPAD5:
     case VK_NUMPAD5:
-        return gameplay::Input::KEY_KP_FIVE;
+        return gameplay::Keyboard::KEY_KP_FIVE;
     case VK_NUMPAD6:
     case VK_NUMPAD6:
-        return gameplay::Input::KEY_KP_RIGHT;
+        return gameplay::Keyboard::KEY_KP_RIGHT;
     case VK_NUMPAD1:
     case VK_NUMPAD1:
-        return gameplay::Input::KEY_KP_END;
+        return gameplay::Keyboard::KEY_KP_END;
     case VK_NUMPAD2:
     case VK_NUMPAD2:
-        return gameplay::Input::KEY_KP_DOWN;
+        return gameplay::Keyboard::KEY_KP_DOWN;
     case VK_NUMPAD3:
     case VK_NUMPAD3:
-        return gameplay::Input::KEY_KP_PG_DOWN;
+        return gameplay::Keyboard::KEY_KP_PG_DOWN;
     case VK_NUMPAD0:
     case VK_NUMPAD0:
-        return gameplay::Input::KEY_KP_INSERT;
+        return gameplay::Keyboard::KEY_KP_INSERT;
     case VK_DECIMAL:
     case VK_DECIMAL:
-        return gameplay::Input::KEY_KP_DELETE;
+        return gameplay::Keyboard::KEY_KP_DELETE;
     case VK_F1:
     case VK_F1:
-        return gameplay::Input::KEY_F1;
+        return gameplay::Keyboard::KEY_F1;
     case VK_F2:
     case VK_F2:
-        return gameplay::Input::KEY_F2;
+        return gameplay::Keyboard::KEY_F2;
     case VK_F3:
     case VK_F3:
-        return gameplay::Input::KEY_F3;
+        return gameplay::Keyboard::KEY_F3;
     case VK_F4:
     case VK_F4:
-        return gameplay::Input::KEY_F4;
+        return gameplay::Keyboard::KEY_F4;
     case VK_F5:
     case VK_F5:
-        return gameplay::Input::KEY_F5;
+        return gameplay::Keyboard::KEY_F5;
     case VK_F6:
     case VK_F6:
-        return gameplay::Input::KEY_F6;
+        return gameplay::Keyboard::KEY_F6;
     case VK_F7:
     case VK_F7:
-        return gameplay::Input::KEY_F7;
+        return gameplay::Keyboard::KEY_F7;
     case VK_F8:
     case VK_F8:
-        return gameplay::Input::KEY_F8;
+        return gameplay::Keyboard::KEY_F8;
     case VK_F9:
     case VK_F9:
-        return gameplay::Input::KEY_F9;
+        return gameplay::Keyboard::KEY_F9;
     case VK_F10:
     case VK_F10:
-        return gameplay::Input::KEY_F10;
+        return gameplay::Keyboard::KEY_F10;
     case VK_F11:
     case VK_F11:
-        return gameplay::Input::KEY_F11;
+        return gameplay::Keyboard::KEY_F11;
     case VK_F12:
     case VK_F12:
-        return gameplay::Input::KEY_F12;
+        return gameplay::Keyboard::KEY_F12;
     case VK_SPACE:
     case VK_SPACE:
-        return gameplay::Input::KEY_SPACE;
+        return gameplay::Keyboard::KEY_SPACE;
     case 0x30:
     case 0x30:
-        return shiftDown ? gameplay::Input::KEY_RIGHT_PARENTHESIS : gameplay::Input::KEY_ZERO;
+        return shiftDown ? gameplay::Keyboard::KEY_RIGHT_PARENTHESIS : gameplay::Keyboard::KEY_ZERO;
     case 0x31:
     case 0x31:
-        return shiftDown ? gameplay::Input::KEY_EXCLAM : gameplay::Input::KEY_ONE;
+        return shiftDown ? gameplay::Keyboard::KEY_EXCLAM : gameplay::Keyboard::KEY_ONE;
     case 0x32:
     case 0x32:
-        return shiftDown ? gameplay::Input::KEY_AT : gameplay::Input::KEY_TWO;
+        return shiftDown ? gameplay::Keyboard::KEY_AT : gameplay::Keyboard::KEY_TWO;
     case 0x33:
     case 0x33:
-        return shiftDown ? gameplay::Input::KEY_NUMBER : gameplay::Input::KEY_THREE;
+        return shiftDown ? gameplay::Keyboard::KEY_NUMBER : gameplay::Keyboard::KEY_THREE;
     case 0x34:
     case 0x34:
-        return shiftDown ? gameplay::Input::KEY_DOLLAR : gameplay::Input::KEY_FOUR;
+        return shiftDown ? gameplay::Keyboard::KEY_DOLLAR : gameplay::Keyboard::KEY_FOUR;
     case 0x35:
     case 0x35:
-        return shiftDown ? gameplay::Input::KEY_PERCENT : gameplay::Input::KEY_FIVE;
+        return shiftDown ? gameplay::Keyboard::KEY_PERCENT : gameplay::Keyboard::KEY_FIVE;
     case 0x36:
     case 0x36:
-        return shiftDown ? gameplay::Input::KEY_CIRCUMFLEX : gameplay::Input::KEY_SIX;
+        return shiftDown ? gameplay::Keyboard::KEY_CIRCUMFLEX : gameplay::Keyboard::KEY_SIX;
     case 0x37:
     case 0x37:
-        return shiftDown ? gameplay::Input::KEY_AMPERSAND : gameplay::Input::KEY_SEVEN;
+        return shiftDown ? gameplay::Keyboard::KEY_AMPERSAND : gameplay::Keyboard::KEY_SEVEN;
     case 0x38:
     case 0x38:
-        return shiftDown ? gameplay::Input::KEY_ASTERISK : gameplay::Input::KEY_EIGHT;
+        return shiftDown ? gameplay::Keyboard::KEY_ASTERISK : gameplay::Keyboard::KEY_EIGHT;
     case 0x39:
     case 0x39:
-        return shiftDown ? gameplay::Input::KEY_LEFT_PARENTHESIS : gameplay::Input::KEY_NINE;
+        return shiftDown ? gameplay::Keyboard::KEY_LEFT_PARENTHESIS : gameplay::Keyboard::KEY_NINE;
     case VK_OEM_PLUS:
     case VK_OEM_PLUS:
-        return shiftDown ? gameplay::Input::KEY_EQUAL : gameplay::Input::KEY_PLUS;
+        return shiftDown ? gameplay::Keyboard::KEY_EQUAL : gameplay::Keyboard::KEY_PLUS;
     case VK_OEM_COMMA:
     case VK_OEM_COMMA:
-        return shiftDown ? gameplay::Input::KEY_LESS_THAN : gameplay::Input::KEY_COMMA;
+        return shiftDown ? gameplay::Keyboard::KEY_LESS_THAN : gameplay::Keyboard::KEY_COMMA;
     case VK_OEM_MINUS:
     case VK_OEM_MINUS:
-        return shiftDown ? gameplay::Input::KEY_UNDERSCORE : gameplay::Input::KEY_MINUS;
+        return shiftDown ? gameplay::Keyboard::KEY_UNDERSCORE : gameplay::Keyboard::KEY_MINUS;
     case VK_OEM_PERIOD:
     case VK_OEM_PERIOD:
-        return shiftDown ? gameplay::Input::KEY_GREATER_THAN : gameplay::Input::KEY_PERIOD;
+        return shiftDown ? gameplay::Keyboard::KEY_GREATER_THAN : gameplay::Keyboard::KEY_PERIOD;
     case VK_OEM_1:
     case VK_OEM_1:
-        return shiftDown ? gameplay::Input::KEY_COLON : gameplay::Input::KEY_SEMICOLON;
+        return shiftDown ? gameplay::Keyboard::KEY_COLON : gameplay::Keyboard::KEY_SEMICOLON;
     case VK_OEM_2:
     case VK_OEM_2:
-        return shiftDown ? gameplay::Input::KEY_QUESTION : gameplay::Input::KEY_SLASH;
+        return shiftDown ? gameplay::Keyboard::KEY_QUESTION : gameplay::Keyboard::KEY_SLASH;
     case VK_OEM_3:
     case VK_OEM_3:
-        return shiftDown ? gameplay::Input::KEY_GRAVE : gameplay::Input::KEY_TILDE;
+        return shiftDown ? gameplay::Keyboard::KEY_GRAVE : gameplay::Keyboard::KEY_TILDE;
     case VK_OEM_4:
     case VK_OEM_4:
-        return shiftDown ? gameplay::Input::KEY_LEFT_BRACE : gameplay::Input::KEY_LEFT_BRACKET;
+        return shiftDown ? gameplay::Keyboard::KEY_LEFT_BRACE : gameplay::Keyboard::KEY_LEFT_BRACKET;
     case VK_OEM_5:
     case VK_OEM_5:
-        return shiftDown ? gameplay::Input::KEY_BAR : gameplay::Input::KEY_BACK_SLASH;
+        return shiftDown ? gameplay::Keyboard::KEY_BAR : gameplay::Keyboard::KEY_BACK_SLASH;
     case VK_OEM_6:
     case VK_OEM_6:
-        return shiftDown ? gameplay::Input::KEY_RIGHT_BRACE : gameplay::Input::KEY_RIGHT_BRACKET;
+        return shiftDown ? gameplay::Keyboard::KEY_RIGHT_BRACE : gameplay::Keyboard::KEY_RIGHT_BRACKET;
     case VK_OEM_7:
     case VK_OEM_7:
-        return shiftDown ? gameplay::Input::KEY_QUOTE : gameplay::Input::KEY_APOSTROPHE;
+        return shiftDown ? gameplay::Keyboard::KEY_QUOTE : gameplay::Keyboard::KEY_APOSTROPHE;
     case 0x41:
     case 0x41:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_A : gameplay::Input::KEY_A;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_A : gameplay::Keyboard::KEY_A;
     case 0x42:
     case 0x42:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_B : gameplay::Input::KEY_B;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_B : gameplay::Keyboard::KEY_B;
     case 0x43:
     case 0x43:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_C : gameplay::Input::KEY_C;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_C : gameplay::Keyboard::KEY_C;
     case 0x44:
     case 0x44:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_D : gameplay::Input::KEY_D;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_D : gameplay::Keyboard::KEY_D;
     case 0x45:
     case 0x45:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_E : gameplay::Input::KEY_E;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_E : gameplay::Keyboard::KEY_E;
     case 0x46:
     case 0x46:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_F : gameplay::Input::KEY_F;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_F : gameplay::Keyboard::KEY_F;
     case 0x47:
     case 0x47:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_G : gameplay::Input::KEY_G;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_G : gameplay::Keyboard::KEY_G;
     case 0x48:
     case 0x48:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_H : gameplay::Input::KEY_H;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_H : gameplay::Keyboard::KEY_H;
     case 0x49:
     case 0x49:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_I : gameplay::Input::KEY_I;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_I : gameplay::Keyboard::KEY_I;
     case 0x4A:
     case 0x4A:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_J : gameplay::Input::KEY_J;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_J : gameplay::Keyboard::KEY_J;
     case 0x4B:
     case 0x4B:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_K : gameplay::Input::KEY_K;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_K : gameplay::Keyboard::KEY_K;
     case 0x4C:
     case 0x4C:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_L : gameplay::Input::KEY_L;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_L : gameplay::Keyboard::KEY_L;
     case 0x4D:
     case 0x4D:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_M : gameplay::Input::KEY_M;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_M : gameplay::Keyboard::KEY_M;
     case 0x4E:
     case 0x4E:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_N : gameplay::Input::KEY_N;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_N : gameplay::Keyboard::KEY_N;
     case 0x4F:
     case 0x4F:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_O : gameplay::Input::KEY_O;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_O : gameplay::Keyboard::KEY_O;
     case 0x50:
     case 0x50:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_P : gameplay::Input::KEY_P;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_P : gameplay::Keyboard::KEY_P;
     case 0x51:
     case 0x51:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_Q : gameplay::Input::KEY_Q;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_Q : gameplay::Keyboard::KEY_Q;
     case 0x52:
     case 0x52:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_R : gameplay::Input::KEY_R;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_R : gameplay::Keyboard::KEY_R;
     case 0x53:
     case 0x53:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_S : gameplay::Input::KEY_S;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_S : gameplay::Keyboard::KEY_S;
     case 0x54:
     case 0x54:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_T : gameplay::Input::KEY_T;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_T : gameplay::Keyboard::KEY_T;
     case 0x55:
     case 0x55:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_U : gameplay::Input::KEY_U;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_U : gameplay::Keyboard::KEY_U;
     case 0x56:
     case 0x56:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_V : gameplay::Input::KEY_V;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_V : gameplay::Keyboard::KEY_V;
     case 0x57:
     case 0x57:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_W : gameplay::Input::KEY_W;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_W : gameplay::Keyboard::KEY_W;
     case 0x58:
     case 0x58:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_X : gameplay::Input::KEY_X;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_X : gameplay::Keyboard::KEY_X;
     case 0x59:
     case 0x59:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_Y : gameplay::Input::KEY_Y;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_Y : gameplay::Keyboard::KEY_Y;
     case 0x5A:
     case 0x5A:
-        return shiftDown ? gameplay::Input::KEY_CAPITAL_Z : gameplay::Input::KEY_Z;
+        return shiftDown ? gameplay::Keyboard::KEY_CAPITAL_Z : gameplay::Keyboard::KEY_Z;
     default:
     default:
-        return gameplay::Input::KEY_NONE;
+        return gameplay::Keyboard::KEY_NONE;
     }
     }
 }
 }
 
 
@@ -267,13 +267,13 @@ LRESULT CALLBACK __WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
         return 0;
         return 0;
 
 
     case WM_LBUTTONDOWN:
     case WM_LBUTTONDOWN:
-        gameplay::Game::getInstance()->touch(LOWORD(lParam), HIWORD(lParam), gameplay::Input::TOUCHEVENT_PRESS);
+        gameplay::Game::getInstance()->touchEvent(gameplay::Touch::TOUCH_PRESS, LOWORD(lParam), HIWORD(lParam), 0);
         lMouseDown = true;
         lMouseDown = true;
         return 0;
         return 0;
 
 
     case WM_LBUTTONUP:
     case WM_LBUTTONUP:
         lMouseDown = false;
         lMouseDown = false;
-        gameplay::Game::getInstance()->touch(LOWORD(lParam), HIWORD(lParam), gameplay::Input::TOUCHEVENT_RELEASE);
+        gameplay::Game::getInstance()->touchEvent(gameplay::Touch::TOUCH_RELEASE, LOWORD(lParam), HIWORD(lParam), 0);
         return 0;
         return 0;
 
 
     case WM_RBUTTONDOWN:
     case WM_RBUTTONDOWN:
@@ -301,7 +301,7 @@ LRESULT CALLBACK __WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
 
         if (lMouseDown)
         if (lMouseDown)
         {
         {
-            gameplay::Game::getInstance()->touch(LOWORD(lParam), HIWORD(lParam), gameplay::Input::TOUCHEVENT_MOVE);
+            gameplay::Game::getInstance()->touchEvent(gameplay::Touch::TOUCH_MOVE, LOWORD(lParam), HIWORD(lParam), 0);
             return 0;
             return 0;
         }
         }
         else if (rMouseDown)
         else if (rMouseDown)
@@ -330,14 +330,14 @@ LRESULT CALLBACK __WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
         if (wParam == VK_LSHIFT || wParam == VK_RSHIFT)
         if (wParam == VK_LSHIFT || wParam == VK_RSHIFT)
             shiftDown = true;
             shiftDown = true;
 
 
-        gameplay::Game::getInstance()->keyPress(getGameplayInputKey(wParam, shiftDown), gameplay::Input::KEYEVENT_DOWN);
+        gameplay::Game::getInstance()->keyEvent(gameplay::Keyboard::KEY_PRESS, getKey(wParam, shiftDown));
         break;
         break;
 
 
     case WM_KEYUP:
     case WM_KEYUP:
         if (wParam == VK_LSHIFT || wParam == VK_RSHIFT)
         if (wParam == VK_LSHIFT || wParam == VK_RSHIFT)
             shiftDown = false;
             shiftDown = false;
 
 
-        gameplay::Game::getInstance()->keyPress(getGameplayInputKey(wParam, shiftDown), gameplay::Input::KEYEVENT_UP);
+        gameplay::Game::getInstance()->keyEvent(gameplay::Keyboard::KEY_RELEASE, getKey(wParam, shiftDown));
         break;
         break;
 
 
     case WM_SETFOCUS:
     case WM_SETFOCUS:
@@ -565,12 +565,16 @@ int Platform::getOrientationAngle()
     return 0;
     return 0;
 }
 }
 
 
-bool Platform::isAccelerometerSupported()
+void Platform::setMultiTouch(bool enabled)
 {
 {
-    return true;
 }
 }
 
 
-void Platform::getAccelerometerPitchAndRoll(float* pitch, float* roll)
+bool Platform::isMultiTouch()
+{
+    return false;
+}
+
+void Platform::getAccelerometerValues(float* pitch, float* roll)
 {
 {
     *pitch = __pitch;
     *pitch = __pitch;
     *roll = __roll;
     *roll = __roll;

+ 35 - 0
gameplay/src/Touch.h

@@ -0,0 +1,35 @@
+#ifndef TOUCH_H_
+#define TOUCH_H_
+
+namespace gameplay
+{
+
+/**
+ * Touch event
+ */
+class Touch
+{
+public:
+
+    /**
+     * The touch event type.
+     */
+    enum TouchEvent
+    {
+        TOUCH_PRESS,
+        TOUCH_RELEASE,
+        TOUCH_MOVE
+    };
+
+
+private:
+
+    /**
+     * Constructor. Used internally.
+     */
+    Touch();
+};
+
+}
+
+#endif

+ 2 - 1
gameplay/src/gameplay.h

@@ -2,7 +2,8 @@
 #include "Base.h"
 #include "Base.h"
 #include "Platform.h"
 #include "Platform.h"
 #include "Game.h"
 #include "Game.h"
-#include "Input.h"
+#include "Keyboard.h"
+#include "Touch.h"
 #include "FileSystem.h"
 #include "FileSystem.h"
 #include "Package.h"
 #include "Package.h"