Files
ozark/GTAV/src/menu/base/options/submenu_option.cpp
2022-11-13 19:41:26 +01:00

64 lines
3.0 KiB
C++

#include "submenu_option.h"
#include "menu/base/renderer.h"
#include "menu/base/util/input.h"
#include "menu/base/util/menu_input.h"
#include "menu/base/util/notify.h"
#include "menu/base/submenu_handler.h"
#include "rage/invoker/natives.h"
#include "util/va.h"
void submenu_option::render(int position) {
bool selected = menu::base::is_option_selected(position);
color_rgba color = selected ? global::ui::g_option_selected : global::ui::g_option;
color_rgba bar_color = global::ui::g_submenu_bar;
m_on_update(this, position);
menu::renderer::draw_text(m_name.get(), { global::ui::g_position.x + 0.004f + m_offset, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color);
if (!m_disable_icon) {
if (m_override.m_enabled) {
menu::renderer::draw_sprite_aligned(m_override.m_asset, { global::ui::g_position.x + m_override.m_offset.x - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + (position * global::ui::g_option_scale) + m_override.m_offset.y }, m_override.m_scale, 0.f, *m_override.m_color);
} else {
menu::renderer::draw_sprite_aligned({ "ozarktextures", "arrow.png" }, { global::ui::g_position.x + global::ui::g_submenu_arrow_position.x - (0.23f - global::ui::g_scale.x), global::ui::g_position.y + (position * global::ui::g_option_scale) + global::ui::g_submenu_arrow_position.y }, global::ui::g_submenu_arrow_scale, 0.f, bar_color);
}
}
if (m_side_text.m_enabled) {
menu::renderer::draw_text(m_side_text.m_text, { global::ui::g_position.x + 0.004f, global::ui::g_position.y + (position * global::ui::g_option_scale) + 0.004f }, menu::renderer::get_normalized_font_scale(global::ui::g_option_font, global::ui::g_option_height), global::ui::g_option_font, color, JUSTIFY_RIGHT, { 0.f, (1.0f - (1.0f - (global::ui::g_position.x + (0.315f / 2.f)) - global::ui::g_wrap)) - 0.005f });
}
}
void submenu_option::render_selected(int position, std::stack<std::string> submenu_name_stack) {
m_on_hover(this);
if (m_has_hotkey && m_requirement()) {
if (menu::input::is_just_released(true, VK_F12)) {
native::play_sound_frontend(-1, "ATM_WINDOW", "HUD_FRONTEND_DEFAULT_SOUNDSET", 0);
menu::input::push([this] {
menu::input::hotkey(m_name.get(), this);
});
}
}
if (m_requirement() && menu::input::is_option_pressed()) {
m_on_click();
m_on_click_this(this);
menu::submenu::handler::set_submenu(m_submenu);
}
}
void submenu_option::invoke_hotkey() {
if (!m_requirement()) return;
m_on_click();
if (!menu::base::is_open()) menu::base::set_open(true);
menu::submenu::handler::set_submenu(m_submenu);
static std::unordered_map<uint32_t, uint32_t> notifies;
if (notifies[native::get_hash_key(m_name.get_original().c_str())] > GetTickCount()) return;
notifies[native::get_hash_key(m_name.get_original().c_str())] = GetTickCount() + 5000;
menu::notify::stacked(TRANSLATE(t_hotkey), util::va::va("%s %s", TRANSLATE(t_used_hotkey_for), m_name.get().c_str()));
}