You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

#pragma once
#include <SDL.h>
#include "controls/touch/gamepad.h"
namespace devilution {
class VirtualDirectionPadEventHandler {
public:
VirtualDirectionPadEventHandler(VirtualDirectionPad *virtualDirectionPad)
: virtualDirectionPad(virtualDirectionPad)
, activeFinger(0)
, isActive(false)
{
}
bool Handle(const SDL_Event &event);
private:
VirtualDirectionPad *virtualDirectionPad;
SDL_FingerID activeFinger;
bool isActive;
bool HandleFingerDown(const SDL_TouchFingerEvent &event);
bool HandleFingerUp(const SDL_TouchFingerEvent &event);
bool HandleFingerMotion(const SDL_TouchFingerEvent &event);
};
class VirtualButtonEventHandler {
public:
VirtualButtonEventHandler(VirtualButton *virtualButton, bool toggles = false)
: virtualButton(virtualButton)
, activeFinger(0)
, isActive(false)
, toggles(toggles)
{
}
bool Handle(const SDL_Event &event);
private:
VirtualButton *virtualButton;
SDL_FingerID activeFinger;
bool isActive;
bool toggles;
bool HandleFingerDown(const SDL_TouchFingerEvent &event);
bool HandleFingerUp(const SDL_TouchFingerEvent &event);
bool HandleFingerMotion(const SDL_TouchFingerEvent &event);
};
class VirtualGamepadEventHandler {
public:
VirtualGamepadEventHandler(VirtualGamepad *virtualGamepad)
: charMenuButtonEventHandler(&virtualGamepad->menuPanel.charButton)
, questsMenuButtonEventHandler(&virtualGamepad->menuPanel.questsButton)
, inventoryMenuButtonEventHandler(&virtualGamepad->menuPanel.inventoryButton)
, mapMenuButtonEventHandler(&virtualGamepad->menuPanel.mapButton)
, directionPadEventHandler(&virtualGamepad->directionPad)
, standButtonEventHandler(&virtualGamepad->standButton, true)
, primaryActionButtonEventHandler(&virtualGamepad->primaryActionButton)
, secondaryActionButtonEventHandler(&virtualGamepad->secondaryActionButton)
, spellActionButtonEventHandler(&virtualGamepad->spellActionButton)
, cancelButtonEventHandler(&virtualGamepad->cancelButton)
, healthButtonEventHandler(&virtualGamepad->healthButton)
, manaButtonEventHandler(&virtualGamepad->manaButton)
{
}
bool Handle(const SDL_Event &event);
private:
VirtualButtonEventHandler charMenuButtonEventHandler;
VirtualButtonEventHandler questsMenuButtonEventHandler;
VirtualButtonEventHandler inventoryMenuButtonEventHandler;
VirtualButtonEventHandler mapMenuButtonEventHandler;
VirtualDirectionPadEventHandler directionPadEventHandler;
VirtualButtonEventHandler standButtonEventHandler;
VirtualButtonEventHandler primaryActionButtonEventHandler;
VirtualButtonEventHandler secondaryActionButtonEventHandler;
VirtualButtonEventHandler spellActionButtonEventHandler;
VirtualButtonEventHandler cancelButtonEventHandler;
VirtualButtonEventHandler healthButtonEventHandler;
VirtualButtonEventHandler manaButtonEventHandler;
};
void HandleTouchEvent(const SDL_Event &event);
} // namespace devilution