From bb11bf0825838ebc4de9cd5d1689baa7f5762cb3 Mon Sep 17 00:00:00 2001 From: Er2 Date: Sat, 9 Dec 2023 21:14:41 +0300 Subject: [PATCH] GUI: Fix mobile controls --- platforms/sdl/base/AppPlatform_sdl_base.hpp | 10 ++++++++-- source/client/app/Minecraft.cpp | 7 ++++++- source/client/gui/Gui.cpp | 7 ++++++- source/client/gui/input/TouchscreenInput_TestFps.cpp | 12 ++++-------- source/client/gui/input/TouchscreenInput_TestFps.hpp | 8 ++------ source/client/player/input/TouchInputHolder.cpp | 8 ++++---- source/client/player/input/TouchInputHolder.hpp | 4 ++-- source/renderer/CMakeLists.txt | 6 +++++- 8 files changed, 37 insertions(+), 25 deletions(-) diff --git a/platforms/sdl/base/AppPlatform_sdl_base.hpp b/platforms/sdl/base/AppPlatform_sdl_base.hpp index 1d6275b..91b9b69 100644 --- a/platforms/sdl/base/AppPlatform_sdl_base.hpp +++ b/platforms/sdl/base/AppPlatform_sdl_base.hpp @@ -38,8 +38,14 @@ public: // Also add these to allow proper text input within the game. bool shiftPressed() override; void setShiftPressed(bool b, bool isLeft); - - bool isTouchscreen() override { return false; } + + bool isTouchscreen() override { +#ifdef MOBILE + return true; +#else + return false; +#endif + } static MouseButtonType GetMouseButtonType(SDL_Event event); static bool GetMouseButtonState(SDL_Event event); diff --git a/source/client/app/Minecraft.cpp b/source/client/app/Minecraft.cpp index 588aea6..26d30e5 100644 --- a/source/client/app/Minecraft.cpp +++ b/source/client/app/Minecraft.cpp @@ -34,6 +34,7 @@ #include "client/newui/Gui.hpp" #else #include "client/gui/Gui.hpp" +#include "client/gui/input/TouchscreenInput_TestFps.hpp" #endif int Minecraft::width = C_DEFAULT_SCREEN_WIDTH; @@ -644,7 +645,11 @@ void Minecraft::_reloadInput() if (isTouchscreen()) { - m_pInputHolder = new TouchInputHolder(this, m_options); + TouchInputHolder *holder = new TouchInputHolder(this, m_options); +#ifndef NEWUI + holder->m_touchScreenInput = new TouchscreenInput_TestFps(this, m_options); +#endif + m_pInputHolder = holder; } else { diff --git a/source/client/gui/Gui.cpp b/source/client/gui/Gui.cpp index f60af6f..6d1eb79 100644 --- a/source/client/gui/Gui.cpp +++ b/source/client/gui/Gui.cpp @@ -527,7 +527,12 @@ void Gui::renderChatMessages(bool bShowAll) int Gui::getNumSlots() { if (m_pMinecraft->isTouchscreen()) - return 4; + { + if (scale < 0.5) + return 4; + else + return 10; + } return 9; } diff --git a/source/client/gui/input/TouchscreenInput_TestFps.cpp b/source/client/gui/input/TouchscreenInput_TestFps.cpp index c1918b5..29d9370 100644 --- a/source/client/gui/input/TouchscreenInput_TestFps.cpp +++ b/source/client/gui/input/TouchscreenInput_TestFps.cpp @@ -13,11 +13,12 @@ #include "world/entity/Player.hpp" TouchscreenInput_TestFps::TouchscreenInput_TestFps(Minecraft* pMinecraft, Options* pOptions) : - m_rectArea(0.0f, 0.0f, 1.0f, 1.0f), - m_pOptions(pOptions), + TouchInput(pMinecraft, pOptions), + //m_rectArea(0.0f, 0.0f, 1.0f, 1.0f), + //m_pOptions(pOptions), field_40(false), m_bJumpBeingHeld(false), - m_pMinecraft(pMinecraft), + //m_pMinecraft(pMinecraft), m_pAreaLeft(nullptr), m_pAreaRight(nullptr), m_pAreaForward(nullptr), @@ -279,11 +280,6 @@ void TouchscreenInput_TestFps::onRender(float f) glEnable(GL_CULL_FACE); } -RectangleArea TouchscreenInput_TestFps::getRectangleArea() -{ - return m_rectArea; -} - bool TouchscreenInput_TestFps::isButtonDown(int key) { return field_6C[key - 100]; diff --git a/source/client/gui/input/TouchscreenInput_TestFps.hpp b/source/client/gui/input/TouchscreenInput_TestFps.hpp index 19e65e4..a1f0d25 100644 --- a/source/client/gui/input/TouchscreenInput_TestFps.hpp +++ b/source/client/gui/input/TouchscreenInput_TestFps.hpp @@ -9,15 +9,15 @@ #pragma once #include "client/gui/GuiComponent.hpp" -#include "client/player/input/IMoveInput.hpp" #include "client/player/input/RectangleArea.hpp" #include "client/player/input/PolygonArea.hpp" #include "client/player/input/TouchAreaModel.hpp" +#include "client/player/input/TouchInputHolder.hpp" class Minecraft; class Options; -class TouchscreenInput_TestFps : public IMoveInput, public GuiComponent +class TouchscreenInput_TestFps : public TouchInput, public GuiComponent { public: TouchscreenInput_TestFps(Minecraft*, Options*); @@ -29,17 +29,13 @@ public: void onTick(Player*) override; void onRender(float f) override; - RectangleArea getRectangleArea(); bool isButtonDown(int key); private: - RectangleArea m_rectArea; bool field_30[10]; - Options* m_pOptions; bool field_40; bool m_bJumpBeingHeld; TouchAreaModel m_touchAreaModel; - Minecraft* m_pMinecraft; PolygonArea* m_pAreaLeft; PolygonArea* m_pAreaRight; PolygonArea* m_pAreaForward; diff --git a/source/client/player/input/TouchInputHolder.cpp b/source/client/player/input/TouchInputHolder.cpp index 13a80d1..b8a0870 100644 --- a/source/client/player/input/TouchInputHolder.cpp +++ b/source/client/player/input/TouchInputHolder.cpp @@ -12,7 +12,7 @@ #include "client/options/Options.hpp" TouchInputHolder::TouchInputHolder(Minecraft* pMinecraft, Options* pOptions) : - m_touchScreenInput(pMinecraft, pOptions), + m_touchScreenInput(nullptr), m_unifiedTurnBuild(2, Minecraft::width, Minecraft::height, 200.0f, 1.05f, this), m_pMinecraft(pMinecraft) { @@ -41,7 +41,7 @@ bool TouchInputHolder::allowPicking() IMoveInput* TouchInputHolder::getMoveInput() { - return &m_touchScreenInput; + return m_touchScreenInput; } ITurnInput* TouchInputHolder::getTurnInput() @@ -56,8 +56,8 @@ IBuildInput* TouchInputHolder::getBuildInput() void TouchInputHolder::setScreenSize(int width, int height) { - m_touchScreenInput.setScreenSize(width, height); - m_unifiedTurnBuild.field_40 = m_touchScreenInput.getRectangleArea(); + m_touchScreenInput->setScreenSize(width, height); + m_unifiedTurnBuild.field_40 = m_touchScreenInput->getRectangleArea(); m_unifiedTurnBuild.field_58 = getRectangleArea(m_pMinecraft->m_pGui, false); m_unifiedTurnBuild.setScreenSize(width, height); } diff --git a/source/client/player/input/TouchInputHolder.hpp b/source/client/player/input/TouchInputHolder.hpp index 994564f..e86c9d3 100644 --- a/source/client/player/input/TouchInputHolder.hpp +++ b/source/client/player/input/TouchInputHolder.hpp @@ -41,7 +41,7 @@ public: return m_rectArea; } -private: +protected: Minecraft* m_pMinecraft; Options* m_pOptions; RectangleArea m_rectArea; @@ -58,7 +58,7 @@ public: void setScreenSize(int width, int height) override; public: - TouchInput m_touchScreenInput; + TouchInput *m_touchScreenInput; UnifiedTurnBuild m_unifiedTurnBuild; Minecraft* m_pMinecraft; }; diff --git a/source/renderer/CMakeLists.txt b/source/renderer/CMakeLists.txt index 3e03adc..dc9a471 100644 --- a/source/renderer/CMakeLists.txt +++ b/source/renderer/CMakeLists.txt @@ -1,5 +1,5 @@ set(RENDER GL CACHE STRING "Active renderer") -set_property(CACHE RENDER PROPERTY STRINGS GL) +set_property(CACHE RENDER PROPERTY STRINGS GL GLES) #add_library(reminecraftpe-renderer STATIC) if (RENDER STREQUAL GL) @@ -12,6 +12,10 @@ if (RENDER STREQUAL GL) else() set(USE_GLES1_COMPATIBILITY_LAYER TRUE) endif() +elseif (RENDER STREQUAL GLES) + # OpenGL ES + # nothing? + set(SOURCES GL/GL.cpp GL/GL.hpp) else() message(FATAL_ERROR "Unknown renderer!") endif()