From 15372e6dd60af8da7223694b1c97f86c7a1b53fd Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 30 May 2023 19:51:39 +0800 Subject: [PATCH 1/4] update mobile gamestate options --- forge-gui-mobile/src/forge/GuiMobile.java | 16 ++++++++++++++-- forge-gui/res/languages/en-US.properties | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index 9b99c35fae4..c7c0d923c0b 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -12,6 +12,7 @@ import forge.deck.FDeckViewer; import forge.error.BugReportDialog; import forge.gamemodes.match.HostedMatch; import forge.gui.FThreads; +import forge.gui.GuiBase; import forge.gui.download.GuiDownloadService; import forge.gui.interfaces.IGuiBase; import forge.gui.interfaces.IGuiGame; @@ -29,6 +30,7 @@ import forge.toolbox.GuiChoose; import forge.util.*; import java.io.File; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -256,12 +258,22 @@ public class GuiMobile implements IGuiBase { @Override public String showFileDialog(final String title, final String defaultDir) { - return ForgeConstants.USER_GAMES_DIR + "Test.fgs"; //TODO: Show dialog + //TODO Android FilePicker varies, since we cant test all possible android versions, just return a selection.. + List choice = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); + List v = getChoices(title, 0, 1, choice, null, null); + if (v == null || v.isEmpty()) + return null; + return defaultDir + "state" + v.get(0) + ".txt"; } @Override public File getSaveFile(final File defaultFile) { - return defaultFile; //TODO: Show dialog + //TODO Android FilePicker varies, since we cant test all possible android versions, just return a selection.. + List choice = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); + List v = GuiBase.getInterface().getChoices(Localizer.getInstance().getMessage("lblSelectGameStateFile"), 0, 1, choice, null, null); + if (v == null || v.isEmpty()) + return null; + return new File(ForgeConstants.USER_GAMES_DIR + "state" + v.get(0) + ".txt"); } @Override diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index ac27f470953..7adce915a8b 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2094,8 +2094,8 @@ lblHowManyAdditionalVotesDoYouWant=How many additional votes do you want? lblUnlimitedLands=Play Unlimited Lands lblGenerateMana=Generate Mana lblViewAll=View All Cards -lblSetupGame=Setup Game State -lblDumpGame=Dump Game State +lblSetupGame=Load Game State +lblDumpGame=Save Game State lblTutor=Tutor for Card lblRollbackPhase=Rollback Phase lblAddCounterPermanent=Add Counters to Card From 15116add0871ea280c3102cac1e8ae3fc718ed90 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 30 May 2023 19:53:10 +0800 Subject: [PATCH 2/4] remove redundant import --- forge-gui-mobile/src/forge/GuiMobile.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index c7c0d923c0b..234bfe07c7a 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -12,7 +12,6 @@ import forge.deck.FDeckViewer; import forge.error.BugReportDialog; import forge.gamemodes.match.HostedMatch; import forge.gui.FThreads; -import forge.gui.GuiBase; import forge.gui.download.GuiDownloadService; import forge.gui.interfaces.IGuiBase; import forge.gui.interfaces.IGuiGame; @@ -270,7 +269,7 @@ public class GuiMobile implements IGuiBase { public File getSaveFile(final File defaultFile) { //TODO Android FilePicker varies, since we cant test all possible android versions, just return a selection.. List choice = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); - List v = GuiBase.getInterface().getChoices(Localizer.getInstance().getMessage("lblSelectGameStateFile"), 0, 1, choice, null, null); + List v = getChoices(Localizer.getInstance().getMessage("lblSelectGameStateFile"), 0, 1, choice, null, null); if (v == null || v.isEmpty()) return null; return new File(ForgeConstants.USER_GAMES_DIR + "state" + v.get(0) + ".txt"); From b45d543e1a403f2fba8cceef6e35deba5248a6de Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 31 May 2023 11:55:59 +0800 Subject: [PATCH 3/4] include setcode and artid for gamestate --- .../src/main/java/forge/ai/GameState.java | 31 ++++++++++++++----- .../forge/screens/match/MatchController.java | 6 ++-- .../java/forge/gamemodes/puzzle/Puzzle.java | 4 +-- .../forge/player/PlayerControllerHuman.java | 4 +-- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index 31b5c7bb18c..2524260873a 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -107,7 +107,7 @@ public abstract class GameState { public GameState() { } - public abstract IPaperCard getPaperCard(String cardName); + public abstract IPaperCard getPaperCard(String cardName, String setCode, int artID); @Override public String toString() { @@ -258,9 +258,12 @@ public abstract class GameState { if (c.hasMergedCard()) { // we have to go by the current top card name here - newText.append(c.getTopMergedCard().getPaperCard().getName()); + newText.append(c.getTopMergedCard().getPaperCard().getName()).append("|Set:") + .append(c.getTopMergedCard().getPaperCard().getEdition()).append("|Art:") + .append(c.getTopMergedCard().getPaperCard().getArtIndex()); } else { - newText.append(c.getPaperCard().getName()); + newText.append(c.getPaperCard().getName()).append("|Set:").append(c.getPaperCard().getEdition()) + .append("|Art:").append(c.getPaperCard().getArtIndex()); } } if (c.isCommander()) { @@ -735,9 +738,11 @@ public abstract class GameState { String id = rememberedEnts.getValue(); Card exiledWith = idToCard.get(Integer.parseInt(id)); - exiledWith.addExiledCard(c); - c.setExiledWith(exiledWith); - c.setExiledBy(exiledWith.getController()); + if (exiledWith != null) { + exiledWith.addExiledCard(c); + c.setExiledWith(exiledWith); + c.setExiledBy(exiledWith.getController()); + } } } @@ -1196,6 +1201,18 @@ public abstract class GameState { } } + int artID = -1; + for (final String info : cardinfo) { + if (info.startsWith("Art:")) { + try { + artID = Integer.parseInt(info.substring(info.indexOf(':') + 1)); + } catch (Exception e) { + break; + } + break; + } + } + Card c; boolean hasSetCurSet = false; if (cardinfo[0].startsWith("t:")) { @@ -1212,7 +1229,7 @@ public abstract class GameState { } c = Card.fromPaperCard(token, player, player.getGame()); } else { - PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode); + PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode, artID); if (pc == null) { System.err.println("ERROR: Tried to create a non-existent card named " + cardinfo[0] + " (set: " + (setCode == null ? "any" : setCode) + ") when loading game state!"); continue; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 86898673586..753cb06dfd5 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -262,9 +262,9 @@ public class MatchController extends AbstractGuiGame { if (ph != null && saveState && ph.isMain()) { phaseGameState = new GameState() { - @Override //todo get specific card edition for this function? - public IPaperCard getPaperCard(final String cardName) { - return FModel.getMagicDb().getCommonCards().getCard(cardName); + @Override + public IPaperCard getPaperCard(final String cardName, final String setCode, final int artID) { + return FModel.getMagicDb().getCommonCards().getCard(cardName, setCode, artID); } }; try { diff --git a/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java b/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java index 3435a16252c..1c7fd952c85 100644 --- a/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java +++ b/forge-gui/src/main/java/forge/gamemodes/puzzle/Puzzle.java @@ -98,8 +98,8 @@ public class Puzzle extends GameState implements InventoryItem, Comparable Date: Wed, 31 May 2023 12:00:16 +0800 Subject: [PATCH 4/4] remove duplicated code --- forge-gui-mobile/src/forge/GuiMobile.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index 234bfe07c7a..a8de37b72f4 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -36,6 +36,7 @@ import java.util.List; public class GuiMobile implements IGuiBase { private final String assetsDir; private ImageFetcher imageFetcher = new LibGDXImageFetcher(); + private List integerChoices = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); public GuiMobile(final String assetsDir0) { assetsDir = assetsDir0; @@ -258,8 +259,7 @@ public class GuiMobile implements IGuiBase { @Override public String showFileDialog(final String title, final String defaultDir) { //TODO Android FilePicker varies, since we cant test all possible android versions, just return a selection.. - List choice = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); - List v = getChoices(title, 0, 1, choice, null, null); + List v = getChoices(title, 0, 1, integerChoices, null, null); if (v == null || v.isEmpty()) return null; return defaultDir + "state" + v.get(0) + ".txt"; @@ -268,8 +268,7 @@ public class GuiMobile implements IGuiBase { @Override public File getSaveFile(final File defaultFile) { //TODO Android FilePicker varies, since we cant test all possible android versions, just return a selection.. - List choice = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); - List v = getChoices(Localizer.getInstance().getMessage("lblSelectGameStateFile"), 0, 1, choice, null, null); + List v = getChoices(Localizer.getInstance().getMessage("lblSelectGameStateFile"), 0, 1, integerChoices, null, null); if (v == null || v.isEmpty()) return null; return new File(ForgeConstants.USER_GAMES_DIR + "state" + v.get(0) + ".txt");