From f5f3496e30d2ff1f9cfce951a74251a385a15889 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Wed, 12 Apr 2023 23:28:44 -0400 Subject: [PATCH 1/7] Added copy and delete deck --- .../adventure/player/AdventurePlayer.java | 33 +++++++++++++++- .../adventure/scene/DeckSelectScene.java | 38 +++++++++++++++++++ .../src/forge/adventure/scene/UIScene.java | 7 +++- .../adventure/Shandalar/ui/deck_selector.json | 24 ++++++++++-- forge-gui/res/languages/de-DE.properties | 2 + forge-gui/res/languages/en-US.properties | 4 +- forge-gui/res/languages/es-ES.properties | 4 +- forge-gui/res/languages/fr-FR.properties | 4 +- forge-gui/res/languages/it-IT.properties | 2 + forge-gui/res/languages/ja-JP.properties | 4 +- forge-gui/res/languages/pt-BR.properties | 5 ++- forge-gui/res/languages/zh-CN.properties | 4 +- 12 files changed, 118 insertions(+), 13 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 59064e3587c..4cfb3d58e6f 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Null; import com.google.common.collect.Lists; +import forge.Forge; import forge.adventure.data.*; import forge.adventure.util.*; import forge.adventure.world.WorldSave; @@ -74,7 +75,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { public PlayerStatistic getStatistic(){ return statistic; } private void clearDecks() { - for(int i=0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck("Empty Deck"); + for(int i=0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); deck = decks[0]; selectedDeckIndex = 0; } @@ -300,7 +301,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { for(int i=0;i { + this.delete(); + removeDialog(); + }, this::removeDialog); + + showDialog(deleteDialog); + } + + private void delete() { + Current.player().deleteDeck(); + updateDeckButton(currentSlot); + } + + private void updateDeckButton(int index) { + buttons.get(index).setText(Current.player().getDeck(index).getName()); + buttons.get(index).getTextraLabel().layout(); + buttons.get(index).layout(); + } + private void showRenameDialog() { if (renameDialog == null) { renameDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblRenameDeck"), null, diff --git a/forge-gui-mobile/src/forge/adventure/scene/UIScene.java b/forge-gui-mobile/src/forge/adventure/scene/UIScene.java index 887f18f9b6f..cf6fd2f7799 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/UIScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/UIScene.java @@ -243,8 +243,11 @@ public class UIScene extends Scene { if (label != null) dialog.text(label); TextraButton yes = Controls.newTextButton(stringYes, runnableYes); - TextraButton no = Controls.newTextButton(stringNo, runnableNo); - dialog.button(yes).button(no); + dialog.button(yes); + if (stringNo != null) { + TextraButton no = Controls.newTextButton(stringNo, runnableNo); + dialog.button(no); + } return dialog; } diff --git a/forge-gui/res/adventure/Shandalar/ui/deck_selector.json b/forge-gui/res/adventure/Shandalar/ui/deck_selector.json index d171071ed74..0ca362d7b99 100644 --- a/forge-gui/res/adventure/Shandalar/ui/deck_selector.json +++ b/forge-gui/res/adventure/Shandalar/ui/deck_selector.json @@ -25,7 +25,7 @@ "width": 100, "height": 30, "x": 365, - "y": 60 + "y": 10 }, { "type": "TextButton", @@ -34,7 +34,7 @@ "width": 100, "height": 30, "x": 365, - "y": 120 + "y": 60 }, { "type": "TextButton", @@ -44,7 +44,25 @@ "width": 100, "height": 30, "x": 365, - "y": 180 + "y": 110 + }, + { + "type": "TextButton", + "name": "copy", + "text": "tr(lblCopy)", + "width": 100, + "height": 30, + "x": 365, + "y": 160 + }, + { + "type": "TextButton", + "name": "delete", + "text": "tr(lblDelete)", + "width": 100, + "height": 30, + "x": 365, + "y": 210 } ] } \ No newline at end of file diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 66bc9749d37..ffd47053a66 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -2960,3 +2960,5 @@ lblExitToWoldMap=Zurück zur Weltkarte? lblStartArena=Willst du in die Arena gehen? lblWouldYouLikeDestroy=Möchten Sie {0} zerstören? lblAdventureDescription=Im Abenteuermodus erkunden Sie die sich ständig ändernde Landschaft von Shandalar und Duell-Kreaturen; um Gold, Scherben, Ausrüstung und neue Karten zu gewinnen, sie alle zu sammeln und der Beste zu werden! +lblEmptyDeck=Leeres Kartendeck +lblNoAvailableSlots=Keine verfgbaren Slots diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index a3000025656..ff38cac5738 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2968,4 +2968,6 @@ lblBoon=Boon lblExitToWoldMap=Exit to the World Map? lblStartArena=Do you want to go into the Arena? lblWouldYouLikeDestroy=Would you like to destroy {0}? -lblAdventureDescription=Adventure mode is where you explore the ever-changing landscape of Shandalar, and duel creatures to gain gold, shards, equipment and new cards to become the best and collect them all! \ No newline at end of file +lblAdventureDescription=Adventure mode is where you explore the ever-changing landscape of Shandalar, and duel creatures to gain gold, shards, equipment and new cards to become the best and collect them all! +lblEmptyDeck=Empty Deck +lblNoAvailableSlots=No available slots \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 30fa9aba09d..a847eb602e5 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2962,4 +2962,6 @@ lblBoon=Boon lblExitToWoldMap=Salir al mapa del mundo? lblStartArena=¿Quieres ir a la arena? lblWouldYouLikeDestroy=¿Le gustaría destruir {0}? -lblAdventureDescription=¡El modo de aventura es donde exploras el paisaje siempre cambiante de Shandalar, y criaturas de duelo para ganar oro, fragmentos, equipos y nuevas tarjetas para convertirte en el mejor y recogerlas a todos! \ No newline at end of file +lblAdventureDescription=¡El modo de aventura es donde exploras el paisaje siempre cambiante de Shandalar, y criaturas de duelo para ganar oro, fragmentos, equipos y nuevas tarjetas para convertirte en el mejor y recogerlas a todos! +lblEmptyDeck=Baraja de cartas vaca +lblNoAvailableSlots=No hay ranuras disponibles diff --git a/forge-gui/res/languages/fr-FR.properties b/forge-gui/res/languages/fr-FR.properties index 894bb4b92f5..889bca86224 100644 --- a/forge-gui/res/languages/fr-FR.properties +++ b/forge-gui/res/languages/fr-FR.properties @@ -2964,4 +2964,6 @@ lblBoon=Aubaine lblExitToWoldMap=Sortir sur la carte du monde? lblStartArena=Voulez-vous entrer dans l'arène? lblWouldYouLikeDestroy=Souhaitez-vous détruire {0}? -lblAdventureDescription=Le mode aventure est l'endroit où vous explorez le paysage en constante évolution de Shandalar, et des créatures duel pour gagner de l'or, des éclats, de l'équipement et de nouvelles cartes pour devenir les meilleurs et les récupérer tous! \ No newline at end of file +lblAdventureDescription=Le mode aventure est l'endroit où vous explorez le paysage en constante évolution de Shandalar, et des créatures duel pour gagner de l'or, des éclats, de l'équipement et de nouvelles cartes pour devenir les meilleurs et les récupérer tous! +lblEmptyDeck=Jeu de cartes vide +lblNoAvailableSlots=Aucune fente disponible diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 20950183eca..03b6c822be7 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -2966,3 +2966,5 @@ lblExitToWoldMap=Esci alla mappa del mondo? lblStartArena=Vuoi andare nell'arena? lblWouldYouLikeDestroy=Vorresti distruggere {0}? lblAdventureDescription=La modalità Adventure è dove esplori il paesaggio in continua evoluzione di Shandalar e le creature di duello per guadagnare oro, frammenti, attrezzature e nuove carte per diventare i migliori e raccoglierle tutte! +lblEmptyDeck=Mazzo di carte vuoto +lblNoAvailableSlots=Nessuno slot disponibile diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index d1642860f10..f70ba25cdde 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -2961,4 +2961,6 @@ lblBoon=ブーン lblExitToWoldMap=世界地図に終了しますか? lblStartArena=アリーナに行きたいですか? lblWouldYouLikeDestroy={0}を破壊しますか? -lblAdventureDescription=アドベンチャーモードは、金、破片、機器、新しいカードを獲得して最高のものになり、すべてを集めるために、Shandalarの絶えず変化する風景と決闘の生き物を探求する場所です! \ No newline at end of file +lblAdventureDescription=アドベンチャーモードは、金、破片、機器、新しいカードを獲得して最高のものになり、すべてを集めるために、Shandalarの絶えず変化する風景と決闘の生き物を探求する場所です! +lblEmptyDeck=空のトランプデッキ +lblNoAvailableSlots=使用可能なスロットがありませる。 diff --git a/forge-gui/res/languages/pt-BR.properties b/forge-gui/res/languages/pt-BR.properties index 34bd93140ca..cd0389545c4 100644 --- a/forge-gui/res/languages/pt-BR.properties +++ b/forge-gui/res/languages/pt-BR.properties @@ -3051,4 +3051,7 @@ lblBoon=Boon lblExitToWoldMap=Sair para o mapa do mundo? lblStartArena=Você quer entrar na arena? lblWouldYouLikeDestroy=Você gostaria de destruir {0}? -lblAdventureDescription=O modo de aventura é onde você explora a paisagem em constante mudança de Shandalar, e duelo para ganhar ouro, fragmentos, equipamentos e novos cartões para se tornarem os melhores e colecioná-los! \ No newline at end of file +lblAdventureDescription=O modo de aventura é onde você explora a paisagem em constante mudança de Shandalar, e duelo para ganhar ouro, fragmentos, equipamentos e novos cartões para se tornarem os melhores e colecioná-los! +lblEmptyDeck=Baralho de cartas vazio +lblNoAvailableSlots=No h slots disponveis + diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index c3c3fe5acf7..077b7e066d0 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2944,4 +2944,6 @@ lblBoon=恩赐 lblExitToWoldMap=退出世界地图? lblStartArena=您想进入竞技场吗? lblWouldYouLikeDestroy=您想销毁{0}吗? -lblAdventureDescription=冒险模式是您探索山达尔(Shandalar)不断变化的景观,以及决斗生物获得黄金,碎片,设备和新卡片,使其成为最好的,并收集所有这些! \ No newline at end of file +lblAdventureDescription=冒险模式是您探索山达尔(Shandalar)不断变化的景观,以及决斗生物获得黄金,碎片,设备和新卡片,使其成为最好的,并收集所有这些! +lblEmptyDeck=空牌 - 空牌 +lblNoAvailableSlots=没有可用的槽位 From 083a4cc8154c7c45df80f80128950ff8387d2054 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Wed, 12 Apr 2023 23:33:33 -0400 Subject: [PATCH 2/7] Added copy and delete deck --- forge-gui/res/languages/es-ES.properties | 2 +- forge-gui/res/languages/zh-CN.properties | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index a847eb602e5..14a6d8a327f 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -2962,6 +2962,6 @@ lblBoon=Boon lblExitToWoldMap=Salir al mapa del mundo? lblStartArena=¿Quieres ir a la arena? lblWouldYouLikeDestroy=¿Le gustaría destruir {0}? -lblAdventureDescription=¡El modo de aventura es donde exploras el paisaje siempre cambiante de Shandalar, y criaturas de duelo para ganar oro, fragmentos, equipos y nuevas tarjetas para convertirte en el mejor y recogerlas a todos! +lblAdventureDescription=El modo de aventura es donde exploras el paisaje siempre cambiante de Shandalar, y criaturas de duelo para ganar oro, fragmentos, equipos y nuevas tarjetas para convertirte en el mejor y recogerlas a todos! lblEmptyDeck=Baraja de cartas vaca lblNoAvailableSlots=No hay ranuras disponibles diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 077b7e066d0..0906a32b38e 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2944,6 +2944,6 @@ lblBoon=恩赐 lblExitToWoldMap=退出世界地图? lblStartArena=您想进入竞技场吗? lblWouldYouLikeDestroy=您想销毁{0}吗? -lblAdventureDescription=冒险模式是您探索山达尔(Shandalar)不断变化的景观,以及决斗生物获得黄金,碎片,设备和新卡片,使其成为最好的,并收集所有这些! -lblEmptyDeck=空牌 - 空牌 -lblNoAvailableSlots=没有可用的槽位 +lblAdventureDescription=????????????Shandalar?????????????????????????????????????????????? +lblEmptyDeck=??? +lblNoAvailableSlots=?????? From 993bc036354ec5a21ecb11c0094153da4b1075c7 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Wed, 12 Apr 2023 23:36:33 -0400 Subject: [PATCH 3/7] Regional language --- forge-gui/res/languages/zh-CN.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 0906a32b38e..077b7e066d0 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -2944,6 +2944,6 @@ lblBoon=恩赐 lblExitToWoldMap=退出世界地图? lblStartArena=您想进入竞技场吗? lblWouldYouLikeDestroy=您想销毁{0}吗? -lblAdventureDescription=????????????Shandalar?????????????????????????????????????????????? -lblEmptyDeck=??? -lblNoAvailableSlots=?????? +lblAdventureDescription=冒险模式是您探索山达尔(Shandalar)不断变化的景观,以及决斗生物获得黄金,碎片,设备和新卡片,使其成为最好的,并收集所有这些! +lblEmptyDeck=空牌 - 空牌 +lblNoAvailableSlots=没有可用的槽位 From a1366deff7670bef8ed5a04d659ce5784e2d0831 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Thu, 13 Apr 2023 06:55:03 -0400 Subject: [PATCH 4/7] not mucking with selected index --- forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 4cfb3d58e6f..15284a040a4 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -767,7 +767,6 @@ public class AdventurePlayer implements Serializable, SaveFileContent { */ public void deleteDeck() { decks[selectedDeckIndex] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); - selectedDeckIndex = 0; } /** From a743e412cefc92e05a3af2839a50e441d4325d1b Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Thu, 13 Apr 2023 08:23:32 -0400 Subject: [PATCH 5/7] updating local deck, and selecting / scrolling to new copy --- .../src/forge/adventure/player/AdventurePlayer.java | 2 +- .../src/forge/adventure/scene/DeckSelectScene.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 15284a040a4..a433d27a44f 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -766,7 +766,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { * Deletes a deck by replacing the current selected deck with a new deck */ public void deleteDeck() { - decks[selectedDeckIndex] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); + deck = decks[selectedDeckIndex] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); } /** diff --git a/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java b/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java index a05847b1423..bc21ed3329f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java @@ -77,6 +77,8 @@ public class DeckSelectScene extends UIScene { } else { updateDeckButton(index); + select(index); + scrollPane.scrollTo(buttons.get(index).getX(), buttons.get(index).getY(), 0, 0); } } @@ -84,10 +86,7 @@ public class DeckSelectScene extends UIScene { if (Current.player().isEmptyDeck(currentSlot)) return; Dialog deleteDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblDelete"), Forge.getLocalizer().getMessage("lblAreYouSureProceedDelete"), Forge.getLocalizer().getMessage("lblOk"), - Forge.getLocalizer().getMessage("lblAbort"), () -> { - this.delete(); - removeDialog(); - }, this::removeDialog); + Forge.getLocalizer().getMessage("lblAbort"), this::delete, this::removeDialog); showDialog(deleteDialog); } @@ -95,6 +94,7 @@ public class DeckSelectScene extends UIScene { private void delete() { Current.player().deleteDeck(); updateDeckButton(currentSlot); + removeDialog(); } private void updateDeckButton(int index) { From cf86796b0ea120eb8b99b94034775b5d80bf4760 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Thu, 13 Apr 2023 19:59:07 -0400 Subject: [PATCH 6/7] Add portrait-mode layout for delete/copy buttons --- .../Shandalar/ui/deck_selector_portrait.json | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/forge-gui/res/adventure/Shandalar/ui/deck_selector_portrait.json b/forge-gui/res/adventure/Shandalar/ui/deck_selector_portrait.json index 65a62df2d12..af93096cca5 100644 --- a/forge-gui/res/adventure/Shandalar/ui/deck_selector_portrait.json +++ b/forge-gui/res/adventure/Shandalar/ui/deck_selector_portrait.json @@ -15,17 +15,25 @@ "x": 4, "y": 4, "width": 262, - "height": 442 + "height": 414 }, { "type": "TextButton", - "name": "return", - "text": "tr(lblBack)", - "binding": "Back", + "name": "delete", + "text": "tr(lblDelete)", "width": 86, "height": 30, "x": 4, - "y": 448 + "y": 418 + }, + { + "type": "TextButton", + "name": "copy", + "text": "tr(lblCopy)", + "width": 86, + "height": 30, + "x": 92, + "y": 418 }, { "type": "TextButton", @@ -34,7 +42,17 @@ "binding": "Equip", "width": 86, "height": 30, - "x": 92, + "x": 180, + "y": 418 + }, + { + "type": "TextButton", + "name": "return", + "text": "tr(lblBack)", + "binding": "Back", + "width": 130, + "height": 30, + "x": 4, "y": 448 }, { @@ -42,9 +60,9 @@ "name": "edit", "text": "tr(lblEdit)", "binding": "Use", - "width": 86, + "width": 130, "height": 30, - "x": 180, + "x": 136, "y": 448 } ] From 0505b6c709ebb5e4e606e1f76745898223929a47 Mon Sep 17 00:00:00 2001 From: Benjamin Perry Date: Thu, 13 Apr 2023 20:10:21 -0400 Subject: [PATCH 7/7] Merge conflicts --- .../src/forge/adventure/player/AdventurePlayer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 4641780a4c1..b78a6271577 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -79,7 +79,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } private void clearDecks() { - for (int i = 0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck("Empty Deck"); + for (int i = 0; i < NUMBER_OF_DECKS; i++) decks[i] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); deck = decks[0]; selectedDeckIndex = 0; } @@ -348,7 +348,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { for (int i = 0; i < NUMBER_OF_DECKS; i++) { if (!data.containsKey("deck_name_" + i)) { if (i == 0) decks[i] = deck; - else decks[i] = new Deck("Empty Deck"); + else decks[i] = new Deck(Forge.getLocalizer().getMessage("lblEmptyDeck")); continue; } decks[i] = new Deck(data.readString("deck_name_" + i));