diff --git a/loader/include/Geode/ui/SceneManager.hpp b/loader/include/Geode/ui/SceneManager.hpp index 2539f182..2077f49b 100644 --- a/loader/include/Geode/ui/SceneManager.hpp +++ b/loader/include/Geode/ui/SceneManager.hpp @@ -13,6 +13,7 @@ namespace geode { class GEODE_DLL SceneManager { protected: cocos2d::CCArray* m_persistedNodes; + cocos2d::CCScene* m_lastScene = nullptr; bool setup(); diff --git a/loader/src/ui/nodes/Notification.cpp b/loader/src/ui/nodes/Notification.cpp index f9bad08b..449ddde2 100644 --- a/loader/src/ui/nodes/Notification.cpp +++ b/loader/src/ui/nodes/Notification.cpp @@ -173,7 +173,6 @@ void Notification::show() { auto winSize = CCDirector::get()->getWinSize(); this->setPosition(winSize.width / 2, winSize.height / 4); this->setZOrder(CCScene::get()->getHighestChildZ() + 100); - CCScene::get()->addChild(this); } SceneManager::get()->keepAcrossScenes(this); m_showing = true; diff --git a/loader/src/ui/nodes/SceneManager.cpp b/loader/src/ui/nodes/SceneManager.cpp index 0ec112d7..ee7a4247 100644 --- a/loader/src/ui/nodes/SceneManager.cpp +++ b/loader/src/ui/nodes/SceneManager.cpp @@ -23,6 +23,10 @@ SceneManager::~SceneManager() { } void SceneManager::keepAcrossScenes(CCNode* node) { + if (m_lastScene) { + node->removeFromParentAndCleanup(false); + m_lastScene->addChild(node); + } m_persistedNodes->addObject(node); } @@ -36,4 +40,5 @@ void SceneManager::willSwitchToScene(CCScene* scene) { node->removeFromParentAndCleanup(false); scene->addChild(node); } + m_lastScene = scene; }