diff options
Diffstat (limited to 'src/gui/touchscreengui.h')
-rw-r--r-- | src/gui/touchscreengui.h | 90 |
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; |