From 00df91c73fdb36679a2a3abcc9abc706acb7c99e Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 28 Aug 2023 07:54:34 +0800 Subject: [PATCH] prevent UI lockup - closes #3697 --- forge-gui/res/languages/de-DE.properties | 1 + forge-gui/res/languages/en-US.properties | 1 + forge-gui/res/languages/es-ES.properties | 1 + forge-gui/res/languages/fr-FR.properties | 1 + forge-gui/res/languages/it-IT.properties | 1 + forge-gui/res/languages/ja-JP.properties | 1 + forge-gui/res/languages/pt-BR.properties | 1 + forge-gui/res/languages/zh-CN.properties | 3 ++- .../src/main/java/forge/gamemodes/match/AbstractGuiGame.java | 4 ++++ .../main/java/forge/gamemodes/match/input/InputLockUI.java | 3 ++- 10 files changed, 15 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 5ba24fc6a61..1f56d6f0e5e 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1409,6 +1409,7 @@ lblActionFromPlayerDeck={0} von {1} Deck lblConcedeCurrentGame=Das Spiel wird als verloren gewertet.\n\nTrotzdem aufgeben? lblConcedeTitle=Spiel verloren geben? lblConcede=Aufgeben +lblWaitingforActions=Warten auf Aktionen ... lblCloseGameSpectator=Das Spiel wird verlassen und du kannst nicht zurückkehren, um es weiter zu beobachten.\n\nTrotzdem verlassen? lblCloseGame=Spiel verlassen? lblWaitingForOpponent=Warte auf Gegner... diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index a5337c04a5f..eb7302a8724 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1414,6 +1414,7 @@ lblActionFromPlayerDeck={0} from {1} Deck lblConcedeCurrentGame=This will concede the current game and you will lose.\n\nConcede anyway? lblConcedeTitle=Concede Game? lblConcede=Concede +lblWaitingforActions=Waiting for actions... lblCloseGameSpectator=This will close this game and you will not be able to resume watching it.\n\nClose anyway? lblCloseGame=Close Game? lblWaitingForOpponent=Waiting for opponent... diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index e4b031e9ddb..7d08da01758 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1410,6 +1410,7 @@ lblActionFromPlayerDeck={0} del Mazo {1} lblConcedeCurrentGame=Concederás la partida actual y perderás.\n\n¿Conceder de todos modos? lblConcedeTitle=¿Conceder partida? lblConcede=Conceder +lblWaitingforActions=Esperando acciones ... lblCloseGameSpectator=Cerrarás la partida y no podrás volver a verla.\n\n¿Cerrar de todos modos? lblCloseGame=¿Cerrar partida? lblWaitingForOpponent=Esperando al oponente... diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 8e8a48a1501..bebdca73924 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -1413,6 +1413,7 @@ lblActionFromPlayerDeck={0} de la plate-forme {1} lblConcedeCurrentGame=Ceci concédera la partie en cours et vous perdrez.\n\nConcéder quand même ? lblConcedeTitle=Concéder le jeu ? lblConcede=Concéder +lblWaitingforActions=En attente d'actions ... lblCloseGameSpectator=Ceci fermera ce jeu et vous ne pourrez plus le regarder.\n\nFermer quand même ? lblCloseGame=Fermer le jeu ? lblWaitingForOpponent=En attente de l''adversaire... diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 38d30b26132..8294d6067b4 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1410,6 +1410,7 @@ lblActionFromPlayerDeck={0} dal mazzo di {1} lblConcedeCurrentGame=Questo concederà la partita in corso e perderai. \n \nConcedi comunque? lblConcedeTitle=Concedere la partita? lblConcede=Concedi +lblWaitingforActions=Aspettando le azioni ... lblCloseGameSpectator=Questo chiuderà questa partita e non potrai riprendere a guardarla. \n \nChiudi comunque? lblCloseGame=Chiudi la partita? lblWaitingForOpponent=Aspettando l''avversario ... diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 1f351493c8f..01ea90de070 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1411,6 +1411,7 @@ lblActionFromPlayerDeck={1}デッキから{0} lblConcedeCurrentGame=これは現在のゲームを投了し、負けます。とにかく投了しますか? lblConcedeTitle=ゲームを投了する? lblConcede=投了 +lblWaitingforActions=行動を待っています... lblCloseGameSpectator=これにより、このゲームが終了し、視聴を再開できなくなります。\n\nそれでもやはり閉じますか? lblCloseGame=ゲームを閉じる? lblWaitingForOpponent=対戦相手を待っています... diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 5c715f369b4..ed3370efe6f 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -1443,6 +1443,7 @@ lblConcedeCurrentGame=Isto concede o jogo atual e você perderá.\n\ Conceder mesmo assim? lblConcedeTitle=Conceder Jogo? lblConcede=Conceder +lblWaitingforActions=Esperando por ações ... lblCloseGameSpectator=Ao fechar o jogo, não será possível retornar.\n\ \n\ Fechar mesmo assim? diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index c603d13f0d0..e0d4aad99a0 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1414,6 +1414,7 @@ lblActionFromPlayerDeck=从{1}的套牌{0} lblConcedeCurrentGame=这局游戏认输。\n\n确认吗? lblConcedeTitle=这局游戏认输? lblConcede=认输 +lblWaitingforActions=等待动作... lblCloseGameSpectator=这将关闭游戏,你将无法继续观看它。\n\n一定要关闭吗? lblCloseGame=关闭游戏? lblWaitingForOpponent=等待对手中 @@ -2044,7 +2045,7 @@ lblChooseAnyNumberToPhase=选择任意要跃离的数量 lblChooseUpTo=最多选择 lblSelectCardToPlay=选择要使用的牌 #PlaneswalkEffect.java -lblWouldYouLikeToPlaneswalk=Would you like to planeswalk? +lblWouldYouLikeToPlaneswalk=Would you like to planeswalk?�� #ProtectAllEffect.java lblChooseAProtection=选择一个保护 #PumpEffect.java diff --git a/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java b/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java index 141000ea04f..74e265688c1 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java @@ -370,6 +370,10 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { } } if (concedeNeeded) { + if (gameView.isMulligan()) { //prevent UI freezing when conceding while the game is waiting for inputs/action + showErrorDialog(Localizer.getInstance().getMessage("lblWaitingforActions")); + return false; + } 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) diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputLockUI.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputLockUI.java index b1b4847fb7f..f31c44a3165 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputLockUI.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputLockUI.java @@ -10,6 +10,7 @@ import forge.game.spellability.SpellAbility; import forge.gui.FThreads; import forge.player.PlayerControllerHuman; import forge.util.ITriggerEvent; +import forge.util.Localizer; import forge.util.ThreadUtil; public class InputLockUI implements Input { @@ -58,7 +59,7 @@ public class InputLockUI implements Input { @Override public void run() { controller.getGui().updateButtons(InputLockUI.this.getOwner(), "", "", false, false, false); - showMessage("Waiting for actions..."); + showMessage(Localizer.getInstance().getMessage("lblWaitingforActions")); } };