From e6d3195ef4bf0b5e2ec39b6365e97dcd78ee3f7e Mon Sep 17 00:00:00 2001 From: user666 Date: Tue, 11 Nov 2025 19:37:48 +0400 Subject: [PATCH 1/3] visualize visibility state of of nodes in tree page as in good old days --- src/DevTools.hpp | 2 +- src/pages/Tree.cpp | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/DevTools.hpp b/src/DevTools.hpp index 9de54a4..f6a808a 100644 --- a/src/DevTools.hpp +++ b/src/DevTools.hpp @@ -62,7 +62,7 @@ class DevTools { void setupPlatform(); void drawTree(); - void drawTreeBranch(CCNode* node, size_t index, bool drag); + void drawTreeBranch(CCNode* node, size_t index, bool drag, bool visible); void drawSettings(); void drawAdvancedSettings(); void drawNodeAttributes(CCNode* node); diff --git a/src/pages/Tree.cpp b/src/pages/Tree.cpp index 2a00366..5dd5cd3 100644 --- a/src/pages/Tree.cpp +++ b/src/pages/Tree.cpp @@ -35,11 +35,13 @@ bool isNodeParentOf(CCNode* parent, CCNode* child) { return false; } -void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { +void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag, bool visible) { if (!this->searchBranch(node)) { return; } + visible = node->isVisible() and visible; + auto selected = DevTools::get()->getSelectedNode() == node; ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_None; @@ -103,11 +105,22 @@ void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { ImGui::SetNextItemOpen(true); } + auto alpha = ImGui::GetStyle().DisabledAlpha; + ImGui::GetStyle().DisabledAlpha = node->isVisible() ? alpha + 0.15f : alpha; + + ImGui::BeginDisabled(!visible); + ImGui::PushItemFlag(ImGuiItemFlags_Disabled, false); // Bypass iteract blocking in imgui + const auto name = formatNodeName(node, index); // The order here is unusual due to imgui weirdness; see the second-to-last paragraph in https://kahwei.dev/2022/06/20/imgui-tree-node/ bool expanded = ImGui::TreeNodeEx(node, flags, "%s", name.c_str()); float height = ImGui::GetItemRectSize().y; + + ImGui::GetStyle().DisabledAlpha = alpha; + ImGui::PopItemFlag(); //ImGuiItemFlags_Disabled + ImGui::EndDisabled(); + if (ImGui::IsItemClicked()) { DevTools::get()->selectNode(node); selected = true; @@ -152,7 +165,7 @@ void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag) { } size_t i = 0; for (auto& child : CCArrayExt(node->getChildren())) { - this->drawTreeBranch(child, i++, drag || isDrag); + this->drawTreeBranch(child, i++, drag || isDrag, visible); } ImGui::TreePop(); } @@ -177,7 +190,7 @@ void DevTools::drawTree() { m_searchQuery.clear(); } - this->drawTreeBranch(CCDirector::get()->getRunningScene(), 0, false); + this->drawTreeBranch(CCDirector::get()->getRunningScene(), 0, false, true); if (auto* dragged = this->getDraggedNode()) { const auto name = formatNodeName(dragged, 0); From f75edc8f03ebb1974d805aaf28084af9fe0d93c2 Mon Sep 17 00:00:00 2001 From: LatterRarity70 <90561697+LatterRarity70@users.noreply.github.com> Date: Tue, 11 Nov 2025 19:57:43 +0400 Subject: [PATCH 2/3] && --- src/pages/Tree.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/Tree.cpp b/src/pages/Tree.cpp index 5dd5cd3..37182ef 100644 --- a/src/pages/Tree.cpp +++ b/src/pages/Tree.cpp @@ -40,7 +40,7 @@ void DevTools::drawTreeBranch(CCNode* node, size_t index, bool drag, bool visibl return; } - visible = node->isVisible() and visible; + visible = node->isVisible() && visible; auto selected = DevTools::get()->getSelectedNode() == node; @@ -230,4 +230,5 @@ bool DevTools::searchBranch(CCNode* node) { } } return false; -} \ No newline at end of file + +} From 720c7ee4d425b187fedf2b5bb61b5b7f4fe15fce Mon Sep 17 00:00:00 2001 From: user666 Date: Tue, 11 Nov 2025 22:43:54 +0400 Subject: [PATCH 3/3] add menu buttons to geometry dash page --- src/pages/GeometryDash.cpp | 44 +++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/pages/GeometryDash.cpp b/src/pages/GeometryDash.cpp index 41479e3..a82c2a5 100644 --- a/src/pages/GeometryDash.cpp +++ b/src/pages/GeometryDash.cpp @@ -6,6 +6,7 @@ #include #include #include +#include "../fonts/FeatherIcons.hpp" void drawRowAxisArrow( ImDrawList& foreground, @@ -384,7 +385,48 @@ void DevTools::drawGD(GLRenderCtx* gdCtx) { "Geometry Dash ({}x{})###devtools/geometry-dash", winSize.width, winSize.height ); - if (ImGui::Begin(title.c_str())) { + bool gameStayAlive = true; + if (ImGui::Begin(title.c_str(), &gameStayAlive, ImGuiWindowFlags_MenuBar)) { + + if (!gameStayAlive) game::exit(true); + + if (ImGui::BeginMenuBar()) { + if (ImGui::MenuItem(U8STR(FEATHER_SAVE " Save"))) { + AppDelegate::get()->trySaveGame(0); + } + + ImGui::SameLine(); + + static float time; + auto currentTime = CCDirector::get()->getScheduler()->getTimeScale(); + time = currentTime > 0 ? currentTime : time; + + if (ImGui::MenuItem(U8STR( + m_pauseGame ? FEATHER_LOCK " Resume" : FEATHER_UNLOCK " Pause" + ))) { + m_pauseGame ^= 1; + if (m_pauseGame) { + FMODAudioEngine::sharedEngine()->pauseAllAudio(); + CCDirector::get()->getScheduler()->setTimeScale(0.0f); + } + else { + FMODAudioEngine::sharedEngine()->resumeAllAudio(); + CCDirector::get()->getScheduler()->setTimeScale(time); + } + } + + ImGui::SameLine(); + if (ImGui::MenuItem(U8STR(FEATHER_PACKAGE " Reload"))) { + GameManager::get()->reloadAll(0, 0, 0); + } + + ImGui::SameLine(); + if (ImGui::MenuItem(U8STR(FEATHER_REFRESH_CW " Restart"))) { + game::restart(true); + } + } + ImGui::EndMenuBar(); + auto list = ImGui::GetWindowDrawList(); auto ratio = gdCtx->size().x / gdCtx->size().y;