From f725f7834fffdeebfa5f2c8f6188545f05aeabdd Mon Sep 17 00:00:00 2001 From: Kelsi Date: Thu, 5 Feb 2026 16:01:38 -0800 Subject: [PATCH] Add escape menu with logout/quit/settings --- include/ui/game_screen.hpp | 3 +++ src/ui/game_screen.cpp | 50 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/include/ui/game_screen.hpp b/include/ui/game_screen.hpp index 35ca1b8e..352f1956 100644 --- a/include/ui/game_screen.hpp +++ b/include/ui/game_screen.hpp @@ -53,6 +53,8 @@ private: bool showPlayerInfo = false; bool refocusChatInput = false; bool showTeleporter = false; + bool showEscapeMenu = false; + bool showEscapeSettingsNotice = false; /** * Render player info window @@ -121,6 +123,7 @@ private: void renderGossipWindow(game::GameHandler& gameHandler); void renderVendorWindow(game::GameHandler& gameHandler); void renderTeleporterPanel(); + void renderEscapeMenu(); /** * Inventory screen diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index faccb89a..a0cd7dba 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -81,6 +81,7 @@ void GameScreen::render(game::GameHandler& gameHandler) { renderLootWindow(gameHandler); renderGossipWindow(gameHandler); renderVendorWindow(gameHandler); + renderEscapeMenu(); // World map (M key toggle handled inside) renderWorldMap(gameHandler); @@ -351,7 +352,10 @@ void GameScreen::processTargetInput(game::GameHandler& gameHandler) { } if (input.isKeyJustPressed(SDL_SCANCODE_ESCAPE)) { - if (showTeleporter) { + if (showEscapeMenu) { + showEscapeMenu = false; + showEscapeSettingsNotice = false; + } else if (showTeleporter) { showTeleporter = false; } else if (gameHandler.isCasting()) { gameHandler.cancelCast(); @@ -360,7 +364,7 @@ void GameScreen::processTargetInput(game::GameHandler& gameHandler) { } else if (gameHandler.isGossipWindowOpen()) { gameHandler.closeGossip(); } else { - gameHandler.clearTarget(); + showEscapeMenu = true; } } @@ -1722,4 +1726,46 @@ void GameScreen::renderTeleporterPanel() { ImGui::PopStyleVar(); } +// ============================================================ +// Escape Menu +// ============================================================ + +void GameScreen::renderEscapeMenu() { + if (!showEscapeMenu) return; + + ImGuiIO& io = ImGui::GetIO(); + float screenW = io.DisplaySize.x; + float screenH = io.DisplaySize.y; + ImVec2 size(260.0f, 220.0f); + ImVec2 pos((screenW - size.x) * 0.5f, (screenH - size.y) * 0.5f); + + ImGui::SetNextWindowPos(pos, ImGuiCond_Always); + ImGui::SetNextWindowSize(size, ImGuiCond_Always); + ImGuiWindowFlags flags = ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar; + + if (ImGui::Begin("##EscapeMenu", nullptr, flags)) { + ImGui::Text("Game Menu"); + ImGui::Separator(); + + if (ImGui::Button("Logout", ImVec2(-1, 0))) { + core::Application::getInstance().logoutToLogin(); + showEscapeMenu = false; + showEscapeSettingsNotice = false; + } + if (ImGui::Button("Quit", ImVec2(-1, 0))) { + core::Application::getInstance().shutdown(); + } + if (ImGui::Button("Settings", ImVec2(-1, 0))) { + showEscapeSettingsNotice = true; + } + + if (showEscapeSettingsNotice) { + ImGui::Spacing(); + ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.2f, 1.0f), "Settings not implemented yet."); + } + } + ImGui::End(); +} + }} // namespace wowee::ui