refactor: Renderer (#694)
* Simplified SwapCHain, Device and DeviceContext pointers * Added DX and WndProc callback registration * Cleaned up GUI code * Optimised Mouse Toggle
This commit is contained in:
160
src/gui.cpp
160
src/gui.cpp
@ -3,20 +3,60 @@
|
||||
#include "gui.hpp"
|
||||
#include "natives.hpp"
|
||||
#include "script.hpp"
|
||||
#include "renderer.hpp"
|
||||
|
||||
#include <imgui.h>
|
||||
#include "widgets/imgui_hotkey.hpp"
|
||||
|
||||
#include "views/view.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
gui::gui() :
|
||||
m_is_open(false)
|
||||
{
|
||||
g_renderer->add_dx_callback(view::gta_data, -1); // -1 highest priority of drawing
|
||||
g_renderer->add_dx_callback(view::notifications, -2); // second highest priority
|
||||
g_renderer->add_dx_callback([this]
|
||||
{
|
||||
dx_on_tick();
|
||||
}, -3); // 3rd highest priority
|
||||
|
||||
g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
wndproc(hwnd, msg, wparam, lparam);
|
||||
});
|
||||
|
||||
g_renderer->add_dx_callback(esp::draw, 2); // TODO: move to ESP service
|
||||
g_renderer->add_dx_callback(view::context_menu, 1);
|
||||
|
||||
dx_init();
|
||||
|
||||
g_gui = this;
|
||||
}
|
||||
|
||||
gui::~gui()
|
||||
{
|
||||
g_gui = nullptr;
|
||||
}
|
||||
|
||||
bool gui::is_open()
|
||||
{
|
||||
return m_is_open;
|
||||
}
|
||||
|
||||
void gui::toggle(bool toggle)
|
||||
{
|
||||
m_is_open = toggle;
|
||||
|
||||
toggle_mouse();
|
||||
}
|
||||
|
||||
void gui::dx_init()
|
||||
{
|
||||
static ImVec4 bgColor = ImVec4(0.09f, 0.094f, 0.129f, .9f);
|
||||
static ImVec4 primary = ImVec4(0.172f, 0.380f, 0.909f, 1.f);
|
||||
static ImVec4 secondary = ImVec4(0.443f, 0.654f, 0.819f, 1.f);
|
||||
static ImVec4 whiteBroken = ImVec4(0.792f, 0.784f, 0.827f, 1.f);
|
||||
static auto bgColor = ImVec4(0.09f, 0.094f, 0.129f, .9f);
|
||||
static auto primary = ImVec4(0.172f, 0.380f, 0.909f, 1.f);
|
||||
static auto secondary = ImVec4(0.443f, 0.654f, 0.819f, 1.f);
|
||||
static auto whiteBroken = ImVec4(0.792f, 0.784f, 0.827f, 1.f);
|
||||
|
||||
auto& style = ImGui::GetStyle();
|
||||
style.WindowPadding = ImVec2(15, 15);
|
||||
@ -73,61 +113,89 @@ namespace big
|
||||
|
||||
void gui::dx_on_tick()
|
||||
{
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGui::ColorConvertU32ToFloat4(g->window.color));
|
||||
view::root();
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
|
||||
void gui::always_draw()
|
||||
{
|
||||
view::always();
|
||||
if (m_is_open)
|
||||
{
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGui::ColorConvertU32ToFloat4(g->window.color));
|
||||
view::root();
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
}
|
||||
|
||||
void gui::script_on_tick()
|
||||
{
|
||||
TRY_CLAUSE
|
||||
if (g_gui->m_is_open)
|
||||
{
|
||||
if (g_gui.m_opened)
|
||||
{
|
||||
for (uint8_t i = 0; i <= 6; i++)
|
||||
PAD::DISABLE_CONTROL_ACTION(2, i, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 106, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 329, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 330, true);
|
||||
for (uint8_t i = 0; i <= 6; i++)
|
||||
PAD::DISABLE_CONTROL_ACTION(2, i, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 106, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 329, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 330, true);
|
||||
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 14, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 15, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 16, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 17, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 24, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 69, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 70, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 84, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 85, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 99, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 92, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 100, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 114, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 115, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 121, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 142, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 241, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 261, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 257, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 262, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 331, true);
|
||||
}
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 14, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 15, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 16, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 17, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 24, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 69, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 70, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 84, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 85, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 99, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 92, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 100, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 114, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 115, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 121, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 142, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 241, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 261, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 257, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 262, true);
|
||||
PAD::DISABLE_CONTROL_ACTION(2, 331, true);
|
||||
}
|
||||
EXCEPT_CLAUSE
|
||||
}
|
||||
|
||||
void gui::script_func()
|
||||
{
|
||||
g_notification_service->push("Welcome", std::format("Loaded YimMenu. Press {} to open", ImGui::key_names[g->settings.hotkeys.menu_toggle]));
|
||||
while (true)
|
||||
{
|
||||
g_gui.script_on_tick();
|
||||
g_gui->script_on_tick();
|
||||
script::get_current()->yield();
|
||||
}
|
||||
}
|
||||
|
||||
void gui::wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||
{
|
||||
if (msg == WM_KEYUP && wparam == g->settings.hotkeys.menu_toggle)
|
||||
{
|
||||
//Persist and restore the cursor position between menu instances.
|
||||
static POINT cursor_coords{};
|
||||
if (g_gui->m_is_open)
|
||||
{
|
||||
GetCursorPos(&cursor_coords);
|
||||
}
|
||||
else if (cursor_coords.x + cursor_coords.y != 0)
|
||||
{
|
||||
SetCursorPos(cursor_coords.x, cursor_coords.y);
|
||||
}
|
||||
|
||||
toggle(g->settings.hotkeys.editing_menu_toggle || !m_is_open);
|
||||
if (g->settings.hotkeys.editing_menu_toggle)
|
||||
g->settings.hotkeys.editing_menu_toggle = false;
|
||||
}
|
||||
}
|
||||
|
||||
void gui::toggle_mouse()
|
||||
{
|
||||
if (m_is_open)
|
||||
{
|
||||
ImGui::GetIO().MouseDrawCursor = true;
|
||||
ImGui::GetIO().ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::GetIO().MouseDrawCursor = false;
|
||||
ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NoMouse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user