#pragma once #include "../DefaultInclude.hpp" #include #include #include #include namespace geode { struct SceneSwitch; class GEODE_DLL SceneManager final { protected: std::vector> m_persistedNodes; cocos2d::CCScene* m_lastScene = nullptr; virtual ~SceneManager(); void willSwitchToScene(cocos2d::CCScene* scene); friend struct SceneSwitch; public: static SceneManager* get(); /** * Adds a node to the list of persisted nodes, which are kept across scene changes. * @param node The node to keep across scenes. */ void keepAcrossScenes(cocos2d::CCNode* node); /** * Removes a node from the list of persisted nodes. * @param node The node to forget. */ void forget(cocos2d::CCNode* node); /** * Gets a span of the persisted nodes. To add new nodes to the list, use keepAcrossScenes. */ std::span const> getPersistedNodes(); }; }