88#include " lobby.hpp"
99
1010#include " ./game.hpp"
11+ #include " libs/game/src/api/client/client.hpp"
1112#include " libs/mew/src/sets/drawable/drawable.hpp"
1213
1314using namespace rtype ::client::scenes;
@@ -18,6 +19,7 @@ using namespace porygon;
1819using namespace mew ::sets::drawable;
1920using namespace mew ::scenes;
2021using namespace mew ::managers;
22+ using namespace rtype ::sdk::game::api;
2123
2224SceneLobby::SceneLobby (DependenciesHandler::Ptr services) : SceneBase(std::move(services)) {
2325 serverConnectionService_ = services_->GetOrThrow <ServerConnectionService>();
@@ -36,10 +38,7 @@ void SceneLobby::OnCreate() {
3638}
3739
3840void SceneLobby::OnActivate () {
39- if (status_ == LobbyStatus::kIn ) {
40- return managers_.scenes ->GoToScene <SceneGame>();
41- }
42- JoinLobbyAsync ();
41+ WaitAsync ();
4342}
4443
4544void SceneLobby::Update (std::chrono::nanoseconds delta_time) {
@@ -48,10 +47,6 @@ void SceneLobby::Update(std::chrono::nanoseconds delta_time) {
4847 if (status_ == LobbyStatus::kIn ) {
4948 managers_.scenes ->GoToScene <SceneGame>();
5049 }
51-
52- if (status_ == LobbyStatus::kWaitingPlayers ) {
53- WaitGameStart ();
54- }
5550}
5651
5752void SceneLobby::CreateStatusText () {
@@ -83,46 +78,29 @@ void SceneLobby::CreateGEpitechLogo() {
8378 {Texture{.name = " g-epitech-logo" , .scale = 0.35 , .rect = rect}, WindowManager::View::HUD});
8479}
8580
86- void SceneLobby::JoinLobbyAsync () {
81+ void SceneLobby::WaitAsync () {
8782 if (joiningThread_)
8883 return ;
89- joiningThread_ = std::thread (&SceneLobby::JoinLobby , this );
84+ joiningThread_ = std::thread (&SceneLobby::Wait , this );
9085}
9186
92- void SceneLobby::JoinLobby () {
93- if (status_ == LobbyStatus::kJoining ) {
94- return ;
95- }
96- mainMessage_ = " Creating the room" ;
97- secondaryMessage_ = " Please wait..." ;
98- auto res = serverConnectionService_->client ()->CreateRoom ({
99- .name = " MyPtitRoom" ,
100- .nbPlayers = 2 ,
101- .difficulty = 0 ,
102- });
103- if (!res) {
104- mainMessage_ = " Creating failed" ;
105- secondaryMessage_ = " Unable to create the lobby" ;
106- status_ = LobbyStatus::kFailed ;
107- return ;
108- }
109- std::this_thread::sleep_for (std::chrono::milliseconds (1200 ));
110- status_ = LobbyStatus::kRegistered ;
111- mainMessage_ = " Joining the room" ;
112- secondaryMessage_ = " Please wait..." ;
113- res = serverConnectionService_->client ()->JoinRoom ({
114- .nodeId = 0 ,
115- .roomId = 0 ,
116- });
117- if (!res) {
118- mainMessage_ = " Joining failed" ;
119- secondaryMessage_ = " Unable to join the lobby" ;
120- status_ = LobbyStatus::kFailed ;
121- return ;
87+ void SceneLobby::Wait () {
88+ mainMessage_ = " Starting..." ;
89+ secondaryMessage_ = " You are now in the lobby. Waiting for other players" ;
90+ status_ = LobbyStatus::kWaiting ;
91+
92+ while (status_ == LobbyStatus::kWaiting ) {
93+ auto queue = serverConnectionService_->client ()->ExtractQueue ();
94+
95+ while (!queue.empty ()) {
96+ auto message = queue.front ();
97+ if (message.messageType == kMsgTypeMTCGameStarted ) {
98+ status_ = LobbyStatus::kIn ;
99+ break ;
100+ }
101+ queue.pop ();
102+ }
122103 }
123- mainMessage_ = " Waiting for players" ;
124- secondaryMessage_ = " Please wait until all players are ready" ;
125- status_ = LobbyStatus::kWaitingPlayers ;
126104}
127105
128106void SceneLobby::UpdateStatusText () {
@@ -157,17 +135,12 @@ void SceneLobby::UpdateStatusText() {
157135 return ;
158136 }
159137}
160-
161- void SceneLobby::WaitGameStart () {
162- auto queue = serverConnectionService_->client ()->ExtractQueue ();
163-
164- while (!queue.empty ()) {
165- auto &message = queue.front ();
166- if (message.messageType == api::MasterToClientMsgType::kMsgTypeMTCGameStarted ) {
167- mainMessage_ = " Starting..." ;
168- secondaryMessage_ = " The game is starting, please wait" ;
169- status_ = LobbyStatus::kIn ;
138+ void SceneLobby::OnDeactivate () {
139+ if (joiningThread_ && joiningThread_->joinable ()) {
140+ joiningThread_->join ();
170141 }
171- queue.pop ();
172- }
142+ joiningThread_.reset ();
143+ status_ = LobbyStatus::kNone ;
144+ mainMessage_ = " " ;
145+ secondaryMessage_ = " " ;
173146}
0 commit comments