From 84934d931a55c9ce9d13152fedca2ab9c2958d6f Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 31 May 2023 13:08:12 +0300 Subject: [PATCH] Minor improvements to swipe in battle --- client/battle/BattleFieldController.cpp | 31 +++++++++---------------- client/battle/BattleFieldController.h | 6 ++--- client/eventsSDL/InputSourceMouse.cpp | 4 ++-- client/eventsSDL/InputSourceTouch.h | 8 +++---- 4 files changed, 18 insertions(+), 31 deletions(-) diff --git a/client/battle/BattleFieldController.cpp b/client/battle/BattleFieldController.cpp index 7ef1fb251..33a4892d9 100644 --- a/client/battle/BattleFieldController.cpp +++ b/client/battle/BattleFieldController.cpp @@ -96,31 +96,22 @@ void BattleFieldController::panning(bool on, const Point & initialPosition, cons void BattleFieldController::gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance) { - if (pos.isInside(currentPosition)) - { - hoveredHex = getHexAtPosition(initialPosition); - currentAttackDirection = selectAttackDirection(getHoveredHex(), currentPosition); + hoveredHex = getHexAtPosition(initialPosition); + currentAttackOriginPoint = currentPosition; + if (pos.isInside(initialPosition)) owner.actionsController->onHexHovered(getHoveredHex()); - } - else - { - hoveredHex = BattleHex::INVALID; - } } void BattleFieldController::mouseMoved(const Point & cursorPosition) { hoveredHex = getHexAtPosition(cursorPosition); - currentAttackDirection = selectAttackDirection(getHoveredHex(), cursorPosition); + currentAttackOriginPoint = cursorPosition; - if (!pos.isInside(cursorPosition)) - { + if (pos.isInside(cursorPosition)) + owner.actionsController->onHexHovered(getHoveredHex()); + else owner.actionsController->onHoverEnded(); - return; - } - - owner.actionsController->onHexHovered(getHoveredHex()); } void BattleFieldController::clickLeft(tribool down, bool previousState) @@ -161,7 +152,7 @@ void BattleFieldController::renderBattlefield(Canvas & canvas) void BattleFieldController::showBackground(Canvas & canvas) { - if (owner.stacksController->getActiveStack() != nullptr ) //&& creAnims[stacksController->getActiveStack()->unitId()]->isIdle() //show everything with range + if (owner.stacksController->getActiveStack() != nullptr ) showBackgroundImageWithHexes(canvas); else showBackgroundImage(canvas); @@ -193,7 +184,7 @@ void BattleFieldController::showBackgroundImage(Canvas & canvas) void BattleFieldController::showBackgroundImageWithHexes(Canvas & canvas) { - canvas.draw(*backgroundWithHexes.get(), Point(0, 0)); + canvas.draw(*backgroundWithHexes, Point(0, 0)); } void BattleFieldController::redrawBackgroundWithHexes() @@ -457,7 +448,7 @@ void BattleFieldController::setBattleCursor(BattleHex myNumber) Cursor::Combat::HIT_NORTH, }; - auto direction = static_cast(currentAttackDirection); + auto direction = static_cast(selectAttackDirection(getHoveredHex(), currentAttackOriginPoint)); assert(direction != -1); if (direction != -1) @@ -540,7 +531,7 @@ BattleHex::EDir BattleFieldController::selectAttackDirection(BattleHex myNumber, BattleHex BattleFieldController::fromWhichHexAttack(BattleHex attackTarget) { - BattleHex::EDir direction = currentAttackDirection; + BattleHex::EDir direction = selectAttackDirection(getHoveredHex(), currentAttackOriginPoint); const CStack * attacker = owner.stacksController->getActiveStack(); diff --git a/client/battle/BattleFieldController.h b/client/battle/BattleFieldController.h index 8109e07ca..7c6360010 100644 --- a/client/battle/BattleFieldController.h +++ b/client/battle/BattleFieldController.h @@ -10,14 +10,12 @@ #pragma once #include "../../lib/battle/BattleHex.h" +#include "../../lib/Point.h" #include "../gui/CIntObject.h" VCMI_LIB_NAMESPACE_BEGIN - class CStack; class Rect; -class Point; - VCMI_LIB_NAMESPACE_END class BattleHero; @@ -40,7 +38,7 @@ class BattleFieldController : public CIntObject std::unique_ptr backgroundWithHexes; /// direction which will be used to perform attack with current cursor position - BattleHex::EDir currentAttackDirection; + Point currentAttackOriginPoint; /// hex currently under mouse hover BattleHex hoveredHex; diff --git a/client/eventsSDL/InputSourceMouse.cpp b/client/eventsSDL/InputSourceMouse.cpp index 87bbe9b20..6ab559f5b 100644 --- a/client/eventsSDL/InputSourceMouse.cpp +++ b/client/eventsSDL/InputSourceMouse.cpp @@ -24,10 +24,10 @@ void InputSourceMouse::handleEventMouseMotion(const SDL_MouseMotionEvent & motio Point newPosition(motion.x, motion.y); Point distance(-motion.xrel, -motion.yrel); - GH.input().setCursorPosition(newPosition); - if (mouseButtonsMask & SDL_BUTTON(SDL_BUTTON_MIDDLE)) GH.events().dispatchGesturePanning(middleClickPosition, newPosition, distance); + else + GH.input().setCursorPosition(newPosition); mouseButtonsMask = motion.state; } diff --git a/client/eventsSDL/InputSourceTouch.h b/client/eventsSDL/InputSourceTouch.h index 114309f48..91d55d3c5 100644 --- a/client/eventsSDL/InputSourceTouch.h +++ b/client/eventsSDL/InputSourceTouch.h @@ -72,17 +72,15 @@ enum class TouchState struct TouchInputParameters { + /// Speed factor of mouse pointer when relative mode is used double relativeModeSpeedFactor = 1.0; /// tap for period longer than specified here will be qualified as "long tap", triggering corresponding gesture - uint32_t longPressTimeMilliseconds = 500; + uint32_t longPressTimeMilliseconds = 750; /// moving finger for distance larger than specified will be qualified as panning gesture instead of long press - uint32_t panningSensitivityThreshold = 16; + uint32_t panningSensitivityThreshold = 10; - bool useHoldGesture = true; - bool usePanGesture = true; - bool usePinchGesture = true; bool useRelativeMode = false; };