Files
TmpMenu/src/services/gui/gui_service.hpp

185 lines
4.4 KiB
C++
Raw Normal View History

#pragma once
#include "views/view.hpp"
namespace big
{
// Lua API: Tabs
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,
OUTFIT_EDITOR,
OUTFIT_SLOTS,
2022-08-10 08:42:34 +08:00
VEHICLE,
HANDLING,
HANDLING_SEARCH,
HANDLING_SAVED_PROFILE,
HANDLING_MY_PROFILES,
HANDLING_CURRENT_PROFILE,
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,
CREATOR,
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,
MISSIONS,
SPOOFING,
PLAYER_DATABASE,
2022-11-24 21:49:05 +00:00
SESSION_BROWSER,
STAT_EDITOR,
2022-08-10 08:42:34 +08:00
SETTINGS,
LUA_SCRIPTS,
2023-06-14 21:29:25 +00:00
CONTEXT_MENU_SETTINGS,
2022-08-10 08:42:34 +08:00
ESP_SETTINGS,
GTA_CACHE_SETTINGS,
2022-08-10 08:42:34 +08:00
GUI_SETTINGS,
HOTKEY_SETTINGS,
REACTION_SETTINGS,
2022-08-10 08:42:34 +08:00
PROTECTION_SETTINGS,
TRANSLATION_SETTINGS,
2022-08-10 08:42:34 +08:00
DEBUG,
PLAYER,
// Added at runtime by things like lua scripts.
RUNTIME_CUSTOM
};
struct navigation_struct
{
2023-06-25 10:38:53 +02:00
char name[48] = "";
std::function<void()> func = nullptr;
2022-08-10 08:42:34 +08:00
std::map<tabs, navigation_struct> sub_nav{};
rage::joaat_t hash = rage::joaat(name);
};
// 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)
class gui_service final
{
std::vector<tabs> current_tab{};
bool switched_view = true;
// clang-format off
std::map<tabs, navigation_struct> nav = {
{
TAB_DECL(SELF),
view::self,
{
{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}},
}}},
{TAB_DECL(OUTFIT_EDITOR), view::outfit_editor}},
{TAB_DECL(OUTFIT_SLOTS), view::outfit_slots}},
},
},
},
{
TAB_DECL(VEHICLE),
view::vehicle,
{
{
TAB_DECL(HANDLING),
view::handling_current_profile,
{
{TAB_DECL(HANDLING_CURRENT_PROFILE), view::handling_current_profile}},
{TAB_DECL(HANDLING_SAVED_PROFILE), view::handling_saved_profiles}},
},
},
},
{TAB_DECL(LSC), view::lsc}},
{TAB_DECL(SPAWN_VEHICLE), view::spawn_vehicle}},
{TAB_DECL(FUN_VEHICLE), view::fun_vehicle}},
},
},
},
{
TAB_DECL(WORLD),
view::world,
{
{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}},
},
},
},
{
TAB_DECL(NETWORK),
view::network,
{
{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}},
},
},
},
{
TAB_DECL(SETTINGS),
view::settings,
{
{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}},
},
},
},
{
tabs::PLAYER,
{"", view::view_player},
},
};
// clang-format on
void remove_from_nav_internal(std::map<big::tabs, big::navigation_struct>& nav, big::tabs existing_tab_id);
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();
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();
void remove_from_nav(tabs existing_tab_id);
};
inline gui_service* g_gui_service{};
2023-07-09 23:03:05 +02:00
}