Merge pull request #2612 from kevlahnota/newmaster2

update ArenaScene
This commit is contained in:
Anthony Calosa
2023-03-05 02:58:05 +08:00
committed by GitHub
9 changed files with 96 additions and 38 deletions

View File

@@ -11,6 +11,7 @@ import com.github.tommyettinger.textra.TextraLabel;
import forge.Forge; import forge.Forge;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.data.ArenaData; import forge.adventure.data.ArenaData;
import forge.adventure.data.EnemyData;
import forge.adventure.data.WorldData; import forge.adventure.data.WorldData;
import forge.adventure.stage.GameHUD; import forge.adventure.stage.GameHUD;
import forge.adventure.stage.IAfterMatch; import forge.adventure.stage.IAfterMatch;
@@ -40,6 +41,7 @@ public class ArenaScene extends UIScene implements IAfterMatch {
private final TextraLabel goldLabel; private final TextraLabel goldLabel;
private final Group arenaPlane; private final Group arenaPlane;
private final Table arenaTable;
private final Random rand = new Random(); private final Random rand = new Random();
final Sprite fighterSpot; final Sprite fighterSpot;
@@ -82,6 +84,7 @@ public class ArenaScene extends UIScene implements IAfterMatch {
doneButton = ui.findActor("done"); doneButton = ui.findActor("done");
ScrollPane pane = ui.findActor("arena"); ScrollPane pane = ui.findActor("arena");
arenaPlane = new Table(); arenaPlane = new Table();
arenaTable = new Table();
pane.setActor(arenaPlane); pane.setActor(arenaPlane);
startButton = ui.findActor("start"); startButton = ui.findActor("start");
@@ -96,7 +99,7 @@ public class ArenaScene extends UIScene implements IAfterMatch {
} }
private void loose() { private void loose() {
doneButton.setText(Forge.getLocalizer().getMessage("lblLeave")); doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblLeave"));
doneButton.layout(); doneButton.layout();
startButton.setDisabled(true); startButton.setDisabled(true);
arenaStarted = false; arenaStarted = false;
@@ -117,9 +120,9 @@ public class ArenaScene extends UIScene implements IAfterMatch {
private void startArena() { private void startArena() {
goldLabel.setVisible(false); goldLabel.setVisible(false);
arenaStarted = true; arenaStarted = true;
startButton.setText(Forge.getLocalizer().getMessage("lblContinue")); startButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblContinue"));
startButton.layout(); startButton.layout();
doneButton.setText(Forge.getLocalizer().getMessage("lblConcede")); doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblConcede"));
doneButton.layout(); doneButton.layout();
Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2"); Forge.setCursor(null, Forge.magnifyToggle ? "1" : "2");
Current.player().takeGold(arenaData.entryFee); Current.player().takeGold(arenaData.entryFee);
@@ -128,30 +131,30 @@ public class ArenaScene extends UIScene implements IAfterMatch {
@Override @Override
public void setWinner(boolean winner) { public void setWinner(boolean winner) {
Array<Actor> winners = new Array<>(); Array<ArenaRecord> winners = new Array<>();
Array<EnemySprite> winnersEnemies = new Array<>(); Array<EnemySprite> winnersEnemies = new Array<>();
for (int i = 0; i < fighters.size - 2; i += 2) { for (int i = 0; i < fighters.size - 2; i += 2) {
boolean leftWon = rand.nextBoolean(); boolean leftWon = rand.nextBoolean();
if (leftWon) { if (leftWon) {
winners.add(fighters.get(i)); winners.add(fighters.get(i));
winnersEnemies.add(enemies.get(i)); winnersEnemies.add(enemies.get(i));
moveFighter(fighters.get(i), true); moveFighter(fighters.get(i).actor, true);
markLostFighter(fighters.get(i + 1)); markLostFighter(fighters.get(i + 1).actor);
} else { } else {
markLostFighter(fighters.get(i)); markLostFighter(fighters.get(i).actor);
moveFighter(fighters.get(i + 1), false); moveFighter(fighters.get(i + 1).actor, false);
winners.add(fighters.get(i + 1)); winners.add(fighters.get(i + 1));
winnersEnemies.add(enemies.get(i + 1)); winnersEnemies.add(enemies.get(i + 1));
} }
} }
if (winner) { if (winner) {
markLostFighter(fighters.get(fighters.size - 2)); markLostFighter(fighters.get(fighters.size - 2).actor);
moveFighter(fighters.get(fighters.size - 1), false); moveFighter(fighters.get(fighters.size - 1).actor, false);
winners.add(fighters.get(fighters.size - 1)); winners.add(fighters.get(fighters.size - 1));
roundsWon++; roundsWon++;
} else { } else {
markLostFighter(fighters.get(fighters.size - 1)); markLostFighter(fighters.get(fighters.size - 1).actor);
moveFighter(fighters.get(fighters.size - 2), true); moveFighter(fighters.get(fighters.size - 2).actor, true);
winners.add(fighters.get(fighters.size - 2)); winners.add(fighters.get(fighters.size - 2));
loose(); loose();
} }
@@ -161,9 +164,11 @@ public class ArenaScene extends UIScene implements IAfterMatch {
if (roundsWon >= arenaData.rounds) { if (roundsWon >= arenaData.rounds) {
arenaStarted = false; arenaStarted = false;
startButton.setDisabled(true); startButton.setDisabled(true);
doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblDone"));
doneButton.layout(); doneButton.layout();
} }
if (!Forge.isLandscapeMode())
drawArena();//update
} }
private void moveFighter(Actor actor, boolean leftPlayer) { 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); leftImg.setPosition(actor.getX() + (i * (leftPlayer ? 1 : -1)) * gridSize + widthDiff / 2, actor.getY() + gridSize * 2 + widthDiff / 2);
arenaPlane.addActor(leftImg); arenaPlane.addActor(leftImg);
} }
if (Forge.isLandscapeMode())
actor.moveBy((float) (gridSize * stepsToTheSide * (leftPlayer ? 1 : -1)), gridSize * 2f);
actor.moveBy((float) (gridSize * stepsToTheSide * (leftPlayer ? 1 : -1)), gridSize * 2f);
} }
private void markLostFighter(Actor fighter) { private void markLostFighter(Actor fighter) {
@@ -232,13 +236,13 @@ public class ArenaScene extends UIScene implements IAfterMatch {
Array<EnemySprite> enemies = new Array<>(); Array<EnemySprite> enemies = new Array<>();
Array<Actor> fighters = new Array<>(); Array<ArenaRecord> fighters = new Array<>();
Actor player; Actor player;
public void loadArenaData(ArenaData data, long seed) { public void loadArenaData(ArenaData data, long seed) {
startButton.setText(Forge.getLocalizer().getMessage("lblStart")); startButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblStart"));
startButton.layout(); startButton.layout();
doneButton.setText(Forge.getLocalizer().getMessage("lblDone")); doneButton.setText("[=][!][%140]" + Forge.getLocalizer().getMessage("lblDone"));
doneButton.layout(); doneButton.layout();
arenaData = data; arenaData = data;
//rand.setSeed(seed); allow to reshuffle arena enemies for now //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++) { 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); 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())); fighters.add(new ArenaRecord(new Image(Current.player().avatar()), Current.player().getName()));
player = fighters.get(fighters.size - 1); player = fighters.get(fighters.size - 1).actor;
goldLabel.setText(data.entryFee + " [+Gold]"); 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 (x % Math.pow(2, y + 1) == Math.pow(2, y)) {
if (y == 0) { if (y == 0) {
if (fighterIndex < fighters.size) { if (fighterIndex < fighters.size) {
float widthDiff = gridSize - fighters.get(fighterIndex).getWidth(); float widthDiff = gridSize - fighters.get(fighterIndex).actor.getWidth();
fighters.get(fighterIndex).setPosition(x * gridSize + widthDiff / 2, y * gridSize * 2 + widthDiff / 2); fighters.get(fighterIndex).actor.setPosition(x * gridSize + widthDiff / 2, y * gridSize * 2 + widthDiff / 2);
arenaPlane.addActor(fighters.get(fighterIndex)); arenaPlane.addActor(fighters.get(fighterIndex).actor);
fighterIndex++; 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;
}
} }
} }

View File

@@ -407,9 +407,10 @@ public class Controls {
{ {
if(textraFont==null) if(textraFont==null)
{ {
textraFont=new Font(getSkin().getFont("default"), 0f, 1.5f, 0f, 0f); textraFont=new Font(getSkin().getFont("default"), 0f, 2f, 0f, 0f);
textraFont.addAtlas(Config.instance().getAtlas(Paths.ITEMS_ATLAS)); textraFont.integerPosition = false;
textraFont.addAtlas(Config.instance().getAtlas(Paths.PIXELMANA_ATLAS)); textraFont.addAtlas(Config.instance().getAtlas(Paths.ITEMS_ATLAS), 0, 0, 0);
textraFont.addAtlas(Config.instance().getAtlas(Paths.PIXELMANA_ATLAS), 0, -12f, 0);
} }
return textraFont; return textraFont;
} }

View File

@@ -360,6 +360,7 @@ public class FSkinFont {
return langUniqueCharacterSet.get(langCode); return langUniqueCharacterSet.get(langCode);
} }
StringBuilder characters = new StringBuilder(FreeTypeFontGenerator.DEFAULT_CHARS); StringBuilder characters = new StringBuilder(FreeTypeFontGenerator.DEFAULT_CHARS);
characters.append("");//add bullet to default characters
IntSet characterSet = new IntSet(); IntSet characterSet = new IntSet();
for (int offset = 0; offset < FreeTypeFontGenerator.DEFAULT_CHARS.length();) { for (int offset = 0; offset < FreeTypeFontGenerator.DEFAULT_CHARS.length();) {
final int codePoint = FreeTypeFontGenerator.DEFAULT_CHARS.codePointAt(offset); final int codePoint = FreeTypeFontGenerator.DEFAULT_CHARS.codePointAt(offset);

View File

@@ -43,7 +43,7 @@
<dependency> <dependency>
<groupId>com.github.tommyettinger</groupId> <groupId>com.github.tommyettinger</groupId>
<artifactId>textratypist</artifactId> <artifactId>textratypist</artifactId>
<version>0.7.2</version> <version>7fc2e7c333</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.thoughtworks.xstream</groupId> <groupId>com.thoughtworks.xstream</groupId>

View File

@@ -141,10 +141,10 @@
{ {
"type": "TextButton", "type": "TextButton",
"name": "openmap", "name": "openmap",
"text": "[%80]tr(lblZoom)", "text": "[=][!][%140]tr(lblZoom)",
"binding": "Map", "binding": "Map",
"width": 80, "width": 80,
"height": 18, "height": 20,
"x": 0, "x": 0,
"y": 80 "y": 80
} }

View File

@@ -130,10 +130,10 @@
{ {
"type": "TextButton", "type": "TextButton",
"name": "openmap", "name": "openmap",
"text": "[%80]tr(lblZoom)", "text": "[=][!][%140]tr(lblZoom)",
"binding": "Map", "binding": "Map",
"width": 80, "width": 80,
"height": 18, "height": 20,
"x": 0, "x": 0,
"y": 80 "y": 80
}, },

View File

@@ -129,10 +129,10 @@
{ {
"type": "TextButton", "type": "TextButton",
"name": "openmap", "name": "openmap",
"text": "[%80]tr(lblZoom)", "text": "[=][!][%140]tr(lblZoom)",
"binding": "Map", "binding": "Map",
"width": 80, "width": 80,
"height": 18, "height": 20,
"x": 0, "x": 0,
"y": 80 "y": 80
}, },

View File

@@ -12,7 +12,7 @@
{ {
"type": "TextButton", "type": "TextButton",
"name": "done", "name": "done",
"text": "[%80]tr(lblBack)", "text": "[=][!][%140]tr(lblBack)",
"binding": "Back", "binding": "Back",
"width": 48, "width": 48,
"height": 20, "height": 20,

View File

@@ -12,7 +12,7 @@
{ {
"type": "TextButton", "type": "TextButton",
"name": "done", "name": "done",
"text": "[%80]tr(lblBack)", "text": "[=][!][%140]tr(lblBack)",
"binding": "Back", "binding": "Back",
"width": 48, "width": 48,
"height": 20, "height": 20,