From 06801789e2f0c0008268fba4f87020ee4e5065bb Mon Sep 17 00:00:00 2001 From: staphen Date: Sun, 10 Oct 2021 22:23:03 -0400 Subject: [PATCH] Move potion buttons to the left side --- Source/controls/touch/event_handlers.cpp | 6 ++++++ Source/controls/touch/gamepad.cpp | 12 ++++++++---- Source/controls/touch/gamepad.h | 4 ++++ Source/controls/touch/renderers.cpp | 6 ++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Source/controls/touch/event_handlers.cpp b/Source/controls/touch/event_handlers.cpp index 9e0c092c2..14b1fe5bd 100644 --- a/Source/controls/touch/event_handlers.cpp +++ b/Source/controls/touch/event_handlers.cpp @@ -195,6 +195,12 @@ bool VirtualDirectionPadEventHandler::HandleFingerMotion(const SDL_TouchFingerEv bool VirtualPadButtonEventHandler::Handle(const SDL_Event &event) { + if (!virtualPadButton->isUsable()) { + virtualPadButton->didStateChange = virtualPadButton->isHeld; + virtualPadButton->isHeld = false; + return false; + } + virtualPadButton->didStateChange = false; switch (event.type) { diff --git a/Source/controls/touch/gamepad.cpp b/Source/controls/touch/gamepad.cpp index a1468ae05..1025e870c 100644 --- a/Source/controls/touch/gamepad.cpp +++ b/Source/controls/touch/gamepad.cpp @@ -1,7 +1,9 @@ #include +#include "control.h" #include "controls/touch/gamepad.h" #include "diablo.h" +#include "quests.h" #include "utils/display.h" #include "utils/ui_fwd.h" @@ -104,14 +106,16 @@ void InitializeVirtualGamepad() cancelButton.area.radius = padButtonSize / 2; VirtualPadButton &healthButton = VirtualGamepadState.healthButton; - healthButton.area.position.x = padButtonRight - padButtonSize - padButtonSpacing; - healthButton.area.position.y = padButtonTop - padButtonSize - padButtonSpacing; + healthButton.area.position.x = directionPad.area.position.x - (padButtonSize + padButtonSpacing) / 2; + healthButton.area.position.y = directionPad.area.position.y - (directionPadSize + padButtonSize + padButtonSpacing) / 2; healthButton.area.radius = padButtonSize / 2; + healthButton.isUsable = []() { return !chrflag && !QuestLogIsOpen; }; VirtualPadButton &manaButton = VirtualGamepadState.manaButton; - manaButton.area.position.x = padButtonRight; - manaButton.area.position.y = padButtonTop - padButtonSize - padButtonSpacing; + manaButton.area.position.x = directionPad.area.position.x + (padButtonSize + padButtonSpacing) / 2; + manaButton.area.position.y = directionPad.area.position.y - (directionPadSize + padButtonSize + padButtonSpacing) / 2; manaButton.area.radius = padButtonSize / 2; + manaButton.isUsable = []() { return !chrflag && !QuestLogIsOpen; }; } void VirtualDirectionPad::UpdatePosition(Point touchCoordinates) diff --git a/Source/controls/touch/gamepad.h b/Source/controls/touch/gamepad.h index 9cc32d813..ba2bba8db 100644 --- a/Source/controls/touch/gamepad.h +++ b/Source/controls/touch/gamepad.h @@ -2,6 +2,8 @@ #if defined(VIRTUAL_GAMEPAD) && !defined(USE_SDL1) +#include + #include "controls/controller_buttons.h" #include "engine/circle.hpp" #include "engine/point.hpp" @@ -33,11 +35,13 @@ struct VirtualPadButton { Circle area; bool isHeld; bool didStateChange; + std::function isUsable; VirtualPadButton() : area({ { 0, 0 }, 0 }) , isHeld(false) , didStateChange(false) + , isUsable([]() { return true; }) { } }; diff --git a/Source/controls/touch/renderers.cpp b/Source/controls/touch/renderers.cpp index 884a785e2..502520375 100644 --- a/Source/controls/touch/renderers.cpp +++ b/Source/controls/touch/renderers.cpp @@ -233,6 +233,9 @@ void VirtualDirectionPadRenderer::RenderKnob(RenderFunction renderFunction) void VirtualPadButtonRenderer::Render(RenderFunction renderFunction, Art &buttonArt) { + if (!virtualPadButton->isUsable()) + return; + VirtualGamepadButtonType buttonType = GetButtonType(); int frame = buttonType; int offset = buttonArt.h() * frame; @@ -253,6 +256,9 @@ void VirtualPadButtonRenderer::Render(RenderFunction renderFunction, Art &button void PotionButtonRenderer::RenderPotion(RenderFunction renderFunction, Art &potionArt) { + if (!virtualPadButton->isUsable()) + return; + std::optional potionType = GetPotionType(); if (potionType == std::nullopt) return;