From 828d4e17c972457cbd448a62719ae4fd2ee00d61 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Fri, 11 Jun 2021 23:04:39 +0200 Subject: [PATCH] Add Ask AI button --- .../java/forge/screens/match/controllers/CDev.java | 11 +++++++++++ .../main/java/forge/screens/match/views/VDev.java | 8 ++++++++ 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/it-IT.properties | 1 + forge-gui/res/languages/ja-JP.properties | 1 + forge-gui/res/languages/zh-CN.properties | 1 + .../main/java/forge/interfaces/IDevModeCheats.java | 5 +++++ .../java/forge/player/PlayerControllerHuman.java | 13 +++++++++++++ 10 files changed, 43 insertions(+) diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java index a0aeefb6dbc..be6b3b8540c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDev.java @@ -52,6 +52,7 @@ public final class CDev implements ICDoc { view.getLblRemoveFromGame().addMouseListener(madRemoveFromGame); view.getLblRiggedRoll().addMouseListener(madRiggedRoll); view.getLblWalkTo().addMouseListener(madWalkToPlane); + view.getLblAskAI().addMouseListener(madAskAI); } public IGameController getController() { return matchUI.getGameController(); @@ -309,6 +310,16 @@ public final class CDev implements ICDoc { getController().cheat().planeswalkTo(); } + private final MouseListener madAskAI = new MouseAdapter() { + @Override + public void mousePressed(final MouseEvent e) { + askAI(); + } + }; + public void askAI() { + getController().cheat().askAI(); + } + //========== End mouse listener inits @Override diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java index b95c31620cb..e1deb6fe01c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VDev.java @@ -81,6 +81,9 @@ public class VDev implements IVDoc, IDevListener { private final DevLabel lblRiggedRoll = new DevLabel(Localizer.getInstance().getMessage("lblRiggedRoll")); private final DevLabel lblWalkTo = new DevLabel(Localizer.getInstance().getMessage("lblWalkTo")); + private final DevLabel lblAskAI = new DevLabel(Localizer.getInstance().getMessage("lblAskAI")); + + private final CDev controller; //========= Constructor @@ -116,6 +119,7 @@ public class VDev implements IVDoc, IDevListener { viewport.add(this.lblUntapPermanent, halfConstraints); viewport.add(this.lblRiggedRoll, halfConstraintsLeft); viewport.add(this.lblWalkTo, halfConstraints); + viewport.add(this.lblAskAI, halfConstraintsLeft); } //========= Overridden methods @@ -294,6 +298,10 @@ public class VDev implements IVDoc, IDevListener { return this.lblWalkTo; } + public DevLabel getLblAskAI() { + return this.lblAskAI; + } + /** * Labels that act as buttons which control dev mode functions. Labels are * used to support multiline text. diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index d050a868e38..663aee0a75b 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1989,6 +1989,7 @@ lblRepeatAddCard=Wiederhole letztes Karten-hinzufügen lblRemoveFromGame=Entferne Karte aus dem Spiel lblRiggedRoll=Gezinkter Weltenwürfelwurf lblWalkTo=Weltenwandere zu +lblAskAI=Frage KI nach Vorschlag #PhaseType.java lblUntapStep=Enttappsegment lblUpkeepStep=Versorgungssegment diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index bf0758087a0..b7c47d29b62 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1989,6 +1989,7 @@ lblRepeatAddCard=Repeat Last Add Card lblRemoveFromGame=Remove Card from Game lblRiggedRoll=Rigged Planar Roll lblWalkTo=Planeswalk to +lblAskAI=Ask AI for suggestion #PhaseType.java lblUntapStep=Untap step lblUpkeepStep=Upkeep step diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 9ccadd1e336..72096e050c3 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1989,6 +1989,7 @@ lblRepeatAddCard=Repetir añadir última carta lblRemoveFromGame=Quitar carta del juego lblRiggedRoll=Rollo Plano montado lblWalkTo=Planeswalk a +lblAskAI=Ask AI for suggestion #PhaseType.java lblUntapStep=Enderezar lblUpkeepStep=Mantenimiento diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 9c05434f770..514eb12f02f 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1989,6 +1989,7 @@ lblRepeatAddCard=Ripeti l''ultima azione aggiungi carta lblRemoveFromGame=Rimuovi una carta dal gioco lblRiggedRoll=Lancio di dado planare truccato lblWalkTo=Viaggia tra i piani (scegli il piano) +lblAskAI=Ask AI for suggestion #PhaseType.java lblUntapStep=Sottofase di Stap lblUpkeepStep=Sottofase di Mantenimento diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index b8e8e09a5ae..9786ce30fea 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1990,6 +1990,7 @@ lblRepeatAddCard=最後の追加カードを再度追加 lblRemoveFromGame=ゲームからカードを削除 lblRiggedRoll=次元ダイスを指定 lblWalkTo=次元カードを指定 +lblAskAI=Ask AI for suggestion #PhaseType.java lblUntapStep=アンタップ・ステップ lblUpkeepStep=アップキープ・ステップ diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index c18b670eaa8..5a1fcd642ef 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1990,6 +1990,7 @@ lblRepeatAddCard=重复上一张添加的牌 lblRemoveFromGame=从游戏中删除牌 lblRiggedRoll=触发时空骰 lblWalkTo=时空换入 +lblAskAI=Ask AI for suggestion #PhaseType.java lblUntapStep=重置步骤 lblUpkeepStep=维持步骤 diff --git a/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java b/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java index b296696c5fa..4e3bfbae68e 100644 --- a/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java +++ b/forge-gui/src/main/java/forge/interfaces/IDevModeCheats.java @@ -59,6 +59,8 @@ public interface IDevModeCheats { void planeswalkTo(); + void askAI(); + /** * Implementation of {@link IDevModeCheats} that disallows cheating by * performing no action whatsoever when any of its methods is called. @@ -141,6 +143,9 @@ public interface IDevModeCheats { @Override public void removeCardsFromGame() { } + @Override + public void askAI() { + } }; } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 6acb6261bda..9e37510f691 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -36,6 +36,7 @@ import com.google.common.collect.Multimap; import forge.LobbyPlayer; import forge.StaticData; import forge.ai.GameState; +import forge.ai.PlayerControllerAi; import forge.card.CardDb; import forge.card.CardStateName; import forge.card.CardType; @@ -2942,6 +2943,18 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } }); } + + public void askAI() { + PlayerControllerAi ai = new PlayerControllerAi(player.getGame(), player, player.getOriginalLobbyPlayer()); + player.runWithController(new Runnable() { + @Override + public void run() { + List sas = ai.chooseSpellAbilityToPlay(); + SpellAbility chosen = sas == null ? null : sas.get(0); + getGui().message(chosen == null ? "AI doesn't want to play anything right now" : chosen.getHostCard().toString(), "AI Play Suggestion"); + } + }, ai); + } } private IMacroSystem macros;