summaryrefslogtreecommitdiff
path: root/src/touchactions.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-11-14 16:55:35 +0300
committerAndrei Karas <akaras@inbox.ru>2012-11-14 18:37:50 +0300
commit13642a6cddd8657ec84a2bfa94c6ac7d34545dba (patch)
treecefec154fe5b6ec59990c4ef5cfe67eba4a484e6 /src/touchactions.cpp
parenteaaafe3312a361e332d495ee68451e424d90a19d (diff)
downloadmv-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.cpp81
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);
}