Time for ending the game is now in CapturePointGameMode component. The timer i counted down to 0 and then the map is "Reset".

This commit is contained in:
Jocke
2016-03-12 20:28:48 +01:00
parent 60df30fa59
commit f8f536802f
9 changed files with 50 additions and 22 deletions
+37 -15
View File
@@ -31,7 +31,7 @@ Server::~Server()
}
void Server::Update()
void Server::Update(double dt)
{
m_Reliable.AcceptNewConnections(m_NextPlayerID, m_ConnectedPlayers);
@@ -106,7 +106,23 @@ void Server::Update()
}
m_EventBroker->Process<Server>();
if (isReadingData) {
Network::Update();
Network::Update(dt);
}
if (m_GameIsOver) {
auto pool = m_World->GetComponents("CapturePointGameMode");
if (pool != nullptr && pool->size() > 0) {
// Take the first CapturePointGameMode component found.
ComponentWrapper& modeComponent = *pool->begin();
// Decrease timer.
double& timer = (double&)modeComponent["ResetCountdown"];
timer -= dt;
if (timer < 0) {
resetMap();
}
} else {
resetMap();
}
}
}
@@ -165,7 +181,7 @@ void Server::reliableBroadcast(Packet& packet)
void Server::unreliableBroadcast(Packet& packet)
{
m_Unreliable.SendToConnectedPlayers(packet, m_ConnectedPlayers);
m_Unreliable.SendToConnectedPlayers(packet, m_ConnectedPlayers);
}
// Send snapshot fields
@@ -550,18 +566,8 @@ bool Server::OnPlayerDeath(const Events::PlayerDeath& e)
bool Server::OnWin(const Events::Win & e)
{
// Postpone this code and trigger after some time in a update
Events::Reset reset;
m_EventBroker->Publish(reset);
Packet removeMap(MessageType::RemoveWorld);
reliableBroadcast(removeMap);
removeWorld();
// Hardcoded for now.
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/CP_Rocky2.xml");
entityFile->MergeInto(m_World);
Packet newWorld(MessageType::Snapshot);
createWorldSnapshot(newWorld);
reliableBroadcast(newWorld);
// Postpone the gameover reset
m_GameIsOver = true;
return true;
}
@@ -686,4 +692,20 @@ PlayerID Server::getPlayerIDFromEntityID(EntityID entityID)
}
}
return -1;
}
void Server::resetMap()
{
m_GameIsOver = false;
Events::Reset reset;
m_EventBroker->Publish(reset);
Packet removeMap(MessageType::RemoveWorld);
reliableBroadcast(removeMap);
removeWorld();
// Hardcoded for now.
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/CP_Rocky2.xml");
entityFile->MergeInto(m_World);
Packet newWorld(MessageType::Snapshot);
createWorldSnapshot(newWorld);
reliableBroadcast(newWorld);
}