mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Fix multiplayer conceding
This commit is contained in:
@@ -127,6 +127,10 @@ public class PhaseHandler implements java.io.Serializable {
|
||||
game.updatePlayerTurnForView();
|
||||
setPriority(playerTurn);
|
||||
}
|
||||
|
||||
public final void endPlayerLostTurn() {
|
||||
setPlayerTurn(handleNextTurn());
|
||||
}
|
||||
|
||||
public final Player getPriorityPlayer() {
|
||||
return pPlayerPriority;
|
||||
|
||||
@@ -32,6 +32,7 @@ import forge.interfaces.IGameController;
|
||||
import forge.interfaces.IGuiGame;
|
||||
import forge.interfaces.IMayViewCards;
|
||||
import forge.model.FModel;
|
||||
import forge.player.PlayerControllerHuman;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.trackable.TrackableTypes;
|
||||
@@ -43,7 +44,8 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
|
||||
private final Map<PlayerView, IGameController> gameControllers = Maps.newHashMap();
|
||||
private final Map<PlayerView, IGameController> originalGameControllers = Maps.newHashMap();
|
||||
private boolean gamePause = false;
|
||||
|
||||
private boolean ignoreConcedeChain = false;
|
||||
|
||||
public final boolean hasLocalPlayers() {
|
||||
return !gameControllers.isEmpty();
|
||||
}
|
||||
@@ -294,23 +296,48 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
|
||||
return true;
|
||||
}
|
||||
if (hasLocalPlayers()) {
|
||||
if (showConfirmDialog(Localizer.getInstance().getMessage("lblConcedeCurrentGame"), Localizer.getInstance().getMessage("lblConcedeTitle"), Localizer.getInstance().getMessage("lblConcede"), Localizer.getInstance().getMessage("lblCancel"))) {
|
||||
for (final IGameController c : getOriginalGameControllers()) {
|
||||
// Concede each player on this Gui (except mind-controlled players)
|
||||
c.concede();
|
||||
boolean concedeNeeded = false;
|
||||
// check if anyone still needs to confirm
|
||||
for (final IGameController c : getOriginalGameControllers()) {
|
||||
if (c instanceof PlayerControllerHuman) {
|
||||
if (((PlayerControllerHuman) c).getPlayer().getOutcome() == null) {
|
||||
concedeNeeded = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (concedeNeeded) {
|
||||
if (showConfirmDialog(Localizer.getInstance().getMessage("lblConcedeCurrentGame"), Localizer.getInstance().getMessage("lblConcedeTitle"), Localizer.getInstance().getMessage("lblConcede"), Localizer.getInstance().getMessage("lblCancel"))) {
|
||||
for (final IGameController c : getOriginalGameControllers()) {
|
||||
// Concede each player on this Gui (except mind-controlled players)
|
||||
c.concede();
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (ignoreConcedeChain) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
if (gameView.isGameOver()) {
|
||||
// Don't immediately close, wait for win/lose screen
|
||||
return false;
|
||||
} else {
|
||||
for (PlayerView player : getLocalPlayers()){
|
||||
if (!player.isAI()){
|
||||
}
|
||||
else {
|
||||
// since the nextGameDecision might come from somewhere else it will try and concede too
|
||||
ignoreConcedeChain = true;
|
||||
for (PlayerView player : getLocalPlayers()) {
|
||||
if (!player.isAI()) {
|
||||
getGameController(player).nextGameDecision(NextGameDecision.QUIT);
|
||||
}
|
||||
}
|
||||
ignoreConcedeChain = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2943,7 +2943,13 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
}
|
||||
|
||||
public void autoPassUntilEndOfTurn() {
|
||||
getGui().autoPassUntilEndOfTurn(getLocalPlayerView());
|
||||
// if we already conceded just skip everything
|
||||
if (player.getOutcome() != null) {
|
||||
player.getGame().getPhaseHandler().endPlayerLostTurn();
|
||||
}
|
||||
else {
|
||||
getGui().autoPassUntilEndOfTurn(getLocalPlayerView());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user