MCPcopy Create free account
hub / github.com/axmolengine/axmol / popToSceneStackLevel

Method popToSceneStackLevel

core/base/Director.cpp:911–967  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

909}
910
911void Director::popToSceneStackLevel(int level)
912{
913 AXASSERT(_runningScene != nullptr, "A running Scene is needed");
914 ssize_t c = _scenesStack.size();
915
916 // level 0? -> end
917 if (level == 0)
918 {
919 end();
920 return;
921 }
922
923 // current level or lower -> nothing
924 if (level >= c)
925 return;
926
927 auto firstOnStackScene = _scenesStack.back();
928 if (firstOnStackScene == _runningScene)
929 {
930#if AX_ENABLE_GC_FOR_NATIVE_OBJECTS
931 auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
932 if (sEngine)
933 {
934 sEngine->releaseScriptObject(this, _scenesStack.back());
935 }
936#endif // AX_ENABLE_GC_FOR_NATIVE_OBJECTS
937 _scenesStack.popBack();
938 --c;
939 }
940
941 // pop stack until reaching desired level
942 while (c > level)
943 {
944 auto current = _scenesStack.back();
945
946 if (current->isRunning())
947 {
948 current->onExit();
949 }
950
951 current->cleanup();
952#if AX_ENABLE_GC_FOR_NATIVE_OBJECTS
953 auto sEngine = ScriptEngineManager::getInstance()->getScriptEngine();
954 if (sEngine)
955 {
956 sEngine->releaseScriptObject(this, _scenesStack.back());
957 }
958#endif // AX_ENABLE_GC_FOR_NATIVE_OBJECTS
959 _scenesStack.popBack();
960 --c;
961 }
962
963 _nextScene = _scenesStack.back();
964
965 // cleanup running scene
966 _sendCleanupToScene = true;
967}
968

Callers 1

item3ClickedMethod · 0.80

Calls 8

getInstanceFunction · 0.85
popBackMethod · 0.80
isRunningMethod · 0.80
endFunction · 0.50
sizeMethod · 0.45
backMethod · 0.45
onExitMethod · 0.45
cleanupMethod · 0.45

Tested by 1

item3ClickedMethod · 0.64