mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user