diff options
Diffstat (limited to 'src/input/touch')
-rw-r--r-- | src/input/touch/touchactions.cpp | 129 | ||||
-rw-r--r-- | src/input/touch/touchactions.h | 39 | ||||
-rw-r--r-- | src/input/touch/touchmanager.cpp | 3 |
3 files changed, 170 insertions, 1 deletions
diff --git a/src/input/touch/touchactions.cpp b/src/input/touch/touchactions.cpp new file mode 100644 index 000000000..57b714585 --- /dev/null +++ b/src/input/touch/touchactions.cpp @@ -0,0 +1,129 @@ +/* + * The ManaPlus Client + * Copyright (C) 2012-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "input/touch/touchactions.h" + +#include "input/inputmanager.h" +#include "input/mouseinput.h" + +#include "input/touch/touchmanager.h" + +#include "debug.h" + +bool padClicked(false); +int halfJoyPad = 50; + +#define impHandler(name) void name(const MouseInput &mouseInput) +#define impHandler0(name) void name(const MouseInput &mouseInput A_UNUSED) + +void setHalfJoyPad(const int s) +{ + halfJoyPad = s; +} + +static void moveChar(int x, int y) +{ + static const int lim1 = 10; + static const int diff = 20; + + // set center at (0,0) + x -= halfJoyPad; + y -= halfJoyPad; + + // some magic for checking at what sector was click + if (abs(x) < lim1) + x = 0; + + if (abs(y) < lim1) + y = 0; + + const int x2 = abs(x); + const int y2 = abs(y); + if (x2 > y2) + { + if (y2 && x2 * 10 / y2 > diff) + y = 0; + } + else + { + if (x2 && y2 * 10 / x2 > diff) + x = 0; + } + + // detecting direction + if (x > 0) + { + touchManager.setActionActive(InputAction::MOVE_LEFT, false); + touchManager.setActionActive(InputAction::MOVE_RIGHT, true); + } + else if (x < 0) + { + touchManager.setActionActive(InputAction::MOVE_LEFT, true); + touchManager.setActionActive(InputAction::MOVE_RIGHT, false); + } + else + { + touchManager.setActionActive(InputAction::MOVE_LEFT, false); + touchManager.setActionActive(InputAction::MOVE_RIGHT, false); + } + if (y > 0) + { + touchManager.setActionActive(InputAction::MOVE_DOWN, true); + touchManager.setActionActive(InputAction::MOVE_UP, false); + } + else if (y < 0) + { + touchManager.setActionActive(InputAction::MOVE_DOWN, false); + touchManager.setActionActive(InputAction::MOVE_UP, true); + } + else + { + touchManager.setActionActive(InputAction::MOVE_DOWN, false); + touchManager.setActionActive(InputAction::MOVE_UP, false); + } + inputManager.updateConditionMask(); +} + +impHandler(padClick) +{ + moveChar(mouseInput.getX(), mouseInput.getY()); + padClicked = true; +} + +impHandler(padEvents) +{ + if (mouseInput.getType() == MouseEventType::MOVED) + { + if (padClicked) + moveChar(mouseInput.getX(), mouseInput.getY()); + } +} + +impHandler0(padOut) +{ + padClicked = false; + moveChar(halfJoyPad, halfJoyPad); +} + +impHandler0(padUp) +{ + padClicked = false; + moveChar(halfJoyPad, halfJoyPad); +} diff --git a/src/input/touch/touchactions.h b/src/input/touch/touchactions.h new file mode 100644 index 000000000..216de1741 --- /dev/null +++ b/src/input/touch/touchactions.h @@ -0,0 +1,39 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef INPUT_TOUCH_TOUCHACTIONS_H +#define INPUT_TOUCH_TOUCHACTIONS_H + +#include "localconsts.h" + +#define decHandler(name) void name(const MouseInput &mouseInput) + +class MouseInput; + +decHandler(padClick); +decHandler(padEvents); +decHandler(padOut); +decHandler(padUp); + +void setHalfJoyPad(const int s); + +#undef decHandler + +#endif // INPUT_TOUCH_TOUCHACTIONS_H diff --git a/src/input/touch/touchmanager.cpp b/src/input/touch/touchmanager.cpp index 3107b62c8..ec00c72a7 100644 --- a/src/input/touch/touchmanager.cpp +++ b/src/input/touch/touchmanager.cpp @@ -22,10 +22,11 @@ #include "configuration.h" #include "graphicsvertexes.h" -#include "touchactions.h" #include "input/mouseinput.h" +#include "input/touch/touchactions.h" + #include "gui/gui.h" #include "gui/skin.h" |