From 13642a6cddd8657ec84a2bfa94c6ac7d34545dba Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 14 Nov 2012 16:55:35 +0300 Subject: Add support for on screen joystick for moving. --- src/touchactions.cpp | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'src/touchactions.cpp') 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 @@ -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); } -- cgit v1.2.3-60-g2f50