void SceneManager::push(Scene* scene, Modality modality /*= Modality::Exclusive*/) { if (!m_activeList.empty()) { auto go = m_activeList.back().first->getAllGameObjects(); for (size_t i = 0; i < go.size(); i++) { //go[i]->deactivate(); if (modality == Modality::Exclusive) { go[i]->setWasEnabled(go[i]->isEnabled()); go[i]->setEnabled(false, false); AudioSource * audio = go[i]->getGameComponent<AudioSource>(); if (audio != nullptr) { if (audio->getType() == AudioType::STREAM) { audio->setWasPlaying(audio->isPlaying()); // pause music audio->stop(); } } } } } if (modality == Modality::Popup) { m_activeList.back().first->notifyCoveredObjects(); } m_activeList.push_back(std::make_pair(scene, modality)); scene->init(*m_viewport); scene->setEngine(m_coreEngine); auto attachedToRoot = scene->getRoot()->getAllAttached(); for (size_t i = attachedToRoot.size() - 1; i > 0; i--) { auto gameComponents = attachedToRoot[i]->getAllGameComponents(); for (size_t j = 0; j < gameComponents.size(); j++) { gameComponents[j]->onStart(); } } updateExclusiveScene(); }