Lua: can make new tabs from lua scripts, doc generation for available tabs to use (#1593)
* lua api: add globals.get_uint and globals.set_uint * lua doc: remove duplicate function check as we can overload so it doesn't make sense * lua doc gen: add support for parsing the tabs enum * gui: custom lua tabs don't have a `func` rendering function but can still have elements to draw * lua doc: update generated doc * chore: code style * chore: minor spelling mistake * chore: code style * gui_service: add runtime removal of tabs * refactor: make it so that it's less likely defining tabs and their translation key in a wrong way. * lua api: ability to add custom tabs to the gui from lua
This commit is contained in:
@ -75,4 +75,26 @@ namespace big
|
||||
{
|
||||
return nav;
|
||||
}
|
||||
|
||||
void gui_service::remove_from_nav_internal(std::map<big::tabs, big::navigation_struct>& nav, big::tabs existing_tab_id)
|
||||
{
|
||||
std::erase_if(nav, [&](auto& nav_item) {
|
||||
if (nav_item.first == existing_tab_id)
|
||||
{
|
||||
set_selected(tabs::NONE);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
remove_from_nav_internal(nav_item.second.sub_nav, existing_tab_id);
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
void gui_service::remove_from_nav(tabs existing_tab_id)
|
||||
{
|
||||
remove_from_nav_internal(get_navigation(), existing_tab_id);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
namespace big
|
||||
{
|
||||
// Lua API: Tabs
|
||||
enum class tabs
|
||||
{
|
||||
NONE,
|
||||
@ -51,7 +52,10 @@ namespace big
|
||||
TRANSLATION_SETTINGS,
|
||||
DEBUG,
|
||||
|
||||
PLAYER
|
||||
PLAYER,
|
||||
|
||||
// Added at runtime by things like lua scripts.
|
||||
RUNTIME_CUSTOM
|
||||
};
|
||||
|
||||
struct navigation_struct
|
||||
@ -62,92 +66,88 @@ namespace big
|
||||
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 = {
|
||||
{
|
||||
tabs::SELF,
|
||||
{
|
||||
"GUI_TAB_SELF",
|
||||
TAB_DECL(SELF),
|
||||
view::self,
|
||||
{
|
||||
{tabs::WEAPONS, {"GUI_TAB_WEAPONS", view::weapons}},
|
||||
{tabs::MOBILE, {"GUI_TAB_MOBILE", view::mobile}},
|
||||
{tabs::TELEPORT, {"GUI_TAB_TELEPORT", view::teleport}},
|
||||
{tabs::OUTFIT_EDITOR, {"GUI_TAB_OUTFIT_EDITOR", view::outfit_editor}},
|
||||
{tabs::OUTFIT_SLOTS, {"GUI_TAB_OUTFIT_SLOTS", view::outfit_slots}},
|
||||
{TAB_DECL(WEAPONS), view::weapons}},
|
||||
{TAB_DECL(MOBILE), view::mobile}},
|
||||
{TAB_DECL(TELEPORT), view::teleport}},
|
||||
{TAB_DECL(OUTFIT_EDITOR), view::outfit_editor}},
|
||||
{TAB_DECL(OUTFIT_SLOTS), view::outfit_slots}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
tabs::VEHICLE,
|
||||
{
|
||||
"GUI_TAB_VEHICLE",
|
||||
TAB_DECL(VEHICLE),
|
||||
view::vehicle,
|
||||
{
|
||||
{
|
||||
tabs::HANDLING,
|
||||
{
|
||||
"GUI_TAB_HANDLING",
|
||||
view::handling_current_profile,
|
||||
TAB_DECL(HANDLING),
|
||||
view::handling_current_profile,
|
||||
{
|
||||
{tabs::HANDLING_CURRENT_PROFILE, {"GUI_TAB_HANDLING_CURRENT_PROFILE", view::handling_current_profile}},
|
||||
{tabs::HANDLING_SAVED_PROFILE, {"GUI_TAB_HANDLING_SAVED_PROFILES", view::handling_saved_profiles}},
|
||||
{TAB_DECL(HANDLING_CURRENT_PROFILE), view::handling_current_profile}},
|
||||
{TAB_DECL(HANDLING_SAVED_PROFILE), view::handling_saved_profiles}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{tabs::LSC, {"GUI_TAB_LSC", view::lsc}},
|
||||
{tabs::SPAWN_VEHICLE, {"GUI_TAB_SPAWN_VEHICLE", view::spawn_vehicle}},
|
||||
{tabs::FUN_VEHICLE, {"GUI_TAB_VEHICLE_FUN_FEATURES", view::fun_vehicle}},
|
||||
{TAB_DECL(LSC), view::lsc}},
|
||||
{TAB_DECL(SPAWN_VEHICLE), view::spawn_vehicle}},
|
||||
{TAB_DECL(FUN_VEHICLE), view::fun_vehicle}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
tabs::WORLD,
|
||||
{
|
||||
"GUI_TAB_WORLD",
|
||||
TAB_DECL(WORLD),
|
||||
view::world,
|
||||
{
|
||||
{tabs::SPAWN_PED, {"GUI_TAB_SPAWN_PED", view::spawn_ped}},
|
||||
{tabs::SQUAD_SPAWNER, {"Squad spawner", view::squad_spawner}},
|
||||
{tabs::CREATOR, {"GUI_TAB_CREATOR", view::creator}},
|
||||
{tabs::TRAIN, {"GUI_TAB_TRAIN", view::train}},
|
||||
{tabs::BLACKHOLE, {"GUI_TAB_BLACKHOLE", view::blackhole}},
|
||||
{tabs::MODEL_SWAPPER, {"GUI_TAB_MODEL_SWAPPER", view::model_swapper}},
|
||||
{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}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
tabs::NETWORK,
|
||||
{
|
||||
"GUI_TAB_NETWORK",
|
||||
TAB_DECL(NETWORK),
|
||||
view::network,
|
||||
{
|
||||
{tabs::SPOOFING, {"GUI_TAB_SPOOFING", view::spoofing}},
|
||||
{tabs::MISSIONS, {"GUI_TAB_MISSIONS", view::missions}},
|
||||
{tabs::PLAYER_DATABASE, {"GUI_TAB_PLAYER_DB", view::player_database}},
|
||||
{tabs::SESSION_BROWSER, {"GUI_TAB_SESSION_BROWSER", view::session_browser}},
|
||||
{tabs::STAT_EDITOR, {"GUI_TAB_STAT_EDITOR", view::stat_editor}},
|
||||
{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}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
tabs::SETTINGS,
|
||||
{
|
||||
"GUI_TAB_SETTINGS",
|
||||
TAB_DECL(SETTINGS),
|
||||
view::settings,
|
||||
{
|
||||
{tabs::LUA_SCRIPTS, {"GUI_TAB_LUA_SCRIPTS", view::lua_scripts}},
|
||||
{tabs::ESP_SETTINGS, {"GUI_TAB_ESP", view::esp_settings}},
|
||||
{tabs::GTA_CACHE_SETTINGS, {"GTA Cache", view::gta_cache}},
|
||||
{tabs::GUI_SETTINGS, {"GUI_TAB_GUI", view::gui_settings}},
|
||||
{tabs::HOTKEY_SETTINGS, {"GUI_TAB_HOTKEYS", view::hotkey_settings}},
|
||||
{tabs::REACTION_SETTINGS, {"GUI_TAB_REACTIONS", view::reaction_settings}},
|
||||
{tabs::PROTECTION_SETTINGS, {"GUI_TAB_PROTECTION", view::protection_settings}},
|
||||
{tabs::DEBUG, {"GUI_TAB_DEBUG", nullptr}},
|
||||
{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}},
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -156,6 +156,9 @@ namespace big
|
||||
{"", 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();
|
||||
@ -171,6 +174,7 @@ namespace big
|
||||
void increment_nav_size();
|
||||
void reset_nav_size();
|
||||
std::map<tabs, navigation_struct>& get_navigation();
|
||||
void remove_from_nav(tabs existing_tab_id);
|
||||
};
|
||||
|
||||
inline gui_service* g_gui_service{};
|
||||
|
Reference in New Issue
Block a user