summaryrefslogtreecommitdiff
path: root/src/gui/touchscreengui.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/touchscreengui.h')
-rw-r--r--src/gui/touchscreengui.h90
1 files changed, 58 insertions, 32 deletions
diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h
index 9d4150ea6..21c52f756 100644
--- a/src/gui/touchscreengui.h
+++ b/src/gui/touchscreengui.h
@@ -34,11 +34,7 @@ using namespace irr::core;
using namespace irr::gui;
typedef enum {
- forward_id = 0,
- backward_id,
- left_id,
- right_id,
- jump_id,
+ jump_id = 0,
crunch_id,
after_last_element_id,
settings_starter_id,
@@ -51,9 +47,18 @@ typedef enum {
range_id,
chat_id,
inventory_id,
- drop_id
+ drop_id,
+ forward_id,
+ backward_id,
+ left_id,
+ right_id,
+ joystick_off_id,
+ joystick_bg_id,
+ joystick_center_id
} touch_gui_button_id;
+typedef enum { j_forward = 0, j_backward, j_left, j_right } touch_gui_joystick_move_id;
+
typedef enum {
AHBB_Dir_Top_Bottom,
AHBB_Dir_Bottom_Top,
@@ -69,6 +74,7 @@ typedef enum {
#define RARE_CONTROLS_BAR_Y_OFFSET 4
extern const char **touchgui_button_imagenames;
+extern const char **touchgui_joystick_imagenames;
struct button_info
{
@@ -91,26 +97,26 @@ public:
~AutoHideButtonBar();
- /* add button to be shown */
+ // add button to be shown
void addButton(touch_gui_button_id id, const wchar_t *caption,
const char *btn_image);
- /* detect settings bar button events */
+ // detect settings bar button events
bool isButton(const SEvent &event);
- /* handle released hud buttons */
+ // handle released hud buttons
bool isReleaseButton(int eventID);
- /* step handler */
+ // step handler
void step(float dtime);
- /* deactivate button bar */
+ // deactivate button bar
void deactivate();
- /* hide the whole buttonbar */
+ // hide the whole buttonbar
void hide();
- /* unhide the buttonbar */
+ // unhide the buttonbar
void show();
private:
@@ -124,12 +130,12 @@ private:
v2s32 m_upper_left;
v2s32 m_lower_right;
- /* show settings bar */
+ // show settings bar
bool m_active = false;
bool m_visible = true;
- /* settings bar timeout */
+ // settings bar timeout
float m_timeout = 0.0f;
float m_timeout_value = 3.0f;
bool m_initialized = false;
@@ -179,14 +185,20 @@ private:
IEventReceiver *m_receiver;
ISimpleTextureSource *m_texturesource;
v2u32 m_screensize;
+ double m_touchscreen_threshold;
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 */
+ // value in degree
double m_camera_yaw_change = 0.0;
double m_camera_pitch = 0.0;
+ // forward, backward, left, right
+ touch_gui_button_id m_joystick_names[4] = {
+ forward_id, backward_id, left_id, right_id};
+ bool m_joystick_status[4] = {false, false, false, false};
+
/*!
* A line starting at the camera and pointing towards the
* selected object.
@@ -201,22 +213,33 @@ private:
bool m_move_sent_as_mouse_event = false;
v2s32 m_move_downlocation = v2s32(-10000, -10000);
+ int m_joystick_id = -1;
+ bool m_joystick_has_really_moved = false;
+ bool m_fixed_joystick = false;
+ button_info *m_joystick_btn_off = nullptr;
+ button_info *m_joystick_btn_bg = nullptr;
+ button_info *m_joystick_btn_center = nullptr;
+
button_info m_buttons[after_last_element_id];
- /* gui button detection */
+ // gui button detection
touch_gui_button_id getButtonID(s32 x, s32 y);
- /* gui button by eventID */
+ // gui button by eventID
touch_gui_button_id getButtonID(int eventID);
- /* check if a button has changed */
+ // check if a button has changed
void handleChangedButton(const SEvent &event);
- /* initialize a button */
+ // initialize a button
void initButton(touch_gui_button_id id, rect<s32> button_rect,
std::wstring caption, bool immediate_release,
float repeat_delay = BUTTON_REPEAT_DELAY);
+ // initialize a joystick button
+ button_info *initJoystickButton(touch_gui_button_id id, rect<s32> button_rect,
+ int texture_id, bool visible = true);
+
struct id_status
{
int id;
@@ -224,28 +247,31 @@ private:
int Y;
};
- /* vector to store known ids and their initial touch positions*/
+ // vector to store known ids and their initial touch positions
std::vector<id_status> m_known_ids;
- /* handle a button event */
+ // handle a button event
void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action);
- /* handle pressed hud buttons */
+ // handle pressed hud buttons
bool isHUDButton(const SEvent &event);
- /* handle released hud buttons */
+ // handle released hud buttons
bool isReleaseHUDButton(int eventID);
- /* handle double taps */
+ // handle double taps
bool doubleTapDetection();
- /* handle release event */
+ // handle release event
void handleReleaseEvent(int evt_id);
- /* get size of regular gui control button */
+ // apply joystick status
+ void applyJoystickStatus();
+
+ // get size of regular gui control button
int getGuiButtonSize();
- /* doubleclick detection variables */
+ // doubleclick detection variables
struct key_event
{
unsigned int down_time;
@@ -253,16 +279,16 @@ private:
s32 y;
};
- /* array for saving last known position of a pointer */
+ // array for saving last known position of a pointer
v2s32 m_pointerpos[MAX_TOUCH_COUNT];
- /* array for doubletap detection */
+ // array for doubletap detection
key_event m_key_events[2];
- /* settings bar */
+ // settings bar
AutoHideButtonBar m_settingsbar;
- /* rare controls bar */
+ // rare controls bar
AutoHideButtonBar m_rarecontrolsbar;
};
extern TouchScreenGUI *g_touchscreengui;