92 auto menuId = m_engine->getSceneManager()->generateNextId();
93 auto menu = std::make_unique<Menu>(menuId, m_engine->getRenderer());
94 menu->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_config.audioVolume, menu->getRegistry(),
96 menu->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), menu->getRegistry()));
97 menu->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
98 menu->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
99 menu->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
101 auto winConditionId = m_engine->getSceneManager()->generateNextId();
102 auto winCondition = std::make_unique<WinCondition>(winConditionId, m_engine->getRenderer(), m_engine->getAudio());
103 winCondition->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_config.audioVolume,
104 winCondition->getRegistry(), winCondition->playMusic()));
105 winCondition->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
106 winCondition->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
107 winCondition->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
108 winCondition->onLeave = [
this, menuId]() { m_engine->getSceneManager()->switchToScene(menuId); };
109 m_gameSolo->init(*m_engine, m_config, m_showDebug, menuId, winConditionId);
110 m_gameMulti->init(*m_engine, m_config, m_showDebug, menuId, winConditionId);
111 auto introId = m_engine->getSceneManager()->generateNextId();
112 auto intro = std::make_unique<Intro>(introId, m_engine->getRenderer(), m_engine->getAudio());
113 intro->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_config.audioVolume,
114 intro->getRegistry(), menu->playMusic()));
115 intro->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), intro->getRegistry()));
116 intro->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
117 intro->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
118 intro->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
119 intro->onLeave = [
this, menuId]() { m_engine->getSceneManager()->switchToScene(menuId); };
121 auto settingsId = m_engine->getSceneManager()->generateNextId();
122 auto settings = std::make_unique<Settings>(settingsId, m_engine->getRenderer(), m_config);
123 settings->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_config.audioVolume,
124 settings->getRegistry(), settings->playMusic()));
125 settings->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), settings->getRegistry()));
126 settings->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
127 settings->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
128 settings->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
129 const auto configSoloId = m_gameSolo->getMainSceneId();
130 const auto serverSceneId = m_gameMulti->getMainSceneId();
131 menu->onOptionSelected = [
this, configSoloId, serverSceneId, settingsId](
const std::string &option)
133 if (option ==
"Solo")
135 m_engine->getSceneManager()->switchToScene(configSoloId);
137 else if (option ==
"Multi")
139 m_engine->getSceneManager()->switchToScene(serverSceneId);
141 else if (option ==
"Settings")
143 m_engine->getSceneManager()->switchToScene(settingsId);
146 settings->onLeave = [
this, menuId]() { m_engine->getSceneManager()->switchToScene(menuId); };
148 m_engine->getSceneManager()->addScene(std::move(menu));
149 m_engine->getSceneManager()->addScene(std::move(intro));
150 m_engine->getSceneManager()->addScene(std::move(settings));
151 m_engine->getSceneManager()->addScene(std::move(winCondition));
152 m_engine->getSceneManager()->switchToScene(introId);