diff --git a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java index 6169a11137f..38ebec48ec6 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/ArenaScene.java @@ -11,6 +11,7 @@ import com.github.tommyettinger.textra.TextraLabel; import forge.Forge; import forge.adventure.character.EnemySprite; import forge.adventure.data.ArenaData; +import forge.adventure.data.EnemyData; import forge.adventure.data.WorldData; import forge.adventure.stage.GameHUD; import forge.adventure.stage.IAfterMatch; @@ -40,6 +41,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { private final TextraLabel goldLabel; private final Group arenaPlane; + private final Table arenaTable; private final Random rand = new Random(); final Sprite fighterSpot; @@ -82,6 +84,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { doneButton = ui.findActor("done"); ScrollPane pane = ui.findActor("arena"); arenaPlane = new Table(); + arenaTable = new Table(); pane.setActor(arenaPlane); startButton = ui.findActor("start"); @@ -96,7 +99,7 @@ public class ArenaScene extends UIScene implements IAfterMatch { } private void loose() { - doneButton.setText(Forge.getLocalizer().getMessage("lblLeave")); + doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblLeave")); doneButton.layout(); startButton.setDisabled(true); arenaStarted = false; @@ -117,9 +120,9 @@ public class ArenaScene extends UIScene implements IAfterMatch { private void startArena() { goldLabel.setVisible(false); arenaStarted = true; - startButton.setText(Forge.getLocalizer().getMessage("lblContinue")); + startButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblContinue")); startButton.layout(); - doneButton.setText(Forge.getLocalizer().getMessage("lblConcede")); + doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblConcede")); doneButton.layout(); Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2"); Current.player().takeGold(arenaData.entryFee); @@ -128,30 +131,30 @@ public class ArenaScene extends UIScene implements IAfterMatch { @Override public void setWinner(boolean winner) { - Array winners = new Array<>(); + Array winners = new Array<>(); Array winnersEnemies = new Array<>(); for (int i = 0; i < fighters.size - 2; i += 2) { boolean leftWon = rand.nextBoolean(); if (leftWon) { winners.add(fighters.get(i)); winnersEnemies.add(enemies.get(i)); - moveFighter(fighters.get(i), true); - markLostFighter(fighters.get(i + 1)); + moveFighter(fighters.get(i).actor, true); + markLostFighter(fighters.get(i + 1).actor); } else { - markLostFighter(fighters.get(i)); - moveFighter(fighters.get(i + 1), false); + markLostFighter(fighters.get(i).actor); + moveFighter(fighters.get(i + 1).actor, false); winners.add(fighters.get(i + 1)); winnersEnemies.add(enemies.get(i + 1)); } } if (winner) { - markLostFighter(fighters.get(fighters.size - 2)); - moveFighter(fighters.get(fighters.size - 1), false); + markLostFighter(fighters.get(fighters.size - 2).actor); + moveFighter(fighters.get(fighters.size - 1).actor, false); winners.add(fighters.get(fighters.size - 1)); roundsWon++; } else { - markLostFighter(fighters.get(fighters.size - 1)); - moveFighter(fighters.get(fighters.size - 2), true); + markLostFighter(fighters.get(fighters.size - 1).actor); + moveFighter(fighters.get(fighters.size - 2).actor, true); winners.add(fighters.get(fighters.size - 2)); loose(); } @@ -161,9 +164,11 @@ public class ArenaScene extends UIScene implements IAfterMatch { if (roundsWon >= arenaData.rounds) { arenaStarted = false; startButton.setDisabled(true); - doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); + doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblDone")); doneButton.layout(); } + if (!Forge.isLandscapeMode()) + drawArena();//update } private void moveFighter(Actor actor, boolean leftPlayer) { @@ -181,9 +186,8 @@ public class ArenaScene extends UIScene implements IAfterMatch { leftImg.setPosition(actor.getX() + (i * (leftPlayer ? 1 : -1)) * gridSize + widthDiff / 2, actor.getY() + gridSize * 2 + widthDiff / 2); arenaPlane.addActor(leftImg); } - - - actor.moveBy((float) (gridSize * stepsToTheSide * (leftPlayer ? 1 : -1)), gridSize * 2f); + if (Forge.isLandscapeMode()) + actor.moveBy((float) (gridSize * stepsToTheSide * (leftPlayer ? 1 : -1)), gridSize * 2f); } private void markLostFighter(Actor fighter) { @@ -232,13 +236,13 @@ public class ArenaScene extends UIScene implements IAfterMatch { Array enemies = new Array<>(); - Array fighters = new Array<>(); + Array fighters = new Array<>(); Actor player; public void loadArenaData(ArenaData data, long seed) { - startButton.setText(Forge.getLocalizer().getMessage("lblStart")); + startButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblStart")); startButton.layout(); - doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); + doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblDone")); doneButton.layout(); arenaData = data; //rand.setSeed(seed); allow to reshuffle arena enemies for now @@ -251,12 +255,13 @@ public class ArenaScene extends UIScene implements IAfterMatch { for (int i = 0; i < numberOfEnemies; i++) { - EnemySprite enemy = new EnemySprite(WorldData.getEnemy(data.enemyPool[rand.nextInt(data.enemyPool.length)])); + EnemyData enemyData = WorldData.getEnemy(data.enemyPool[rand.nextInt(data.enemyPool.length)]); + EnemySprite enemy = new EnemySprite(enemyData); enemies.add(enemy); - fighters.add(new Image(enemy.getAvatar())); + fighters.add(new ArenaRecord(new Image(enemy.getAvatar()), enemyData.name)); } - fighters.add(new Image(Current.player().avatar())); - player = fighters.get(fighters.size - 1); + fighters.add(new ArenaRecord(new Image(Current.player().avatar()), Current.player().getName())); + player = fighters.get(fighters.size - 1).actor; goldLabel.setText(data.entryFee + " [+Gold]"); @@ -274,9 +279,9 @@ public class ArenaScene extends UIScene implements IAfterMatch { if (x % Math.pow(2, y + 1) == Math.pow(2, y)) { if (y == 0) { if (fighterIndex < fighters.size) { - float widthDiff = gridSize - fighters.get(fighterIndex).getWidth(); - fighters.get(fighterIndex).setPosition(x * gridSize + widthDiff / 2, y * gridSize * 2 + widthDiff / 2); - arenaPlane.addActor(fighters.get(fighterIndex)); + float widthDiff = gridSize - fighters.get(fighterIndex).actor.getWidth(); + fighters.get(fighterIndex).actor.setPosition(x * gridSize + widthDiff / 2, y * gridSize * 2 + widthDiff / 2); + arenaPlane.addActor(fighters.get(fighterIndex).actor); fighterIndex++; } } @@ -309,5 +314,56 @@ public class ArenaScene extends UIScene implements IAfterMatch { } } } + drawArena(); + } + + void drawArena() { + //center the arenaPlane + ScrollPane pane = ui.findActor("arena"); + if (pane != null) { + pane.clear(); + arenaTable.clear(); + if (Forge.isLandscapeMode()) { + arenaTable.add(Controls.newTextraLabel("[;][%150]" + GameScene.instance().getAdventurePlayerLocation(true) + " Arena")).top(); + arenaTable.row(); + arenaTable.add(arenaPlane).width(arenaPlane.getWidth()).height(arenaPlane.getHeight()); + pane.setActor(arenaTable); + } else { + arenaTable.add(Controls.newTextraLabel("[;][%150]" + GameScene.instance().getAdventurePlayerLocation(true) + " Arena")).colspan(3).top(); + arenaTable.row(); + int size = fighters.size; + int pv = 0; + for (int x = 0; x < size; x++) { + ArenaRecord record = fighters.get(x); + int divider = size == 1 ? 2 : size == 2 ? 3 : size; + arenaTable.add(record.actor).pad(20, 5, 20, 5).size(pane.getWidth() / divider); + pv++; + if (pv == 1) { + if (size > 1) + arenaTable.add(Controls.newTextraLabel("[%135]VS")).padLeft(5).padRight(5); + else { + arenaTable.row(); + arenaTable.add(Controls.newTextraLabel("[%135]Winner!")).padLeft(5).padRight(5); + } + } + if (pv == 2) { + arenaTable.row(); + pv = 0; + } + + } + pane.setActor(arenaTable); + } + } + } + + class ArenaRecord { + Actor actor; + String name; + + ArenaRecord(Actor a, String n) { + actor = a; + name = n; + } } } diff --git a/forge-gui-mobile/src/forge/adventure/util/Controls.java b/forge-gui-mobile/src/forge/adventure/util/Controls.java index 1ece0b829ba..a5f75cfd543 100644 --- a/forge-gui-mobile/src/forge/adventure/util/Controls.java +++ b/forge-gui-mobile/src/forge/adventure/util/Controls.java @@ -407,9 +407,10 @@ public class Controls { { if(textraFont==null) { - textraFont=new Font(getSkin().getFont("default"), 0f, 1.5f, 0f, 0f); - textraFont.addAtlas(Config.instance().getAtlas(Paths.ITEMS_ATLAS)); - textraFont.addAtlas(Config.instance().getAtlas(Paths.PIXELMANA_ATLAS)); + textraFont=new Font(getSkin().getFont("default"), 0f, 2f, 0f, 0f); + textraFont.integerPosition = false; + textraFont.addAtlas(Config.instance().getAtlas(Paths.ITEMS_ATLAS), 0, 0, 0); + textraFont.addAtlas(Config.instance().getAtlas(Paths.PIXELMANA_ATLAS), 0, -12f, 0); } return textraFont; } diff --git a/forge-gui-mobile/src/forge/assets/FSkinFont.java b/forge-gui-mobile/src/forge/assets/FSkinFont.java index f37611d6998..0c14f6b0112 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinFont.java +++ b/forge-gui-mobile/src/forge/assets/FSkinFont.java @@ -360,6 +360,7 @@ public class FSkinFont { return langUniqueCharacterSet.get(langCode); } StringBuilder characters = new StringBuilder(FreeTypeFontGenerator.DEFAULT_CHARS); + characters.append("•");//add bullet to default characters IntSet characterSet = new IntSet(); for (int offset = 0; offset < FreeTypeFontGenerator.DEFAULT_CHARS.length();) { final int codePoint = FreeTypeFontGenerator.DEFAULT_CHARS.codePointAt(offset); diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml index 55941e30ffe..efbe6e93c00 100644 --- a/forge-gui/pom.xml +++ b/forge-gui/pom.xml @@ -43,7 +43,7 @@ com.github.tommyettinger textratypist - 0.7.2 + 7fc2e7c333 com.thoughtworks.xstream diff --git a/forge-gui/res/adventure/Shandalar/ui/hud.json b/forge-gui/res/adventure/Shandalar/ui/hud.json index cd5cd4a7e2d..351d634f22e 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud.json @@ -141,10 +141,10 @@ { "type": "TextButton", "name": "openmap", - "text": "[%80]tr(lblZoom)", + "text": "[=][!][%140]tr(lblZoom)", "binding": "Map", "width": 80, - "height": 18, + "height": 20, "x": 0, "y": 80 } diff --git a/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json b/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json index 05262c935c3..4d6e34276df 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud_landscape.json @@ -130,10 +130,10 @@ { "type": "TextButton", "name": "openmap", - "text": "[%80]tr(lblZoom)", + "text": "[=][!][%140]tr(lblZoom)", "binding": "Map", "width": 80, - "height": 18, + "height": 20, "x": 0, "y": 80 }, diff --git a/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json b/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json index 1d1c430a66f..6e283a82e8e 100644 --- a/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json +++ b/forge-gui/res/adventure/Shandalar/ui/hud_portrait.json @@ -129,10 +129,10 @@ { "type": "TextButton", "name": "openmap", - "text": "[%80]tr(lblZoom)", + "text": "[=][!][%140]tr(lblZoom)", "binding": "Map", "width": 80, - "height": 18, + "height": 20, "x": 0, "y": 80 }, diff --git a/forge-gui/res/adventure/Shandalar/ui/map.json b/forge-gui/res/adventure/Shandalar/ui/map.json index 0e1c95cd771..eea758ef64f 100644 --- a/forge-gui/res/adventure/Shandalar/ui/map.json +++ b/forge-gui/res/adventure/Shandalar/ui/map.json @@ -12,7 +12,7 @@ { "type": "TextButton", "name": "done", - "text": "[%80]tr(lblBack)", + "text": "[=][!][%140]tr(lblBack)", "binding": "Back", "width": 48, "height": 20, diff --git a/forge-gui/res/adventure/Shandalar/ui/map_portrait.json b/forge-gui/res/adventure/Shandalar/ui/map_portrait.json index 6eeb1cba545..b535f5db61c 100644 --- a/forge-gui/res/adventure/Shandalar/ui/map_portrait.json +++ b/forge-gui/res/adventure/Shandalar/ui/map_portrait.json @@ -12,7 +12,7 @@ { "type": "TextButton", "name": "done", - "text": "[%80]tr(lblBack)", + "text": "[=][!][%140]tr(lblBack)", "binding": "Back", "width": 48, "height": 20,