355 changes: 265 additions & 90 deletions src/gui/touchscreengui.cpp

Large diffs are not rendered by default.

90 changes: 58 additions & 32 deletions src/gui/touchscreengui.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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
{
Expand All @@ -91,26 +97,26 @@ class AutoHideButtonBar

~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:
Expand All @@ -124,12 +130,12 @@ class AutoHideButtonBar
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;
Expand Down Expand Up @@ -179,14 +185,20 @@ class TouchScreenGUI
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.
Expand All @@ -201,68 +213,82 @@ class TouchScreenGUI
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;
int X;
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;
s32 x;
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;
Binary file removed textures/base/pack/down_arrow.png
Binary file not shown.
Binary file added textures/base/pack/joystick_bg.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added textures/base/pack/joystick_center.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added textures/base/pack/joystick_off.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed textures/base/pack/left_arrow.png
Binary file not shown.
Binary file removed textures/base/pack/right_arrow.png
Binary file not shown.
Binary file removed textures/base/pack/up_arrow.png
Binary file not shown.