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