From c343a7dfafb0b2e5e063ec83fd87cd05d5387b13 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Tue, 4 Jul 2023 04:42:16 +1000 Subject: [PATCH] Add toggle for debug HUD --- .../frontend/StarClientCommandProcessor.cpp | 18 ++++- .../frontend/StarClientCommandProcessor.hpp | 4 +- source/frontend/StarMainInterface.cpp | 80 ++++++++++--------- 3 files changed, 58 insertions(+), 44 deletions(-) diff --git a/source/frontend/StarClientCommandProcessor.cpp b/source/frontend/StarClientCommandProcessor.cpp index b6ab53c..0f78ea0 100644 --- a/source/frontend/StarClientCommandProcessor.cpp +++ b/source/frontend/StarClientCommandProcessor.cpp @@ -21,7 +21,7 @@ ClientCommandProcessor::ClientCommandProcessor(UniverseClientPtr universeClient, {"reload", bind(&ClientCommandProcessor::reload, this)}, {"whoami", bind(&ClientCommandProcessor::whoami, this)}, {"gravity", bind(&ClientCommandProcessor::gravity, this)}, - {"debug", bind(&ClientCommandProcessor::debug, this)}, + {"debug", bind(&ClientCommandProcessor::debug, this, _1)}, {"boxes", bind(&ClientCommandProcessor::boxes, this)}, {"fullbright", bind(&ClientCommandProcessor::fullbright, this)}, {"asyncLighting", bind(&ClientCommandProcessor::asyncLighting, this)}, @@ -105,6 +105,10 @@ bool ClientCommandProcessor::debugDisplayEnabled() const { return m_debugDisplayEnabled; } +bool ClientCommandProcessor::debugHudEnabled() const { + return m_debugHudEnabled; +} + bool ClientCommandProcessor::fixedCameraEnabled() const { return m_fixedCameraEnabled; } @@ -126,12 +130,18 @@ String ClientCommandProcessor::gravity() { return strf("{}", m_universeClient->worldClient()->gravity(m_universeClient->mainPlayer()->position())); } -String ClientCommandProcessor::debug() { +String ClientCommandProcessor::debug(StringList const& arguments) { if (!adminCommandAllowed()) return "You must be an admin to use this command."; - m_debugDisplayEnabled = !m_debugDisplayEnabled; - return strf("Debug display {}", m_debugDisplayEnabled ? "enabled" : "disabled"); + if (!arguments.empty() && arguments.at(0).equalsIgnoreCase("hud")) { + m_debugHudEnabled = !m_debugHudEnabled; + return strf("Debug HUD {}", m_debugHudEnabled ? "enabled" : "disabled"); + } + else { + m_debugDisplayEnabled = !m_debugDisplayEnabled; + return strf("Debug display {}", m_debugDisplayEnabled ? "enabled" : "disabled"); + } } String ClientCommandProcessor::boxes() { diff --git a/source/frontend/StarClientCommandProcessor.hpp b/source/frontend/StarClientCommandProcessor.hpp index 3093450..41809ed 100644 --- a/source/frontend/StarClientCommandProcessor.hpp +++ b/source/frontend/StarClientCommandProcessor.hpp @@ -19,6 +19,7 @@ public: StringList handleCommand(String const& commandLine); bool debugDisplayEnabled() const; + bool debugHudEnabled() const; bool fixedCameraEnabled() const; private: @@ -28,7 +29,7 @@ private: String reload(); String whoami(); String gravity(); - String debug(); + String debug(StringList const& arguments); String boxes(); String fullbright(); String asyncLighting(); @@ -66,6 +67,7 @@ private: ShellParser m_parser; LuaBaseComponent m_scriptComponent; bool m_debugDisplayEnabled = false; + bool m_debugHudEnabled = true; bool m_fixedCameraEnabled = false; }; diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index fb28e84..0475663 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -1257,51 +1257,53 @@ void MainInterface::renderDebug() { LogMap::clear(); return; } + + if (m_clientCommandProcessor->debugHudEnabled()) { + auto assets = Root::singleton().assets(); + m_guiContext->setFontSize(m_config->debugFontSize); + m_guiContext->setFont(m_config->debugFont); + m_guiContext->setLineSpacing(0.5f); + m_guiContext->setFontProcessingDirectives(m_config->debugFontDirectives); + m_guiContext->setFontColor(Color::White.toRgba()); + m_guiContext->setFontMode(FontMode::Normal); - auto assets = Root::singleton().assets(); - m_guiContext->setFontSize(m_config->debugFontSize); - m_guiContext->setFont(m_config->debugFont); - m_guiContext->setLineSpacing(0.5f); - m_guiContext->setFontProcessingDirectives(m_config->debugFontDirectives); - m_guiContext->setFontColor(Color::White.toRgba()); - m_guiContext->setFontMode(FontMode::Normal); + bool clearMap = m_debugMapClearTimer.wrapTick(); + auto logMapValues = LogMap::getValues(); + if (clearMap) + LogMap::clear(); - bool clearMap = m_debugMapClearTimer.wrapTick(); - auto logMapValues = LogMap::getValues(); - if (clearMap) - LogMap::clear(); + List formatted; + formatted.reserve(logMapValues.size()); - List formatted; - formatted.reserve(logMapValues.size()); + int counter = 0; + for (auto const& pair : logMapValues) { + TextPositioning positioning = { Vec2F(m_config->debugOffset[0], windowHeight() - m_config->debugOffset[1] - m_config->fontSize * interfaceScale() * counter++) }; + String& text = formatted.emplace_back(strf("{}^lightgray;:^green,set; {}", pair.first, pair.second)); + m_debugTextRect.combine(m_guiContext->determineTextSize(text, positioning).padded(m_config->debugBackgroundPad)); + } - int counter = 0; - for (auto const& pair : logMapValues) { - TextPositioning positioning = {Vec2F(m_config->debugOffset[0], windowHeight() - m_config->debugOffset[1] - m_config->fontSize * interfaceScale() * counter++)}; - String& text = formatted.emplace_back(strf("{}^lightgray;:^green,set; {}", pair.first, pair.second)); - m_debugTextRect.combine(m_guiContext->determineTextSize(text, positioning).padded(m_config->debugBackgroundPad)); + if (!m_debugTextRect.isNull()) { + RenderQuad& quad = m_guiContext->renderer()->immediatePrimitives() + .emplace_back(std::in_place_type_t(), m_debugTextRect, m_config->debugBackgroundColor.toRgba(), 0.0f).get(); + + quad.b.color[3] = quad.c.color[3] = 0; + }; + + m_debugTextRect = RectF::null(); + + counter = 0; + for (auto const& pair : logMapValues) { + TextPositioning positioning = { Vec2F(m_config->debugOffset[0], windowHeight() - m_config->debugOffset[1] - m_config->fontSize * interfaceScale() * counter) }; + m_guiContext->renderText(formatted[counter], positioning); + ++counter; + } + m_guiContext->setFontSize(8); + m_guiContext->setDefaultFont(); + m_guiContext->setDefaultLineSpacing(); + m_guiContext->setFontColor(Vec4B::filled(255)); + m_guiContext->setFontProcessingDirectives(""); } - if (!m_debugTextRect.isNull()) { - RenderQuad& quad = m_guiContext->renderer()->immediatePrimitives() - .emplace_back(std::in_place_type_t(), m_debugTextRect, m_config->debugBackgroundColor.toRgba(), 0.0f).get(); - - quad.b.color[3] = quad.c.color[3] = 0; - }; - - m_debugTextRect = RectF::null(); - - counter = 0; - for (auto const& pair : logMapValues) { - TextPositioning positioning = {Vec2F(m_config->debugOffset[0], windowHeight() - m_config->debugOffset[1] - m_config->fontSize * interfaceScale() * counter)}; - m_guiContext->renderText(formatted[counter], positioning); - ++counter; - } - m_guiContext->setFontSize(8); - m_guiContext->setDefaultFont(); - m_guiContext->setDefaultLineSpacing(); - m_guiContext->setFontColor(Vec4B::filled(255)); - m_guiContext->setFontProcessingDirectives(""); - auto const& camera = m_worldPainter->camera(); bool clearSpatial = m_debugSpatialClearTimer.wrapTick();