]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/touchscreengui.h
Fix Android node selection distance (#6187)
[dragonfireclient.git] / src / touchscreengui.h
index 53fc6d683b44f44599844f07ef7b268396a8d60d..da97381cd4fc080616ec4cd0f864ab882c0b772f 100644 (file)
@@ -16,18 +16,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef TOUCHSCREENGUI_HEADER
-#define TOUCHSCREENGUI_HEADER
+#pragma once
 
-#include <IGUIEnvironment.h>
-#include <IGUIButton.h>
 #include <IEventReceiver.h>
+#include <IGUIButton.h>
+#include <IGUIEnvironment.h>
 
-#include <vector>
 #include <map>
+#include <vector>
 
-#include "game.h"
 #include "client/tile.h"
+#include "game.h"
 
 using namespace irr;
 using namespace irr::core;
@@ -68,32 +67,32 @@ typedef enum {
 #define SETTINGS_BAR_Y_OFFSET 6.5
 #define RARE_CONTROLS_BAR_Y_OFFSET 4
 
-extern const char** touchgui_button_imagenames;
+extern const char **touchgui_button_imagenames;
 
-struct button_info {
-       float            repeatcounter;
-       float            repeatdelay;
-       irr::EKEY_CODE   keycode;
+struct button_info
+{
+       float repeatcounter;
+       float repeatdelay;
+       irr::EKEY_CODE keycode;
        std::vector<int> ids;
-       IGUIButton*      guibutton = NULL;
-       bool             immediate_release;
+       IGUIButton *guibutton = nullptr;
+       bool immediate_release;
 };
 
 class AutoHideButtonBar
 {
 public:
+       AutoHideButtonBar(IrrlichtDevice *device, IEventReceiver *receiver);
 
-       AutoHideButtonBar( IrrlichtDevice *device, IEventReceiver* receiver );
-
-       void init(ISimpleTextureSource* tsrc, const char* starter_img,
-                       int button_id, v2s32 UpperLeft, v2s32 LowerRight,
-                       autohide_button_bar_dir dir, float timeout);
+       void init(ISimpleTextureSource *tsrc, const char *starter_img, int button_id,
+                       v2s32 UpperLeft, v2s32 LowerRight, autohide_button_bar_dir dir,
+                       float timeout);
 
        ~AutoHideButtonBar();
 
        /* add button to be shown */
-       void addButton(touch_gui_button_id id, const wchar_tcaption,
-                       const charbtn_image);
+       void addButton(touch_gui_button_id id, const wchar_t *caption,
+                       const char *btn_image);
 
        /* detect settings bar button events */
        bool isButton(const SEvent &event);
@@ -114,40 +113,40 @@ class AutoHideButtonBar
        void show();
 
 private:
-       ISimpleTextureSource*     m_texturesource;
-       irr::video::IVideoDriver* m_driver;
-       IGUIEnvironment*          m_guienv;
-       IEventReceiver*           m_receiver;
-       v2u32                     m_screensize;
-       button_info               m_starter;
-       std::vector<button_info*> m_buttons;
+       ISimpleTextureSource *m_texturesource = nullptr;
+       irr::video::IVideoDriver *m_driver;
+       IGUIEnvironment *m_guienv;
+       IEventReceiver *m_receiver;
+       button_info m_starter;
+       std::vector<button_info *> m_buttons;
 
-       v2s32                     m_upper_left;
-       v2s32                     m_lower_right;
+       v2s32 m_upper_left;
+       v2s32 m_lower_right;
 
        /* show settings bar */
-       bool                      m_active;
+       bool m_active = false;
 
-       bool                      m_visible;
+       bool m_visible = true;
 
        /* settings bar timeout */
-       float                     m_timeout;
-       float                     m_timeout_value;
-       bool                      m_initialized;
-       autohide_button_bar_dir   m_dir;
+       float m_timeout = 0.0f;
+       float m_timeout_value = 3.0f;
+       bool m_initialized = false;
+       autohide_button_bar_dir m_dir = AHBB_Dir_Right_Left;
 };
 
 class TouchScreenGUI
 {
 public:
-       TouchScreenGUI(IrrlichtDevice *device, IEventReceiverreceiver);
+       TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver);
        ~TouchScreenGUI();
 
        void translateEvent(const SEvent &event);
 
-       void init(ISimpleTextureSourcetsrc);
+       void init(ISimpleTextureSource *tsrc);
 
-       double getYawChange() {
+       double getYawChange()
+       {
                double res = m_camera_yaw_change;
                m_camera_yaw_change = 0;
                return res;
@@ -155,6 +154,14 @@ class TouchScreenGUI
 
        double getPitch() { return m_camera_pitch; }
 
+       /*!
+        * Returns a line which describes what the player is pointing at.
+        * The starting point and looking direction are significant,
+        * the line should be scaled to match its length to the actual distance
+        * the player can reach.
+        * The line starts at the camera and ends on the camera's far plane.
+        * The coordinates do not contain the camera offset.
+        */
        line3d<f32> getShootline() { return m_shootline; }
 
        void step(float dtime);
@@ -166,28 +173,32 @@ class TouchScreenGUI
        void show();
 
 private:
-       IrrlichtDevice*         m_device;
-       IGUIEnvironment*        m_guienv;
-       IEventReceiver*         m_receiver;
-       ISimpleTextureSource*   m_texturesource;
-       v2u32                   m_screensize;
-       std::map<int,rect<s32> > m_hud_rects;
-       std::map<int,irr::EKEY_CODE> m_hud_ids;
-       bool                    m_visible; // is the gui visible
+       IrrlichtDevice *m_device;
+       IGUIEnvironment *m_guienv;
+       IEventReceiver *m_receiver;
+       ISimpleTextureSource *m_texturesource;
+       v2u32 m_screensize;
+       std::map<int, rect<s32>> m_hud_rects;
+       std::map<int, irr::EKEY_CODE> m_hud_ids;
+       bool m_visible; // is the gui visible
 
        /* value in degree */
-       double                  m_camera_yaw_change;
-       double                  m_camera_pitch;
-
-       line3d<f32>             m_shootline;
-
-       rect<s32>               m_control_pad_rect;
-
-       int                     m_move_id;
-       bool                    m_move_has_really_moved;
-       s32                     m_move_downtime;
-       bool                    m_move_sent_as_mouse_event;
-       v2s32                   m_move_downlocation;
+       double m_camera_yaw_change = 0.0;
+       double m_camera_pitch = 0.0;
+
+       /*!
+        * A line starting at the camera and pointing towards the
+        * selected object.
+        * The line ends on the camera's far plane.
+        * The coordinates do not contain the camera offset.
+        */
+       line3d<f32> m_shootline;
+
+       int m_move_id = -1;
+       bool m_move_has_really_moved = false;
+       s64 m_move_downtime = 0;
+       bool m_move_sent_as_mouse_event = false;
+       v2s32 m_move_downlocation = v2s32(-10000, -10000);
 
        button_info m_buttons[after_last_element_id];
 
@@ -205,10 +216,8 @@ class TouchScreenGUI
                        std::wstring caption, bool immediate_release,
                        float repeat_delay = BUTTON_REPEAT_DELAY);
 
-       /* load texture */
-       void loadButtonTexture(button_info* btn, const char* path, rect<s32> button_rect);
-
-       struct id_status{
+       struct id_status
+       {
                int id;
                int X;
                int Y;
@@ -236,7 +245,8 @@ class TouchScreenGUI
        int getGuiButtonSize();
 
        /* doubleclick detection variables */
-       struct key_event {
+       struct key_event
+       {
                unsigned int down_time;
                s32 x;
                s32 y;
@@ -255,4 +265,3 @@ class TouchScreenGUI
        AutoHideButtonBar m_rarecontrolsbar;
 };
 extern TouchScreenGUI *g_touchscreengui;
-#endif