17 auto serverSceneId = m_engine->getSceneManager()->generateNextId();
18 auto serverScene = std::make_unique<ServerScene>(serverSceneId, m_engine->getRenderer(), m_appConfig->host,
19 std::to_string(m_appConfig->port), m_appConfig->player_name);
20 m_mainSceneId = serverSceneId;
21 serverScene->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_appConfig->audioVolume,
22 serverScene->getRegistry(), serverScene->playMusic()));
23 serverScene->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), serverScene->getRegistry()));
24 serverScene->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
25 serverScene->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
26 serverScene->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
27 auto configMultiId = m_engine->getSceneManager()->generateNextId();
28 auto configMulti = std::make_unique<ConfigMulti>(configMultiId, m_engine->getRenderer());
29 configMulti->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_appConfig->audioVolume,
30 configMulti->getRegistry(), configMulti->playMusic()));
31 configMulti->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), configMulti->getRegistry()));
32 configMulti->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
33 configMulti->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
34 configMulti->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
35 auto createRoomId = m_engine->getSceneManager()->generateNextId();
36 auto createRoomScene = std::make_unique<CreateRoomScene>(createRoomId, m_engine->getRenderer());
37 createRoomScene->addSystem(std::make_unique<ecs::AudioSystem>(
38 m_engine->getAudio(), m_appConfig->audioVolume, createRoomScene->getRegistry(), createRoomScene->playMusic()));
39 createRoomScene->addSystem(
40 std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), createRoomScene->getRegistry()));
41 createRoomScene->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
42 createRoomScene->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
43 createRoomScene->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
44 auto joinRoomId = m_engine->getSceneManager()->generateNextId();
45 auto joinRoomScene = std::make_unique<JoinRoomScene>(joinRoomId, m_engine->getRenderer());
46 joinRoomScene->addSystem(std::make_unique<ecs::AudioSystem>(
47 m_engine->getAudio(), m_appConfig->audioVolume, joinRoomScene->getRegistry(), joinRoomScene->playMusic()));
48 joinRoomScene->addSystem(
49 std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), joinRoomScene->getRegistry()));
50 joinRoomScene->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
51 joinRoomScene->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
52 joinRoomScene->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
53 auto waitingRoomId = m_engine->getSceneManager()->generateNextId();
54 auto waitingRoomScene = std::make_unique<WaitingRoomScene>(waitingRoomId, m_engine->getRenderer());
55 waitingRoomScene->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_appConfig->audioVolume,
56 waitingRoomScene->getRegistry(),
57 waitingRoomScene->playMusic()));
58 waitingRoomScene->addSystem(
59 std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), waitingRoomScene->getRegistry()));
60 waitingRoomScene->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
61 waitingRoomScene->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
62 waitingRoomScene->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
65 serverScene->onConnect =
66 [
this, configMultiId](
const std::string &playerName,
const std::string &serverIP,
const std::string &serverPort)
67 { m_engine->getSceneManager()->switchToScene(configMultiId); };
68 serverScene->onBackToMenu = [
this, menuSceneId]() { m_engine->getSceneManager()->switchToScene(menuSceneId); };
70 configMulti->onOptionSelected = [
this, menuSceneId, createRoomId, joinRoomId](
const std::string &option)
72 if (option ==
"Create room")
74 m_engine->getSceneManager()->switchToScene(createRoomId);
76 else if (option ==
"Join room")
78 m_engine->getSceneManager()->switchToScene(joinRoomId);
80 else if (option ==
"Go back to menu")
82 m_engine->getSceneManager()->switchToScene(menuSceneId);
86 createRoomScene->onCreate = [
this](
const std::string &roomName,
int maxPlayers)
92 createRoomScene->onRoomCreated =
93 [
this, waitingRoomId, waitingRoomScenePtr](
const int lobbyId,
const rnp::LobbyInfo *lobbyInfo)
97 waitingRoomScenePtr->
setLobbyId(
static_cast<std::uint32_t
>(lobbyId));
103 m_engine->getSceneManager()->switchToScene(waitingRoomId);
105 createRoomScene->onBackToMulti = [
this, configMultiId]()
106 { m_engine->getSceneManager()->switchToScene(configMultiId); };
108 joinRoomScene->onJoin = [
this, waitingRoomId, waitingRoomScenePtr](
int roomId,
const rnp::LobbyInfo *lobbyInfo)
111 waitingRoomScenePtr->
setLobbyId(
static_cast<std::uint32_t
>(roomId));
117 m_engine->getSceneManager()->switchToScene(waitingRoomId);
119 joinRoomScene->onBackToMulti = [
this, configMultiId]()
120 { m_engine->getSceneManager()->switchToScene(configMultiId); };
121 joinRoomScene->onRefreshRequest = []()
128 waitingRoomScene->onLeaveLobby = [
this, configMultiId]()
129 { m_engine->getSceneManager()->switchToScene(configMultiId); };
130 waitingRoomScene->onGameStart = [
this, menuSceneId]()
134 uint32_t sessionId = 0;
135 if (m_engine && m_engine->getNetwork())
137 sessionId = m_engine->getNetwork()->getSessionId();
140 auto gameMultiId = m_engine->getSceneManager()->generateNextId();
141 auto gameMulti = std::make_unique<GameMulti>(gameMultiId, m_engine->getRenderer(), m_engine->getAudio(),
142 m_appConfig->skinIndex, m_showDebug, sessionId);
143 gameMulti->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_appConfig->audioVolume,
144 gameMulti->getRegistry(), gameMulti->playMusic()));
145 gameMulti->addSystem(std::make_unique<ExplosionSystem>(m_engine->getRenderer()));
146 gameMulti->addSystem(std::make_unique<ecs::SpriteSystem>(m_engine->getRenderer()));
147 gameMulti->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
148 gameMulti->addSystem(std::make_unique<ecs::StarfieldSystem>(m_engine->getRenderer(), gameMulti->getRegistry()));
149 gameMulti->addSystem(std::make_unique<ecs::AnimationSystem>(m_engine->getRenderer()));
150 gameMulti->addSystem(std::make_unique<gme::LoadingAnimationSystem>(m_engine->getRenderer()));
151 gameMulti->addSystem(std::make_unique<gme::ScrollingSystem>(m_engine->getRenderer()));
152 gameMulti->addSystem(std::make_unique<gme::CollisionSystem>(m_engine->getRenderer(), m_showDebug));
153 gameMulti->addSystem(std::make_unique<ecs::BeamSystem>(m_engine->getRenderer()));
154 gameMulti->addSystem(std::make_unique<gme::ProjectileSystem>(m_engine->getRenderer()));
155 gameMulti->addSystem(std::make_unique<gme::WeaponSystem>(m_engine->getRenderer()));
156 gameMulti->addSystem(std::make_unique<gme::PlayerDirectionSystem>());
157 gameMulti->addSystem(std::make_unique<gme::HealthBarSystem>(m_engine->getRenderer()));
158 gameMulti->addSystem(std::make_unique<ecs::DebugSystem>(m_engine->getRenderer(), m_showDebug));
160 gameMulti->onGameOver = [
this, menuSceneId]()
164 auto gameOverId = m_engine->getSceneManager()->generateNextId();
165 auto gameOver = std::make_unique<GameOverScene>(gameOverId, m_engine->getRenderer());
166 gameOver->addSystem(std::make_unique<ecs::AudioSystem>(m_engine->getAudio(), m_appConfig->audioVolume,
167 gameOver->getRegistry(), gameOver->playMusic()));
168 gameOver->addSystem(std::make_unique<ecs::TextSystem>(m_engine->getRenderer()));
170 gameOver->onBackToMenu = [
this, menuSceneId]() { m_engine->getSceneManager()->switchToScene(menuSceneId); };
172 m_engine->getSceneManager()->addScene(std::move(gameOver));
173 m_engine->getSceneManager()->switchToScene(gameOverId);
176 m_engine->getSceneManager()->addScene(std::move(gameMulti));
177 m_engine->getSceneManager()->switchToScene(gameMultiId);
180 m_engine->getSceneManager()->addScene(std::move(serverScene));
181 m_engine->getSceneManager()->addScene(std::move(configMulti));
182 m_engine->getSceneManager()->addScene(std::move(createRoomScene));
183 m_engine->getSceneManager()->addScene(std::move(joinRoomScene));
184 m_engine->getSceneManager()->addScene(std::move(waitingRoomScene));