diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 4428a81b5f2..e3968130e48 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -9,26 +9,17 @@ import com.badlogic.gdx.controllers.Controller; import com.badlogic.gdx.controllers.ControllerAdapter; import com.badlogic.gdx.controllers.ControllerListener; import com.badlogic.gdx.controllers.Controllers; -import com.badlogic.gdx.graphics.Cursor; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.TextureData; +import com.badlogic.gdx.graphics.*; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Clipboard; import forge.adventure.scene.*; -import forge.adventure.stage.MapStage; import forge.adventure.util.Config; import forge.adventure.world.WorldSave; import forge.animation.ForgeAnimation; -import forge.assets.Assets; -import forge.assets.AssetsDownloader; -import forge.assets.FSkin; -import forge.assets.FSkinFont; -import forge.assets.ImageCache; +import forge.assets.*; import forge.error.ExceptionHandler; import forge.gamemodes.limited.BoosterDraft; import forge.gui.FThreads; @@ -1003,8 +994,6 @@ public class Forge implements ApplicationListener { } storeScreen(); sceneWasSwapped = true; - if (newScene instanceof GameScene) - MapStage.getInstance().clearIsInMap(); currentScene = newScene; currentScene.enter(); @@ -1420,9 +1409,6 @@ public class Forge implements ApplicationListener { hasGamepad = true; if (controller.canVibrate()) controller.startVibration(200,1); - if (Forge.isMobileAdventureMode && Forge.currentScene instanceof UIScene) { - ((UIScene) Forge.currentScene).selectCurrent(); - } } @Override public void disconnected(Controller controller) { diff --git a/forge-gui-mobile/src/forge/adventure/data/DialogData.java b/forge-gui-mobile/src/forge/adventure/data/DialogData.java index 000a44c47bc..ce4810fc68f 100644 --- a/forge-gui-mobile/src/forge/adventure/data/DialogData.java +++ b/forge-gui-mobile/src/forge/adventure/data/DialogData.java @@ -13,6 +13,9 @@ public class DialogData { public String loctext; //References a localized string for the text body. public DialogData[] options; //List of sub-dialogs. Show up as options in the current one. + + public String voiceFile; + static public class ActionData { static public class QuestFlag { public String key; diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 39d63041b0a..fd1f48855db 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -412,7 +412,8 @@ public class AdventurePlayer implements Serializable, SaveFileContent { addGold(reward.getCount()); break; case Item: - inventoryItems.add(reward.getItem().name); + if(reward.getItem()!=null) + inventoryItems.add(reward.getItem().name); break; case Life: addMaxLife(reward.getCount()); diff --git a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java index 283b397d5dc..71d32fdf5d4 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java @@ -1,6 +1,5 @@ package forge.adventure.scene; -import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.scenes.scene2d.Actor; @@ -38,8 +37,6 @@ public class ArenaScene extends UIScene implements IAfterMatch { } private final TextraButton doneButton; - Dialog startDialog; - Dialog areYouSureDialog; private final TextraLabel goldLabel; private final Group arenaPlane; @@ -81,7 +78,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { if(!arenaStarted) ArenaScene.this.done(); else - areYouSureDialog.show(stage); + showAreYouSure(); }); ui.onButtonPress("start", () -> startButton()); doneButton = ui.findActor("done"); @@ -91,38 +88,15 @@ public class ArenaScene extends UIScene implements IAfterMatch { startButton=ui.findActor("start"); - startDialog = new Dialog(Forge.getLocalizer().getMessage("lblStart"), Controls.getSkin()) - { - protected void result(Object object) - { - if(object!=null&&object.equals(true)) - startArena(); - startDialog.hide(); - } - }; - startDialog.text("Do you want to go into the Arena?"); - startDialog.button(Forge.getLocalizer().getMessage("lblYes"), true); - startDialog.button(Forge.getLocalizer().getMessage("lblNo"), false); - ui.addActor(startDialog); - startDialog.hide(); - startDialog.getColor().a = 0; - areYouSureDialog= new Dialog(Forge.getLocalizer().getMessage("lblConcedeTitle"), Controls.getSkin()) - { - protected void result(Object object) - { - if(object!=null&&object.equals(true)) - loose(); - startDialog.hide(); - } - }; + } + + private void showAreYouSure() { + + Dialog areYouSureDialog= prepareDialog(Forge.getLocalizer().getMessage("lblConcedeTitle"),ButtonYes|ButtonNo,()->loose()); areYouSureDialog.text(Forge.getLocalizer().getMessage("lblConcedeCurrentGame")); - areYouSureDialog.button(Forge.getLocalizer().getMessage("lblYes"), true); - areYouSureDialog.button(Forge.getLocalizer().getMessage("lblNo"), false); - ui.addActor(areYouSureDialog); - areYouSureDialog.hide(); - areYouSureDialog.getColor().a = 0; + showDialog(areYouSureDialog); } private void loose() { @@ -134,7 +108,9 @@ public class ArenaScene extends UIScene implements IAfterMatch { private void startButton() { if(roundsWon ==0) { - startDialog.show(stage); + Dialog startDialog = prepareDialog(Forge.getLocalizer().getMessage("lblStart"), ButtonYes|ButtonNo,()->startArena()); + startDialog.text("Do you want to go into the Arena?"); + showDialog(startDialog); } else { @@ -271,13 +247,6 @@ public class ArenaScene extends UIScene implements IAfterMatch { } - @Override - public boolean keyPressed(int keycode) { - if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) { - done(); - } - return true; - } Array enemies = new Array<>(); Array fighters = new Array<>(); diff --git a/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java b/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java index 212b041c778..fb956790562 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DeckSelectScene.java @@ -1,9 +1,11 @@ package forge.adventure.scene; -import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.scenes.scene2d.InputEvent; -import com.badlogic.gdx.scenes.scene2d.ui.*; +import com.badlogic.gdx.scenes.scene2d.ui.Dialog; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.IntMap; @@ -17,11 +19,10 @@ import forge.adventure.util.Current; public class DeckSelectScene extends UIScene { private final IntMap buttons = new IntMap<>(); Color defColor; - Dialog dialog; TextField textInput; Table layout; TextraLabel header; - TextraButton back, edit, rename, dialogRenameBtn, dialogAbortBtn; + TextraButton back, edit, rename; int currentSlot = 0; ScrollPane scrollPane; @@ -44,20 +45,7 @@ public class DeckSelectScene extends UIScene { for (int i = 0; i < AdventurePlayer.NUMBER_OF_DECKS; i++) addDeckSlot(Forge.getLocalizer().getMessage("lblDeck")+": " + (i + 1), i); - dialog = Controls.newDialog(Forge.getLocalizer().getMessage("lblSave")); textInput = Controls.newTextField(""); - dialog.getButtonTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblNameYourSaveFile"))).colspan(2); - dialog.getButtonTable().row(); - dialog.getButtonTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblName")+": ")).align(Align.left); - dialog.getButtonTable().add(textInput).fillX().expandX(); - dialog.getButtonTable().row(); - dialogRenameBtn = Controls.newTextButton(Forge.getLocalizer().getMessage("lblRename"), () -> DeckSelectScene.this.rename()); - dialog.getButtonTable().add(dialogRenameBtn).align(Align.left).padLeft(15); - dialogAbortBtn = Controls.newTextButton(Forge.getLocalizer().getMessage("lblAbort"), () -> dialog.hide()); - dialog.getButtonTable().add(dialogAbortBtn).align(Align.right).padRight(15); - dialog.getColor().a = 0f; - dialog.hide(); - back = ui.findActor("return"); edit = ui.findActor("edit"); rename = ui.findActor("rename"); @@ -65,8 +53,7 @@ public class DeckSelectScene extends UIScene { ui.onButtonPress("edit", () -> DeckSelectScene.this.edit()); ui.onButtonPress("rename", () -> { textInput.setText(Current.player().getSelectedDeck().getName()); - dialog.show(stage); - selectActor(textInput, false); + showRenameDialog(); }); defColor = ui.findActor("return").getColor(); @@ -74,6 +61,17 @@ public class DeckSelectScene extends UIScene { scrollPane.setActor(layout); } + private void showRenameDialog() { + + Dialog dialog = prepareDialog(Forge.getLocalizer().getMessage("lblRenameDeck"),ButtonOk|ButtonAbort,()->DeckSelectScene.this.rename()); + dialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblNameYourSaveFile"))).colspan(2); + dialog.getContentTable().row(); + dialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblName")+": ")).align(Align.left); + dialog.getContentTable().add(textInput).fillX().expandX(); + dialog.getContentTable().row(); + showDialog(dialog); + } + private TextraButton addDeckSlot(String name, int i) { TextraButton button = Controls.newTextButton("-"); button.addListener(new ClickListener() { @@ -91,13 +89,11 @@ public class DeckSelectScene extends UIScene { layout.add(Controls.newLabel(name)).expandX().pad(2); layout.add(button).expandX().pad(2); buttons.put(i, button); + addToSelectable(new Selectable(button)); layout.row(); return button; } - public void back() { - Forge.switchToLast(); - } public boolean select(int slot) { currentSlot = slot; @@ -115,30 +111,15 @@ public class DeckSelectScene extends UIScene { } - @Override - public boolean keyPressed(int keycode) { - if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) { - back(); - } - return true; - } @Override public void enter() { - clearActorObjects(); for (int i = 0; i < AdventurePlayer.NUMBER_OF_DECKS; i++) { if (buttons.containsKey(i)) { buttons.get(i).setText(Current.player().getDeck(i).getName()); buttons.get(i).getTextraLabel().layout(); - addActorObject(buttons.get(i)); } } - addActorObject(back); - addActorObject(rename); - addActorObject(edit); - addActorObject(textInput); - addActorObject(dialogRenameBtn); - addActorObject(dialogAbortBtn); select(Current.player().getSelectedDeckIndex()); super.enter(); } @@ -146,7 +127,6 @@ public class DeckSelectScene extends UIScene { private void rename() { - dialog.hide(); String text = textInput.getText(); Current.player().renameDeck(text); buttons.get(currentSlot).setText(Current.player().getDeck(currentSlot).getName()); diff --git a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java index f6376d54828..595bf49453c 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java @@ -3,6 +3,7 @@ package forge.adventure.scene; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import forge.Forge; +import forge.adventure.stage.MapStage; import forge.adventure.stage.WorldStage; /** @@ -44,6 +45,7 @@ public class GameScene extends HudScene { @Override public void enter() { + MapStage.getInstance().clearIsInMap(); Forge.clearTransitionScreen(); Forge.clearCurrentScreen(); super.enter(); diff --git a/forge-gui-mobile/src/forge/adventure/scene/HudScene.java b/forge-gui-mobile/src/forge/adventure/scene/HudScene.java index bf9f45c8d0b..6bcb72a2a17 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/HudScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/HudScene.java @@ -2,12 +2,13 @@ package forge.adventure.scene; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.controllers.Controller; import com.badlogic.gdx.graphics.GL20; -import forge.Forge; import forge.adventure.stage.GameHUD; import forge.adventure.stage.GameStage; import forge.adventure.stage.IAfterMatch; import forge.adventure.stage.MapStage; +import forge.adventure.util.KeyBinding; /** * Hud base scene @@ -22,10 +23,18 @@ public abstract class HudScene extends Scene implements InputProcessor, IAfterMa hud = GameHUD.getInstance(); } + @Override + public void connected(final Controller controller) { + hud.ui.controllerConnected(); + } + @Override + public void disconnected(final Controller controller) { + hud.ui.controllerDisconnected(); + } @Override public boolean leave() { stage.leave(); - return true; + return super.leave(); } @Override @@ -33,6 +42,7 @@ public abstract class HudScene extends Scene implements InputProcessor, IAfterMa Gdx.input.setInputProcessor(this); stage.enter(); hud.enter(); + super.enter(); } @Override @@ -57,10 +67,8 @@ public abstract class HudScene extends Scene implements InputProcessor, IAfterMa @Override public boolean keyDown(int keycode) { - if (Forge.hasGamepad()) { - if (MapStage.getInstance().isDialogOnlyInput()) { - return MapStage.getInstance().buttonPress(keycode); - } + if (MapStage.getInstance().isDialogOnlyInput()) { + return MapStage.getInstance().dialogInput(keycode); } if (hud.keyDown(keycode)) return true; @@ -72,12 +80,23 @@ public abstract class HudScene extends Scene implements InputProcessor, IAfterMa @Override public boolean keyUp(int keycode) { + if (MapStage.getInstance().isDialogOnlyInput()) { + return true; + } if (hud.keyUp(keycode)) return true; if(isInHudOnlyMode()) return false; return stage.keyUp(keycode); } + @Override + public boolean buttonDown(Controller var1, int var2) { + return keyDown(KeyBinding.controllerButtonToKey(var1,var2)); + } + @Override + public boolean buttonUp(Controller var1, int var2) { + return keyUp(KeyBinding.controllerButtonToKey(var1,var2)); + } @Override public boolean keyTyped(char character) { @@ -134,6 +153,11 @@ public abstract class HudScene extends Scene implements InputProcessor, IAfterMa return stage.scrolled(amountX, amountY); } + @Override + public boolean axisMoved(Controller controller, int axisIndex, float value) { + + return stage.axisMoved(controller, axisIndex, value); + } @Override public void setWinner(boolean winner) { stage.setWinner(winner); diff --git a/forge-gui-mobile/src/forge/adventure/scene/InnScene.java b/forge-gui-mobile/src/forge/adventure/scene/InnScene.java index 550990ee873..1bcad6681ac 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/InnScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/InnScene.java @@ -1,6 +1,5 @@ package forge.adventure.scene; -import com.badlogic.gdx.Input; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.github.tommyettinger.textra.TextraButton; import forge.Forge; @@ -71,40 +70,11 @@ public class InnScene extends UIScene { tempHitPointCost.setDisabled(!purchaseable); tempHitPointCost.setText( tempHealthCost+"[+Gold]"); - clearActorObjects(); - addActorObject(tempHitPointCost); - addActorObject(sell); - addActorObject(leave); } private void sell() { Forge.switchScene(ShopScene.instance()); } - @Override - public boolean keyPressed(int keycode) { - if (keycode == Input.Keys.ESCAPE || keycode == Input.Keys.BACK) { - done(); - } - if (keycode == Input.Keys.DPAD_RIGHT) { - if (selectedActor == null) - selectActor(tempHitPointCost, false); - else - selectNextActor(false); - } else if ( keycode == Input.Keys.DPAD_LEFT) { - if (selectedActor == null) - selectActor(leave, false); - else - selectPreviousActor(false); - - } else if (keycode == Input.Keys.BUTTON_B) { - performTouch(leave); - - } else if (keycode == Input.Keys.BUTTON_A) { - performTouch(selectedActor); - - } - return true; - } } diff --git a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java index 362a550ed4a..940a9f27a5f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/InventoryScene.java @@ -1,13 +1,11 @@ package forge.adventure.scene; -import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Timer; import com.github.tommyettinger.textra.TextraButton; import com.github.tommyettinger.textra.TextraLabel; import forge.Forge; @@ -28,8 +26,6 @@ public class InventoryScene extends UIScene { Button equipButton; TextraButton useButton; TextraLabel itemDescription; - Dialog confirm; - Dialog useDialog; private final Table inventory; private final Array