diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-11-14 16:55:35 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-11-14 18:37:50 +0300 |
commit | 13642a6cddd8657ec84a2bfa94c6ac7d34545dba (patch) | |
tree | cefec154fe5b6ec59990c4ef5cfe67eba4a484e6 /src/touchactions.cpp | |
parent | eaaafe3312a361e332d495ee68451e424d90a19d (diff) | |
download | mv-13642a6cddd8657ec84a2bfa94c6ac7d34545dba.tar.gz mv-13642a6cddd8657ec84a2bfa94c6ac7d34545dba.tar.bz2 mv-13642a6cddd8657ec84a2bfa94c6ac7d34545dba.tar.xz mv-13642a6cddd8657ec84a2bfa94c6ac7d34545dba.zip |
Add support for on screen joystick for moving.
Diffstat (limited to 'src/touchactions.cpp')
-rw-r--r-- | src/touchactions.cpp | 81 |
1 files changed, 80 insertions, 1 deletions
diff --git a/src/touchactions.cpp b/src/touchactions.cpp index 5fcaa1802..e201a7efb 100644 --- a/src/touchactions.cpp +++ b/src/touchactions.cpp @@ -20,7 +20,11 @@ #include "touchactions.h" +#include "being.h" +#include "game.h" +#include "keydata.h" #include "logger.h" +#include "touchmanager.h" #ifdef ANDROID #include <SDL_screenkeyboard.h> @@ -28,9 +32,84 @@ #include "debug.h" +bool padClicked(false); + +#ifdef ANDROID void showKeyboard(const gcn::MouseInput &mouseInput) { -#ifdef ANDROID SDL_ANDROID_ToggleScreenKeyboardTextInput(nullptr); +} +#else +void showKeyboard(const gcn::MouseInput &mouseInput A_UNUSED) +{ +} #endif + +static void moveChar(int x, int y) +{ + Game *const game = Game::instance(); + if (!game) + return; + + static const int lim = 10; + x -= 50; + y -= 50; + + if (x > lim) + { + touchManager.setActionActive(Input::KEY_MOVE_LEFT, false); + touchManager.setActionActive(Input::KEY_MOVE_RIGHT, true); + } + else if (x < -lim) + { + touchManager.setActionActive(Input::KEY_MOVE_LEFT, true); + touchManager.setActionActive(Input::KEY_MOVE_RIGHT, false); + } + else + { + touchManager.setActionActive(Input::KEY_MOVE_LEFT, false); + touchManager.setActionActive(Input::KEY_MOVE_RIGHT, false); + } + if (y > lim) + { + touchManager.setActionActive(Input::KEY_MOVE_DOWN, true); + touchManager.setActionActive(Input::KEY_MOVE_UP, false); + } + else if (y < -lim) + { + touchManager.setActionActive(Input::KEY_MOVE_DOWN, false); + touchManager.setActionActive(Input::KEY_MOVE_UP, true); + } + else + { + touchManager.setActionActive(Input::KEY_MOVE_DOWN, false); + touchManager.setActionActive(Input::KEY_MOVE_UP, false); + } +} + +void padClick(const gcn::MouseInput &mouseInput) +{ + moveChar(mouseInput.getX(), mouseInput.getY()); + padClicked = true; +} + +void padEvents(const gcn::MouseInput &mouseInput) +{ + if (mouseInput.getType() == gcn::MouseInput::MOVED) + { + if (padClicked) + moveChar(mouseInput.getX(), mouseInput.getY()); + } +} + +void padOut(const gcn::MouseInput &mouseInput A_UNUSED) +{ + padClicked = false; + moveChar(50, 50); +} + +void padUp(const gcn::MouseInput &mouseInput A_UNUSED) +{ + padClicked = false; + moveChar(50, 50); } |