geode/loader/include/Geode/ui/SceneManager.hpp

45 lines
1.1 KiB
C++
Raw Normal View History

#pragma once
#include "../DefaultInclude.hpp"
2022-10-30 14:59:20 -04:00
#include <cocos2d.h>
#include <vector>
#include <span>
#include <Geode/utils/cocos.hpp>
namespace geode {
2024-11-04 13:27:14 -05:00
struct SceneSwitch;
2024-06-20 16:00:04 -04:00
class GEODE_DLL SceneManager final {
protected:
std::vector<Ref<cocos2d::CCNode>> m_persistedNodes;
cocos2d::CCScene* m_lastScene = nullptr;
virtual ~SceneManager();
2024-11-04 13:27:14 -05:00
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<Ref<cocos2d::CCNode> const> getPersistedNodes();
};
}