mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Merge branch 'fixConcedeFreeze' into 'master'
Fix desktop multiplayer conceding Closes #1685 See merge request core-developers/forge!3576
This commit is contained in:
@@ -1003,6 +1003,9 @@ public class PhaseHandler implements java.io.Serializable {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chosenSa = pPlayerPriority.getController().chooseSpellAbilityToPlay();
|
||||||
|
|
||||||
|
// this needs to come after chosenSa so it sees you conceding on own turn
|
||||||
if (playerTurn.hasLost() && pPlayerPriority.equals(playerTurn) && pFirstPriority.equals(playerTurn)) {
|
if (playerTurn.hasLost() && pPlayerPriority.equals(playerTurn) && pFirstPriority.equals(playerTurn)) {
|
||||||
// If the active player has lost, and they have priority, set the next player to have priority
|
// If the active player has lost, and they have priority, set the next player to have priority
|
||||||
System.out.println("Active player is no longer in the game...");
|
System.out.println("Active player is no longer in the game...");
|
||||||
@@ -1010,7 +1013,6 @@ public class PhaseHandler implements java.io.Serializable {
|
|||||||
pFirstPriority = pPlayerPriority;
|
pFirstPriority = pPlayerPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
chosenSa = pPlayerPriority.getController().chooseSpellAbilityToPlay();
|
|
||||||
if (chosenSa == null) {
|
if (chosenSa == null) {
|
||||||
break; // that means 'I pass'
|
break; // that means 'I pass'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,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;
|
||||||
@@ -42,6 +43,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();
|
||||||
@@ -293,23 +295,42 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (hasLocalPlayers()) {
|
if (hasLocalPlayers()) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (concedeNeeded) {
|
||||||
if (showConfirmDialog(Localizer.getInstance().getMessage("lblConcedeCurrentGame"), Localizer.getInstance().getMessage("lblConcedeTitle"), Localizer.getInstance().getMessage("lblConcede"), Localizer.getInstance().getMessage("lblCancel"))) {
|
if (showConfirmDialog(Localizer.getInstance().getMessage("lblConcedeCurrentGame"), Localizer.getInstance().getMessage("lblConcedeTitle"), Localizer.getInstance().getMessage("lblConcede"), Localizer.getInstance().getMessage("lblCancel"))) {
|
||||||
for (final IGameController c : getOriginalGameControllers()) {
|
for (final IGameController c : getOriginalGameControllers()) {
|
||||||
// Concede each player on this Gui (except mind-controlled players)
|
// Concede each player on this Gui (except mind-controlled players)
|
||||||
c.concede();
|
c.concede();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return !ignoreConcedeChain;
|
||||||
|
}
|
||||||
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 {
|
}
|
||||||
|
else {
|
||||||
|
// since the nextGameDecision might come from somewhere else it will try and concede too
|
||||||
|
ignoreConcedeChain = true;
|
||||||
for (PlayerView player : getLocalPlayers()) {
|
for (PlayerView player : getLocalPlayers()) {
|
||||||
if (!player.isAI()) {
|
if (!player.isAI()) {
|
||||||
getGameController(player).nextGameDecision(NextGameDecision.QUIT);
|
getGameController(player).nextGameDecision(NextGameDecision.QUIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ignoreConcedeChain = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user