1er commit
This commit is contained in:
76
src/game/server/Lobby.cpp
Normal file
76
src/game/server/Lobby.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
#include "game/server/Lobby.h"
|
||||
#include "game/server/Server.h"
|
||||
|
||||
#include "misc/Time.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace td {
|
||||
namespace server {
|
||||
|
||||
/*static constexpr std::uint8_t timeNotifications[] = {
|
||||
2 * 60, // 2 min
|
||||
60 + 30, // 1 min 30 s
|
||||
60, // 1 min
|
||||
30, // 30 s
|
||||
15, // 15 s
|
||||
10, // 10 s
|
||||
5, // 5 s
|
||||
4, // 4 s
|
||||
3, // 3 s
|
||||
2, // 2 s
|
||||
1, // 1 s
|
||||
};*/
|
||||
|
||||
Lobby::Lobby(Server* server) : m_Server(server), m_Timer(1000, std::bind(&Lobby::sendTimeRemaining, this)){
|
||||
|
||||
}
|
||||
|
||||
void Lobby::tick(){
|
||||
if (m_GameStarted || m_StartTimerTime == 0)
|
||||
return;
|
||||
|
||||
if(utils::getTime() - m_StartTimerTime >= LOBBY_WAITING_TIME){
|
||||
protocol::UpdateGameStatePacket packet(game::GameState::Game);
|
||||
m_Server->broadcastPacket(&packet);
|
||||
m_GameStarted = true;
|
||||
m_Server->lauchGame();
|
||||
return;
|
||||
}
|
||||
|
||||
m_Timer.update();
|
||||
}
|
||||
|
||||
void Lobby::sendTimeRemaining(){
|
||||
protocol::UpdateLobbyTimePacket packet(LOBBY_WAITING_TIME - (utils::getTime() - m_StartTimerTime)); // converting second to millis
|
||||
m_Server->broadcastPacket(&packet);
|
||||
}
|
||||
|
||||
void Lobby::OnPlayerJoin(std::uint8_t playerID){
|
||||
if(m_GameStarted)
|
||||
return;
|
||||
std::cout << "(Server) Player Joined Lobby !\n";
|
||||
m_Players.push_back(playerID);
|
||||
if (m_Players.size() == 2){ // start timer if a second player join the match
|
||||
m_StartTimerTime = utils::getTime();
|
||||
m_Timer.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void Lobby::OnPlayerLeave(std::uint8_t playerID){
|
||||
if(m_GameStarted)
|
||||
return;
|
||||
std::cout << "(Server) Player Leaved Lobby !\n";
|
||||
auto it = std::find(m_Players.begin(), m_Players.end(), playerID);
|
||||
if (it == m_Players.end())
|
||||
return;
|
||||
m_Players.erase(it);
|
||||
if (m_Players.size() == 1){
|
||||
protocol::UpdateLobbyTimePacket packet(0);
|
||||
m_Server->broadcastPacket(&packet);
|
||||
m_StartTimerTime = 0; // reset timer if there is only one player left
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
Reference in New Issue
Block a user