Browse Source

Add turn timer allowed option

nordsoft 2 years ago
parent
commit
9cd3b537ad
2 changed files with 12 additions and 1 deletions
  1. 10 1
      server/TurnTimerHandler.cpp
  2. 2 0
      server/TurnTimerHandler.h

+ 10 - 1
server/TurnTimerHandler.cpp

@@ -36,6 +36,7 @@ void TurnTimerHandler::onGameplayStart(PlayerColor player)
 		timers[player].isActive = true;
 		timers[player].isBattle = false;
 		lastUpdate[player] = std::numeric_limits<int>::max();
+		endTurnAllowed[player] = true;
 	}
 }
 
@@ -47,6 +48,13 @@ void TurnTimerHandler::setTimerEnabled(PlayerColor player, bool enabled)
 	sendTimerUpdate(player);
 }
 
+void TurnTimerHandler::setEndTurnAllowed(PlayerColor player, bool enabled)
+{
+	std::lock_guard<std::recursive_mutex> guard(mx);
+	assert(player.isValidPlayer());
+	endTurnAllowed[player] = enabled;
+}
+
 void TurnTimerHandler::sendTimerUpdate(PlayerColor player)
 {
 	TurnTimeUpdate ttu;
@@ -63,6 +71,7 @@ void TurnTimerHandler::onPlayerGetTurn(PlayerColor player)
 	{
 		if(si->turnTimerInfo.isEnabled())
 		{
+			endTurnAllowed[player] = true;
 			auto & timer = timers[player];
 			if(si->turnTimerInfo.baseTimer > 0)
 				timer.baseTimer += timer.turnTimer;
@@ -125,7 +134,7 @@ void TurnTimerHandler::onPlayerMakingTurn(PlayerColor player, int waitTime)
 				timer.baseTimer = 0;
 				onPlayerMakingTurn(player, 0);
 			}
-			else if(!gameHandler.queries->topQuery(state->color)) //wait for replies to avoid pending queries
+			else if(endTurnAllowed[state->color] && !gameHandler.queries->topQuery(state->color)) //wait for replies to avoid pending queries
 				gameHandler.turnOrder->onPlayerEndsTurn(state->color);
 		}
 	}

+ 2 - 0
server/TurnTimerHandler.h

@@ -29,6 +29,7 @@ class TurnTimerHandler
 	const int turnTimePropagateThreshold = 3000;
 	std::map<PlayerColor, TurnTimerInfo> timers;
 	std::map<PlayerColor, int> lastUpdate;
+	std::map<PlayerColor, bool> endTurnAllowed;
 	std::recursive_mutex mx;
 	
 	void onPlayerMakingTurn(PlayerColor player, int waitTime);
@@ -48,4 +49,5 @@ public:
 	void onBattleEnd();
 	void update(int waitTime);
 	void setTimerEnabled(PlayerColor player, bool enabled);
+	void setEndTurnAllowed(PlayerColor player, bool enabled);
 };