#pragma once #include #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