2022-05-04 19:16:40 +02:00
|
|
|
#pragma once
|
|
|
|
#include "views/view.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
// Lua API: Tabs
|
2023-03-01 21:27:15 +00:00
|
|
|
enum class tabs
|
|
|
|
{
|
2022-08-10 08:42:34 +08:00
|
|
|
NONE,
|
|
|
|
|
|
|
|
SELF,
|
|
|
|
WEAPONS,
|
|
|
|
TELEPORT,
|
2023-07-09 23:03:05 +02:00
|
|
|
CUSTOM_TELEPORT,
|
2022-08-10 08:42:34 +08:00
|
|
|
MOBILE,
|
2023-04-07 23:08:34 +02:00
|
|
|
OUTFIT_EDITOR,
|
|
|
|
OUTFIT_SLOTS,
|
2022-08-10 08:42:34 +08:00
|
|
|
|
|
|
|
VEHICLE,
|
|
|
|
HANDLING,
|
2022-05-04 19:16:40 +02:00
|
|
|
HANDLING_SEARCH,
|
|
|
|
HANDLING_SAVED_PROFILE,
|
|
|
|
HANDLING_MY_PROFILES,
|
|
|
|
HANDLING_CURRENT_PROFILE,
|
2022-06-26 00:14:00 +02:00
|
|
|
LSC,
|
2022-08-10 08:42:34 +08:00
|
|
|
SPAWN_VEHICLE,
|
|
|
|
FUN_VEHICLE,
|
|
|
|
|
|
|
|
WORLD,
|
|
|
|
SPAWN_PED,
|
2023-04-23 17:23:00 +02:00
|
|
|
SQUAD_SPAWNER,
|
2022-12-17 14:47:01 +00:00
|
|
|
CREATOR,
|
2023-01-06 23:25:16 +00:00
|
|
|
TRAIN,
|
2023-02-08 22:50:26 +01:00
|
|
|
BLACKHOLE,
|
2023-02-21 06:20:40 +08:00
|
|
|
MODEL_SWAPPER,
|
2022-08-10 08:42:34 +08:00
|
|
|
|
|
|
|
NETWORK,
|
2023-01-22 21:57:32 +00:00
|
|
|
MISSIONS,
|
2022-05-04 19:16:40 +02:00
|
|
|
SPOOFING,
|
2022-11-19 01:49:36 +00:00
|
|
|
PLAYER_DATABASE,
|
2022-11-24 21:49:05 +00:00
|
|
|
SESSION_BROWSER,
|
2023-04-07 23:08:34 +02:00
|
|
|
STAT_EDITOR,
|
2022-08-10 08:42:34 +08:00
|
|
|
|
|
|
|
SETTINGS,
|
2023-06-06 07:40:40 +00:00
|
|
|
LUA_SCRIPTS,
|
2023-06-14 21:29:25 +00:00
|
|
|
CONTEXT_MENU_SETTINGS,
|
2022-08-10 08:42:34 +08:00
|
|
|
ESP_SETTINGS,
|
2023-04-07 23:08:34 +02:00
|
|
|
GTA_CACHE_SETTINGS,
|
2022-08-10 08:42:34 +08:00
|
|
|
GUI_SETTINGS,
|
2023-01-09 22:07:48 +01:00
|
|
|
HOTKEY_SETTINGS,
|
2023-01-03 16:48:32 +00:00
|
|
|
REACTION_SETTINGS,
|
2022-08-10 08:42:34 +08:00
|
|
|
PROTECTION_SETTINGS,
|
2023-02-01 19:46:33 +01:00
|
|
|
TRANSLATION_SETTINGS,
|
2022-08-10 08:42:34 +08:00
|
|
|
DEBUG,
|
|
|
|
|
2023-07-05 00:30:57 +02:00
|
|
|
PLAYER,
|
|
|
|
|
|
|
|
// Added at runtime by things like lua scripts.
|
|
|
|
RUNTIME_CUSTOM
|
2022-05-04 19:16:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct navigation_struct
|
|
|
|
{
|
2023-06-25 10:38:53 +02:00
|
|
|
char name[48] = "";
|
2022-05-04 19:16:40 +02:00
|
|
|
std::function<void()> func = nullptr;
|
2022-08-10 08:42:34 +08:00
|
|
|
std::map<tabs, navigation_struct> sub_nav{};
|
2023-06-06 07:40:40 +00:00
|
|
|
rage::joaat_t hash = rage::joaat(name);
|
2022-05-04 19:16:40 +02:00
|
|
|
};
|
|
|
|
|
2023-07-05 00:30:57 +02:00
|
|
|
// Used for constructing translation key for tabs
|
|
|
|
#define TAB_DECL_INTERNAL(prefix, tab) \
|
|
|
|
tabs::tab, \
|
|
|
|
{ \
|
|
|
|
#prefix #tab
|
|
|
|
#define TAB_DECL(tab) TAB_DECL_INTERNAL(GUI_TAB_, tab)
|
|
|
|
|
2022-05-04 19:16:40 +02:00
|
|
|
class gui_service final
|
|
|
|
{
|
|
|
|
std::vector<tabs> current_tab{};
|
|
|
|
bool switched_view = true;
|
|
|
|
|
2023-07-05 00:30:57 +02:00
|
|
|
// clang-format off
|
2023-03-04 12:13:13 +01:00
|
|
|
std::map<tabs, navigation_struct> nav = {
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(SELF),
|
2023-03-04 12:13:13 +01:00
|
|
|
view::self,
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(WEAPONS), view::weapons}},
|
|
|
|
{TAB_DECL(MOBILE), view::mobile}},
|
2023-07-09 23:03:05 +02:00
|
|
|
{TAB_DECL(TELEPORT), view::teleport,
|
|
|
|
{
|
|
|
|
{TAB_DECL(CUSTOM_TELEPORT), view::custom_teleport}},
|
|
|
|
}}},
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(OUTFIT_EDITOR), view::outfit_editor}},
|
|
|
|
{TAB_DECL(OUTFIT_SLOTS), view::outfit_slots}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(VEHICLE),
|
2023-03-01 21:27:15 +00:00
|
|
|
view::vehicle,
|
|
|
|
{
|
2023-03-04 12:13:13 +01:00
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(HANDLING),
|
|
|
|
view::handling_current_profile,
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(HANDLING_CURRENT_PROFILE), view::handling_current_profile}},
|
|
|
|
{TAB_DECL(HANDLING_SAVED_PROFILE), view::handling_saved_profiles}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(LSC), view::lsc}},
|
|
|
|
{TAB_DECL(SPAWN_VEHICLE), view::spawn_vehicle}},
|
|
|
|
{TAB_DECL(FUN_VEHICLE), view::fun_vehicle}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(WORLD),
|
2023-04-07 23:08:34 +02:00
|
|
|
view::world,
|
2023-03-04 12:13:13 +01:00
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(SPAWN_PED), view::spawn_ped}},
|
|
|
|
{TAB_DECL(SQUAD_SPAWNER), view::squad_spawner}},
|
|
|
|
{TAB_DECL(CREATOR), view::creator}},
|
|
|
|
{TAB_DECL(TRAIN), view::train}},
|
|
|
|
{TAB_DECL(BLACKHOLE), view::blackhole}},
|
|
|
|
{TAB_DECL(MODEL_SWAPPER), view::model_swapper}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(NETWORK),
|
2023-06-23 06:43:44 +00:00
|
|
|
view::network,
|
2023-03-01 21:27:15 +00:00
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(SPOOFING), view::spoofing}},
|
|
|
|
{TAB_DECL(MISSIONS), view::missions}},
|
|
|
|
{TAB_DECL(PLAYER_DATABASE), view::player_database}},
|
|
|
|
{TAB_DECL(SESSION_BROWSER), view::session_browser}},
|
|
|
|
{TAB_DECL(STAT_EDITOR), view::stat_editor}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
TAB_DECL(SETTINGS),
|
2023-03-01 21:27:15 +00:00
|
|
|
view::settings,
|
|
|
|
{
|
2023-07-05 00:30:57 +02:00
|
|
|
{TAB_DECL(LUA_SCRIPTS), view::lua_scripts}},
|
|
|
|
{TAB_DECL(ESP_SETTINGS), view::esp_settings}},
|
|
|
|
{TAB_DECL(GTA_CACHE_SETTINGS), view::gta_cache}},
|
|
|
|
{TAB_DECL(GUI_SETTINGS), view::gui_settings}},
|
|
|
|
{TAB_DECL(HOTKEY_SETTINGS), view::hotkey_settings}},
|
|
|
|
{TAB_DECL(REACTION_SETTINGS), view::reaction_settings}},
|
|
|
|
{TAB_DECL(PROTECTION_SETTINGS), view::protection_settings}},
|
|
|
|
{TAB_DECL(DEBUG), nullptr}},
|
2023-03-04 12:13:13 +01:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
tabs::PLAYER,
|
|
|
|
{"", view::view_player},
|
|
|
|
},
|
|
|
|
};
|
2023-07-05 00:30:57 +02:00
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
void remove_from_nav_internal(std::map<big::tabs, big::navigation_struct>& nav, big::tabs existing_tab_id);
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2022-05-04 19:16:40 +02:00
|
|
|
public:
|
|
|
|
gui_service();
|
|
|
|
virtual ~gui_service();
|
|
|
|
|
|
|
|
int nav_ctr = 0;
|
|
|
|
|
|
|
|
navigation_struct* get_selected();
|
2022-08-10 08:42:34 +08:00
|
|
|
std::vector<tabs>& get_selected_tab();
|
2022-05-04 19:16:40 +02:00
|
|
|
bool has_switched_view();
|
|
|
|
void set_selected(tabs);
|
|
|
|
void set_nav_size(int);
|
|
|
|
void increment_nav_size();
|
|
|
|
void reset_nav_size();
|
2022-08-10 08:42:34 +08:00
|
|
|
std::map<tabs, navigation_struct>& get_navigation();
|
2023-07-05 00:30:57 +02:00
|
|
|
void remove_from_nav(tabs existing_tab_id);
|
2022-05-04 19:16:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
inline gui_service* g_gui_service{};
|
2023-07-09 23:03:05 +02:00
|
|
|
}
|