1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00

Fix handling of turn order in case of player defeat

This commit is contained in:
Ivan Savenko
2023-08-24 13:36:35 +03:00
parent f451c15932
commit a19cdb57ba
5 changed files with 30 additions and 25 deletions

View File

@@ -108,13 +108,12 @@ void TurnOrderProcessor::doStartPlayerTurn(PlayerColor which)
assert(gameHandler->getCurrentPlayer() == *actingPlayers.begin());
}
void TurnOrderProcessor::doEndPlayerTurn(PlayerColor which, PlayerTurnEndReason reason)
void TurnOrderProcessor::doEndPlayerTurn(PlayerColor which)
{
assert(playerMakingTurn(which));
actingPlayers.erase(which);
if (reason != PlayerTurnEndReason::GAME_END)
actedPlayers.insert(which);
actedPlayers.insert(which);
if (!awaitingPlayers.empty())
tryStartTurnsForPlayers();
@@ -132,7 +131,24 @@ void TurnOrderProcessor::addPlayer(PlayerColor which)
awaitingPlayers.insert(which);
}
bool TurnOrderProcessor::onPlayerEndsTurn(PlayerColor which, PlayerTurnEndReason reason)
void TurnOrderProcessor::onPlayerEndsGame(PlayerColor which)
{
awaitingPlayers.erase(which);
actingPlayers.erase(which);
actedPlayers.erase(which);
if (!awaitingPlayers.empty())
tryStartTurnsForPlayers();
if (actingPlayers.empty())
doStartNewDay();
assert(!actingPlayers.empty());
assert(actingPlayers.size() == 1); // No simturns yet :(
assert(gameHandler->getCurrentPlayer() == *actingPlayers.begin());
}
bool TurnOrderProcessor::onPlayerEndsTurn(PlayerColor which)
{
if (!playerMakingTurn(which))
{
@@ -152,10 +168,9 @@ bool TurnOrderProcessor::onPlayerEndsTurn(PlayerColor which, PlayerTurnEndReason
return false;
}
if (reason != PlayerTurnEndReason::GAME_END)
gameHandler->onPlayerTurnEnded(which);
gameHandler->onPlayerTurnEnded(which);
doEndPlayerTurn(which, reason);
doEndPlayerTurn(which);
return true;
}