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;