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();	
}