Browse Source

Move potion buttons to the left side

pull/3095/head
staphen 4 years ago committed by Anders Jenbo
parent
commit
06801789e2
  1. 6
      Source/controls/touch/event_handlers.cpp
  2. 12
      Source/controls/touch/gamepad.cpp
  3. 4
      Source/controls/touch/gamepad.h
  4. 6
      Source/controls/touch/renderers.cpp

6
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) {

12
Source/controls/touch/gamepad.cpp

@ -1,7 +1,9 @@
#include <SDL.h>
#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)

4
Source/controls/touch/gamepad.h

@ -2,6 +2,8 @@
#if defined(VIRTUAL_GAMEPAD) && !defined(USE_SDL1)
#include <functional>
#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<bool()> isUsable;
VirtualPadButton()
: area({ { 0, 0 }, 0 })
, isHeld(false)
, didStateChange(false)
, isUsable([]() { return true; })
{
}
};

6
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<VirtualGamepadPotionType> potionType = GetPotionType();
if (potionType == std::nullopt)
return;

Loading…
Cancel
Save