Merge branch 'master' into 'master'

Adventure portrait mode

See merge request core-developers/forge!6325
This commit is contained in:
Anthony Calosa
2022-03-02 02:56:02 +00:00
23 changed files with 543 additions and 154 deletions

View File

@@ -598,11 +598,9 @@ public class Forge implements ApplicationListener {
} //don't allow exiting multiple times
final Localizer localizer = Localizer.getInstance();
final String title = Forge.isLandscapeMode() && GuiBase.isAndroid() ? "" : localizer.getMessage("lblExitForge");
final List<String> options = new ArrayList<>();
options.add(localizer.getMessage("lblExit"));
if (Forge.isLandscapeMode() && GuiBase.isAndroid())
options.add(localizer.getMessageorUseDefault("lblAdventureMode", "Adventure Mode"));
options.add(localizer.getMessage("lblAdventure"));
options.add(localizer.getMessage("lblCancel"));
Callback<Integer> callback = new Callback<Integer>() {
@@ -611,7 +609,7 @@ public class Forge implements ApplicationListener {
if (result == 0) {
exited = true;
exitAnimation(false);
} else if (result == 1 && Forge.isLandscapeMode() && GuiBase.isAndroid()) {
} else if (result == 1) {
switchToAdventure();
}
}
@@ -620,7 +618,7 @@ public class Forge implements ApplicationListener {
if (silent) {
callback.run(0);
} else {
FOptionPane.showOptionDialog(localizer.getMessage("lblAreYouSureYouWishExitForge"), title,
FOptionPane.showOptionDialog(localizer.getMessage("lblAreYouSureYouWishExitForge"), "",
FOptionPane.QUESTION_ICON, options, 0, callback);
}
}
@@ -725,7 +723,7 @@ public class Forge implements ApplicationListener {
openAdventure();
exited = false;
}
}, ScreenUtils.getFrameBufferTexture(), false, false));
}, null, false, true));
}
public static void setTransitionScreen(TransitionScreen screen) {

View File

@@ -16,7 +16,6 @@ import forge.Forge;
import forge.adventure.player.AdventurePlayer;
import forge.adventure.util.Controls;
import forge.adventure.util.Current;
import forge.gui.GuiBase;
public class DeckSelectScene extends UIScene {
private final IntMap<TextButton> buttons = new IntMap<>();
@@ -25,10 +24,11 @@ public class DeckSelectScene extends UIScene {
TextField textInput;
Table layout;
Label header;
TextButton back, edit, rename;
int currentSlot = 0;
public DeckSelectScene() {
super(GuiBase.isAndroid() ? "ui/deck_selector_mobile.json" : "ui/deck_selector.json");
super(Forge.isLandscapeMode() ? "ui/deck_selector_mobile.json" : "ui/deck_selector.json");
}
private TextButton addDeckSlot(String name, int i) {
@@ -105,24 +105,46 @@ public class DeckSelectScene extends UIScene {
dialog = Controls.newDialog("Save");
textInput = Controls.newTextField("");
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Rename", new Runnable() {
@Override
public void run() {
DeckSelectScene.this.rename();
}
})).align(Align.left);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
dialog.hide();
}
})).align(Align.left);
if (!Forge.isLandscapeMode()) {
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2).pad(2, 15, 2, 15);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left).pad(2, 15, 2, 2);
dialog.getButtonTable().add(textInput).fillX().expandX().padRight(15);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Rename", new Runnable() {
@Override
public void run() {
DeckSelectScene.this.rename();
}
})).align(Align.left).padLeft(15);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
dialog.hide();
}
})).align(Align.right).padRight(15);
} else {
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Rename", new Runnable() {
@Override
public void run() {
DeckSelectScene.this.rename();
}
})).align(Align.left);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
dialog.hide();
}
})).align(Align.left);
}
back = ui.findActor("return");
edit = ui.findActor("edit");
rename = ui.findActor("rename");
ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
@@ -147,6 +169,28 @@ public class DeckSelectScene extends UIScene {
ScrollPane scrollPane = ui.findActor("deckSlots");
scrollPane.setActor(layout);
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
float sW = w - 20;
float oX = w/2 - sW/2;
float h = Scene.GetIntendedHeight();
float sH = (h - 10)/12;
scrollPane.setWidth(sW);
scrollPane.setHeight(sH*11);
scrollPane.setX(oX);
float rW = (w - 20)/3;
float rX = w/2 - rW/2;
rename.setWidth(rW);
rename.setHeight(20);
rename.setX(rX);
back.setWidth(rW);
back.setHeight(20);
back.setX(rename.getX()-rW);
edit.setWidth(rW);
edit.setHeight(20);
edit.setX(rename.getRight());
}
}
private void rename() {

View File

@@ -2,6 +2,7 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import forge.Forge;
import forge.adventure.stage.WorldStage;
@@ -10,6 +11,7 @@ import forge.adventure.stage.WorldStage;
* does render the WorldStage and HUD
*/
public class GameScene extends HudScene {
private float cameraWidth = 0f, cameraHeight = 0f;
public GameScene() {
super(WorldStage.getInstance());
@@ -28,6 +30,7 @@ public class GameScene extends HudScene {
}
@Override
public void render() {
@@ -40,14 +43,23 @@ public class GameScene extends HudScene {
@Override
public void resLoaded() {
//set initial camera width and height
if (cameraWidth == 0f)
cameraWidth = stage.getCamera().viewportWidth;
if (cameraHeight == 0f)
cameraHeight = stage.getCamera().viewportHeight;
}
@Override
public void enter() {
Forge.clearTransitionScreen();
Forge.clearCurrentScreen();
if (!Forge.isLandscapeMode()) {
//Trick: switch the camera viewport width and height so it looks normal since we shrink the width for portrait mode for WorldStage
stage.getCamera().viewportHeight = cameraWidth;
stage.getCamera().viewportWidth = cameraHeight;
((OrthographicCamera)stage.getCamera()).zoom = 0.85f;
}
super.enter();
}

View File

@@ -1,6 +1,7 @@
package forge.adventure.scene;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import forge.Forge;
import forge.adventure.stage.GameHUD;
@@ -10,6 +11,8 @@ import forge.adventure.util.Current;
* Scene for the Inn in towns
*/
public class InnScene extends UIScene {
TextButton heal, sell, leave;
Image healIcon, sellIcon, leaveIcon;
public InnScene() {
super("ui/inn.json");
@@ -50,7 +53,17 @@ public class InnScene extends UIScene {
InnScene.this.sell();
}
});
TextButton doneButton = ui.findActor("done");
leave = ui.findActor("done");
sell = ui.findActor("sell");
heal = ui.findActor("heal");
leaveIcon = ui.findActor("leaveIcon");
healIcon = ui.findActor("healIcon");
sellIcon = ui.findActor("sellIcon");
if (!Forge.isLandscapeMode()) {
sellIcon.setHeight(70);
healIcon.setHeight(70);
leaveIcon.setHeight(70);
}
}
private void sell() {

View File

@@ -5,6 +5,10 @@ import com.badlogic.gdx.Input;
import com.badlogic.gdx.scenes.scene2d.Event;
import com.badlogic.gdx.scenes.scene2d.EventListener;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Array;
@@ -15,7 +19,6 @@ import forge.adventure.util.Config;
import forge.adventure.util.Selector;
import forge.adventure.world.WorldSave;
import forge.deck.Deck;
import forge.gui.GuiBase;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
import forge.player.GamePlayerUtil;
@@ -36,9 +39,13 @@ public class NewGameScene extends UIScene {
private Selector deck;
private Selector gender;
private Selector difficulty;
private ScrollPane scrollPane;
private Label titleL, avatarL, nameL, raceL, genderL, difficultyL, deckL;
private ImageButton leftArrow, rightArrow;
private TextButton backButton, startButton;
public NewGameScene() {
super(GuiBase.isAndroid() ? "ui/new_game_mobile.json" : "ui/new_game.json");
super(Forge.isLandscapeMode() ? "ui/new_game_mobile.json" : "ui/new_game.json");
}
public boolean start() {
@@ -144,6 +151,76 @@ public class NewGameScene extends UIScene {
}
});
scrollPane = ui.findActor("scroll");
titleL = ui.findActor("titleL");
avatarL = ui.findActor("avatarL");
nameL = ui.findActor("nameL");
raceL = ui.findActor("raceL");
genderL = ui.findActor("genderL");
difficultyL = ui.findActor("difficultyL");
deckL = ui.findActor("deckL");
leftArrow = ui.findActor("leftAvatar");
rightArrow = ui.findActor("rightAvatar");
backButton = ui.findActor("back");
startButton = ui.findActor("start");
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
float sW = w - 20;
float oX = w/2 - sW/2;
float h = Scene.GetIntendedHeight();
float sH = (h - 10)/12;
selectedName.setWidth(280);
selectedName.setX(w/2- selectedName.getWidth()/2);
nameL.setFontScaleX(2);
titleL.setFontScaleX(2);
titleL.setX(selectedName.getX()-20);
avatarImage.setScaleX(2);
avatarImage.setX(w/2-avatarImage.getWidth());
leftArrow.getImage().setScaleX(2);
leftArrow.setX(selectedName.getX());
rightArrow.getImage().setScaleX(2);
rightArrow.setX(selectedName.getRight()-(rightArrow.getWidth()*2));
avatarL.setFontScaleX(2);
race.setScaleX(2);
race.setWidth(140);
race.setX(selectedName.getX());
raceL.setFontScaleX(2);
gender.setScaleX(2);
gender.setWidth(140);
gender.setX(selectedName.getX());
genderL.setFontScaleX(2);
difficulty.setScaleX(2);
difficulty.setWidth(140);
difficulty.setX(selectedName.getX());
difficultyL.setFontScaleX(2);
deck.setScaleX(2);
deck.setWidth(140);
deck.setX(selectedName.getX());
deckL.setFontScaleX(2);
scrollPane.setWidth(sW);
scrollPane.setHeight(sH*11);
scrollPane.setX(oX);
float bW = w - 165;
float bX = w/2 - bW/2;
backButton.setWidth(bW/2);
backButton.setHeight(20);
backButton.setX(bX);
startButton.setWidth(bW/2);
startButton.setHeight(20);
startButton.setX(backButton.getRight());
}
updateAvatar();
}

View File

@@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Align;
import forge.Forge;
@@ -24,12 +25,13 @@ import java.util.Map;
public class PlayerStatisticScene extends UIScene {
Image avatar;
Image avatar, avatarBorder, lifeIcon, goldIcon;
Label money, life;
Label totalWins;
Label totalLoss;
Label lossWinRatio;
Label wins, totalWins;
Label loss, totalLoss;
Label winloss, lossWinRatio;
Label playerName;
TextButton back;
private Table enemiesGroup;
public PlayerStatisticScene() {
@@ -106,6 +108,8 @@ public class PlayerStatisticScene extends UIScene {
Image enemyImage = new Image();
enemyImage.setDrawable(new TextureRegionDrawable(new EnemySprite(data).getAvatar()));
enemyImage.setSize(8, 8);
if (!Forge.isLandscapeMode())
enemyImage.setScaleX(2);
enemiesGroup.add(enemyImage).align(Align.center).space(3, 10, 3, 10);
enemiesGroup.add((data.name)).fillX().align(Align.center).fillX().space(3, 10, 3, 10);
@@ -115,6 +119,54 @@ public class PlayerStatisticScene extends UIScene {
enemiesGroup.row().space(8);
}
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
back.setHeight(20);
back.setX(w / 2 - back.getWidth() / 2);
back.setY(0);
ScrollPane enemies = ui.findActor("enemies");
enemies.setWidth(w - 20);
enemies.setX(w / 2 - enemies.getWidth() / 2);
enemies.setHeight(150);
enemies.setY(21);
ScrollPane stats = ui.findActor("stats");
stats.setWidth(w - 20);
stats.setX(w / 2 - enemies.getWidth() / 2);
stats.setHeight(90);
stats.setY(enemies.getY() + 153);
avatar.setScaleX(2);
avatar.setX(40);
avatar.setY(stats.getY() + 15);
avatarBorder.setScaleX(2);
avatarBorder.setX(40);
avatarBorder.setY(stats.getY() + 15);
playerName.setX(avatar.getRight() + 105);
playerName.getStyle().font.getData().setScale(2, 1);
playerName.setY(avatar.getY() + 45);
wins.setY(avatar.getY() + 30);
wins.setX(avatar.getRight() + 105);
totalWins.setY(wins.getY());
totalWins.setX(wins.getRight() + 85);
loss.setY(avatar.getY() + 15);
loss.setX(avatar.getRight() + 105);
totalLoss.setX(loss.getRight() + 85);
totalLoss.setY(loss.getY());
winloss.setY(avatar.getY());
winloss.setX(avatar.getRight() + 105);
lossWinRatio.setY(winloss.getY());
lossWinRatio.setX(winloss.getRight() + 85);
lifeIcon.setScaleX(2);
lifeIcon.setY(stats.getY() + 5);
lifeIcon.setX(wins.getX()-35);
life.setX(lifeIcon.getX() + 35);
life.setY(lifeIcon.getY());
goldIcon.setScaleX(2);
goldIcon.setY(stats.getY() + 5);
goldIcon.setX(totalWins.getX()-35);
money.setY(goldIcon.getY());
money.setX(goldIcon.getX() + 35);
}
}
@Override
@@ -130,13 +182,19 @@ public class PlayerStatisticScene extends UIScene {
}
});
avatar = ui.findActor("avatar");
avatarBorder = ui.findActor("avatarBorder");
playerName = ui.findActor("playerName");
life = ui.findActor("lifePoints");
money = ui.findActor("money");
lifeIcon = ui.findActor("lifeIcon");
goldIcon = ui.findActor("goldIcon");
wins = ui.findActor("wins");
totalWins = ui.findActor("totalWins");
loss = ui.findActor("loss");
totalLoss = ui.findActor("totalLoss");
winloss = ui.findActor("winloss");
lossWinRatio = ui.findActor("lossWinRatio");
back = ui.findActor("return");
ScrollPane scrollPane = ui.findActor("enemies");
scrollPane.setActor(enemiesGroup);
enemiesGroup.setFillParent(true);

View File

@@ -18,7 +18,6 @@ import forge.adventure.util.Reward;
import forge.adventure.util.RewardActor;
import forge.adventure.world.WorldSave;
import forge.assets.ImageCache;
import forge.gui.GuiBase;
/**
* Displays the rewards of a fight or a treasure
@@ -34,12 +33,12 @@ public class RewardScene extends UIScene {
Type type;
Array<Actor> generated = new Array<>();
static public final float CARD_WIDTH = 550f;
static public final float CARD_HEIGHT = 400f;
static public final float CARD_WIDTH = Forge.isLandscapeMode() ? 550f : 200f;
static public final float CARD_HEIGHT = Forge.isLandscapeMode() ? 400f : 300f;
static public final float CARD_WIDTH_TO_HEIGHT = CARD_WIDTH / CARD_HEIGHT;
public RewardScene() {
super(GuiBase.isAndroid() ? "ui/items_mobile.json" : "ui/items.json");
super(Forge.isLandscapeMode() ? "ui/items_mobile.json" : "ui/items.json");
}
boolean doneClicked = false;
@@ -145,10 +144,10 @@ public class RewardScene extends UIScene {
switch (type) {
case Shop:
doneButton.setText("Return");
doneButton.setText("Leave");
break;
case Loot:
doneButton.setText("Take all");
doneButton.setText("Done");
break;
}
for (int h = 1; h < targetHeight; h++) {
@@ -159,6 +158,7 @@ public class RewardScene extends UIScene {
//cardHeight=targetHeight/i;
cardWidth = h / CARD_WIDTH_TO_HEIGHT;
newArea = newRewards.size * cardWidth * cardHeight;
int rows = (int) (targetHeight / cardHeight);
int cols = (int) Math.ceil(newRewards.size / (double) rows);
if (newArea > oldCardArea && newArea <= targetArea && rows * cardHeight < targetHeight && cols * cardWidth < targetWidth) {
@@ -169,11 +169,12 @@ public class RewardScene extends UIScene {
}
}
cardHeight = bestCardHeight;
cardHeight = Forge.isLandscapeMode() ? bestCardHeight : bestCardHeight * 0.75f;
cardWidth = bestCardHeight / CARD_WIDTH_TO_HEIGHT;
yOff += (targetHeight - (cardHeight * numberOfRows)) / 2f;
xOff += (targetWidth - (cardWidth * numberOfColumns)) / 2f;
float spacing = 2;
int i = 0;
for (Reward reward : new Array.ArrayIterator<>(newRewards)) {
@@ -245,7 +246,7 @@ public class RewardScene extends UIScene {
setX(actor.getX());
setY(actor.getY() - getHeight());
price = CardUtil.getCardPrice(actor.getReward().getCard());
setText("Buy for " + price);
setText("$ " + price);
addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {

View File

@@ -20,7 +20,6 @@ import forge.Forge;
import forge.adventure.util.Controls;
import forge.adventure.world.WorldSave;
import forge.adventure.world.WorldSaveHeader;
import forge.gui.GuiBase;
import forge.screens.TransitionScreen;
import java.io.File;
@@ -44,12 +43,12 @@ public class SaveLoadScene extends UIScene {
int currentSlot = -3;
Image previewImage;
Image previewBorder;
TextButton saveLoadButton;
TextButton saveLoadButton, back;
TextButton quickSave;
TextButton autoSave;
public SaveLoadScene() {
super(GuiBase.isAndroid() ? "ui/save_load_mobile.json" : "ui/save_load.json");
super(Forge.isLandscapeMode() ? "ui/save_load_mobile.json" : "ui/save_load.json");
}
@@ -207,24 +206,43 @@ public class SaveLoadScene extends UIScene {
stage.addActor(layout);
dialog = Controls.newDialog("Save");
textInput = Controls.newTextField("");
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Save", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.save();
}
})).align(Align.left);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.saveAbort();
}
})).align(Align.left);
if (!Forge.isLandscapeMode()) {
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2).pad(2, 15, 2, 15);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left).pad(2, 15, 2, 2);
dialog.getButtonTable().add(textInput).fillX().expandX().padRight(15);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Save", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.save();
}
})).align(Align.left).padLeft(15);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.saveAbort();
}
})).align(Align.right).padRight(15);
} else {
dialog.getButtonTable().add(Controls.newLabel("Name your new save file.")).colspan(2);
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Save", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.save();
}
})).align(Align.left);
dialog.getButtonTable().add(Controls.newTextButton("Abort", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.saveAbort();
}
})).align(Align.right);
}
previewImage = ui.findActor("preview");
previewBorder = ui.findActor("preview_border");
header = Controls.newLabel("Save");
@@ -244,6 +262,7 @@ public class SaveLoadScene extends UIScene {
SaveLoadScene.this.loadSave();
}
});
back = ui.findActor("return");
ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
@@ -255,5 +274,25 @@ public class SaveLoadScene extends UIScene {
ScrollPane scrollPane = ui.findActor("saveSlots");
scrollPane.setActor(layout);
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
float sW = w - 20;
float oX = w/2 - sW/2;
float h = Scene.GetIntendedHeight();
float sH = (h - 10)/12;
scrollPane.setWidth(sW);
scrollPane.setHeight(sH*11);
scrollPane.setX(oX);
previewImage.setScaleX(1.5f);
previewImage.setScaleY(0.9f);
float bW = w - 165;
float bX = w/2 - bW/2;
back.setWidth(bW/2);
back.setHeight(20);
back.setX(bX);
saveLoadButton.setWidth(bW/2);
saveLoadButton.setHeight(20);
saveLoadButton.setX(back.getRight());
}
}
}

View File

@@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.Align;
@@ -36,9 +37,10 @@ public class SettingsScene extends UIScene {
Stage stage;
Texture Background;
private Table settingGroup;
TextButton back;
public SettingsScene() {
super(GuiBase.isAndroid() ? "ui/settings_mobile.json" : "ui/settings.json");
super(Forge.isLandscapeMode() ? "ui/settings_mobile.json" : "ui/settings.json");
}
@@ -95,9 +97,10 @@ public class SettingsScene extends UIScene {
private void addCheckBox(String name, ForgePreferences.FPref pref) {
CheckBox box = Controls.newCheckBox("");
if (GuiBase.isAndroid()) {
box.getImage().setScaling(Scaling.fill);
box.getImageCell().size(12, 12);
if (GuiBase.isAndroid()||!Forge.isLandscapeMode()) {
box.getImage().setScaling(Scaling.stretch);
float width = !Forge.isLandscapeMode() ? 24 : 12;
box.getImageCell().size(width, 12);
box.getImageCell().pad(2, 2, 2, 10);
}
box.setChecked(Preference.getPrefBoolean(pref));
@@ -130,9 +133,10 @@ public class SettingsScene extends UIScene {
private void addSettingField(String name, boolean value, ChangeListener change) {
CheckBox box = Controls.newCheckBox("");
if (GuiBase.isAndroid()) {
box.getImage().setScaling(Scaling.fill);
box.getImageCell().size(12, 12);
if (GuiBase.isAndroid()||!Forge.isLandscapeMode()) {
box.getImage().setScaling(Scaling.stretch);
float width = !Forge.isLandscapeMode() ? 24 : 12;
box.getImageCell().size(width, 12);
box.getImageCell().pad(2, 2, 2, 10);
}
box.setChecked(value);
@@ -156,8 +160,15 @@ public class SettingsScene extends UIScene {
void addLabel(String name) {
Label label = new Label(name, Controls.GetSkin().get("white", Label.LabelStyle.class));
settingGroup.row().space(5);
settingGroup.add(label).align(Align.left).pad(2, 2, 2, 5);
if (!Forge.isLandscapeMode()) {
label.setFontScaleX(2);
label.setWrap(true);
settingGroup.row().space(5);
settingGroup.add(label).align(Align.left).pad(2, 2, 2, 5).expandX();
} else {
settingGroup.row().space(5);
settingGroup.add(label).align(Align.left).pad(2, 2, 2, 5);
}
}
@Override
@@ -178,6 +189,9 @@ public class SettingsScene extends UIScene {
}
});
addLabel("Plane");
if (!Forge.isLandscapeMode()) {
plane.getStyle().listStyle.font.getData().setScale(2, 1);
}
settingGroup.add(plane).align(Align.right).pad(2);
if (!GuiBase.isAndroid()) {
@@ -252,7 +266,7 @@ public class SettingsScene extends UIScene {
settingGroup.row();
back = ui.findActor("return");
ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
@@ -262,6 +276,18 @@ public class SettingsScene extends UIScene {
ScrollPane scrollPane = ui.findActor("settings");
scrollPane.setActor(settingGroup);
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
float bW = w/2;
float oX = w/2 - bW/2;
back.getLabel().setFontScaleX(2);
back.setWidth(bW);
back.setHeight(20);
float bH = back.getHeight();
back.setX(oX);
scrollPane.setX(w/2-scrollPane.getWidth()/2);
}
}
@Override

View File

@@ -2,23 +2,21 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import forge.Forge;
import forge.adventure.stage.GameHUD;
import forge.adventure.stage.MapStage;
import forge.adventure.world.WorldSave;
import forge.gui.GuiBase;
/**
* First scene after the splash screen
*/
public class StartScene extends UIScene {
Actor saveButton;
Actor resumeButton;
TextButton saveButton, resumeButton, newGameButton, loadButtton, settingsButton, exitButton, switchButton;
public StartScene() {
super(GuiBase.isAndroid() ? "ui/start_menu_mobile.json" : "ui/start_menu.json");
super("ui/start_menu_mobile.json");
}
@@ -100,12 +98,6 @@ public class StartScene extends UIScene {
StartScene.this.Load();
}
});
ui.onButtonPress("Start", new Runnable() {
@Override
public void run() {
StartScene.this.NewGame();
}
});
ui.onButtonPress("Save", new Runnable() {
@Override
public void run() {
@@ -118,9 +110,6 @@ public class StartScene extends UIScene {
StartScene.this.Resume();
}
});
saveButton = ui.findActor("Save");
resumeButton = ui.findActor("Resume");
ui.onButtonPress("Settings", new Runnable() {
@Override
public void run() {
@@ -133,14 +122,45 @@ public class StartScene extends UIScene {
StartScene.this.Exit();
}
});
if (GuiBase.isAndroid()) {
ui.onButtonPress("Switch", new Runnable() {
@Override
public void run() {
Forge.switchToClassic();
}
});
newGameButton = ui.findActor("Start");
loadButtton = ui.findActor("Load");
saveButton = ui.findActor("Save");
resumeButton = ui.findActor("Resume");
settingsButton = ui.findActor("Settings");
exitButton = ui.findActor("Exit");
switchButton = ui.findActor("Switch");
if (!Forge.isLandscapeMode()) {
float w = Scene.GetIntendedWidth();
float bW = w - 165;
float oX = w/2 - bW/2;
newGameButton.setWidth(bW);
newGameButton.setX(oX);
newGameButton.getLabel().setFontScaleX(2);
loadButtton.setWidth(bW);
loadButtton.setX(oX);
loadButtton.getLabel().setFontScaleX(2);
saveButton.setWidth(bW);
saveButton.setX(oX);
saveButton.getLabel().setFontScaleX(2);
resumeButton.setWidth(bW);
resumeButton.setX(oX);
resumeButton.getLabel().setFontScaleX(2);
settingsButton.setWidth(bW);
settingsButton.setX(oX);
settingsButton.getLabel().setFontScaleX(2);
exitButton.setWidth(bW/2);
exitButton.setX(w/2-exitButton.getWidth());
exitButton.getLabel().setFontScaleX(2);
switchButton.setWidth(bW/2);
switchButton.setX(w/2);
switchButton.getLabel().setFontScaleX(2);
}
ui.onButtonPress("Switch", new Runnable() {
@Override
public void run() {
Forge.switchToClassic();
}
});
saveButton.setVisible(false);
resumeButton.setVisible(false);
}

View File

@@ -2,7 +2,9 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.maps.tiled.TiledMap;
import forge.Forge;
import forge.adventure.pointofintrest.PointOfInterest;
import forge.adventure.stage.MapStage;
import forge.adventure.stage.PointOfInterestMapRenderer;
@@ -13,23 +15,20 @@ import forge.adventure.world.WorldSave;
/**
* Scene that will render tiled maps.
* Used for towns dungeons etc
*
*/
public class TileMapScene extends HudScene {
TiledMap map;
PointOfInterestMapRenderer tiledMapRenderer;
private String nextMap;
private float cameraWidth = 0f, cameraHeight = 0f;
public TileMapScene() {
super(MapStage.getInstance());
tiledMapRenderer = new PointOfInterestMapRenderer((MapStage)stage);
tiledMapRenderer = new PointOfInterestMapRenderer((MapStage) stage);
}
public MapStage currentMap()
{
return (MapStage)stage;
public MapStage currentMap() {
return (MapStage) stage;
}
@Override
@@ -39,58 +38,77 @@ public class TileMapScene extends HudScene {
}
@Override
public void act(float delta)
{
if(map==null)
public void act(float delta) {
if (map == null)
return;
if(nextMap!=null)
{
if (nextMap != null) {
load(nextMap);
nextMap=null;
nextMap = null;
}
stage.act(Gdx.graphics.getDeltaTime());
}
@Override
public void render()
{
if(map==null)
public void render() {
if (map == null)
return;
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
tiledMapRenderer.setView(stage.getCamera().combined, stage.getCamera().position.x-Scene.GetIntendedWidth()/2.0f, stage.getCamera().position.y-Scene.GetIntendedHeight()/2.0f, Scene.GetIntendedWidth(), Scene.GetIntendedHeight());
tiledMapRenderer.setView(stage.getCamera().combined, stage.getCamera().position.x - Scene.GetIntendedWidth() / 2.0f, stage.getCamera().position.y - Scene.GetIntendedHeight() / 2.0f, Scene.GetIntendedWidth(), Scene.GetIntendedHeight());
if (!Forge.isLandscapeMode()) {
stage.getCamera().position.x = stage.GetPlayer().pos().x;
}
tiledMapRenderer.render();
hud.draw();
}
@Override
public void resLoaded() {
//set initial camera width and height
if (cameraWidth == 0f)
cameraWidth = stage.getCamera().viewportWidth;
if (cameraHeight == 0f)
cameraHeight = stage.getCamera().viewportHeight;
super.resLoaded();
}
@Override
public void enter() {
if (!Forge.isLandscapeMode()) {
//Trick for Map Stage
stage.getCamera().viewportWidth = cameraHeight;
stage.getCamera().viewportHeight = cameraWidth;
((OrthographicCamera)stage.getCamera()).zoom = 0.55f;
}
super.enter();
}
public void load(PointOfInterest point) {
rootPoint=point;
oldMap=point.getData().map;
rootPoint = point;
oldMap = point.getData().map;
map = new TemplateTmxMapLoader().load(Config.instance().getFilePath(point.getData().map));
((MapStage)stage).setPointOfInterest(WorldSave.getCurrentSave().getPointOfInterestChanges(point.getID()+oldMap));
((MapStage) stage).setPointOfInterest(WorldSave.getCurrentSave().getPointOfInterestChanges(point.getID() + oldMap));
stage.GetPlayer().setPosition(0, 0);
WorldSave.getCurrentSave().getWorld().setSeed(point.getSeedOffset());
tiledMapRenderer.loadMap(map,"");
tiledMapRenderer.loadMap(map, "");
}
PointOfInterest rootPoint;
String oldMap;
private void load(String targetMap) {
private void load(String targetMap) {
map = new TemplateTmxMapLoader().load(Config.instance().getFilePath(targetMap));
((MapStage)stage).setPointOfInterest(WorldSave.getCurrentSave().getPointOfInterestChanges(rootPoint.getID()+targetMap));
((MapStage) stage).setPointOfInterest(WorldSave.getCurrentSave().getPointOfInterestChanges(rootPoint.getID() + targetMap));
stage.GetPlayer().setPosition(0, 0);
WorldSave.getCurrentSave().getWorld().setSeed(rootPoint.getSeedOffset());
tiledMapRenderer.loadMap(map,oldMap);
oldMap=targetMap;
tiledMapRenderer.loadMap(map, oldMap);
oldMap = targetMap;
}
public void loadNext(String targetMap) {
nextMap=targetMap;
nextMap = targetMap;
}
}

View File

@@ -10,7 +10,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Scaling;
import com.badlogic.gdx.utils.viewport.ScalingViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import forge.adventure.util.Config;
import forge.adventure.util.UIActor;
@@ -55,8 +54,7 @@ public class UIScene extends Scene{
}
@Override
public void resLoaded() {
Viewport viewport = new ScalingViewport(Scaling.stretch, GetIntendedWidth(), GetIntendedHeight());
stage = new Stage(viewport){
stage = new Stage(new ScalingViewport(Scaling.stretch, GetIntendedWidth(), GetIntendedHeight())) {
@Override
public boolean keyUp(int keycode) {

View File

@@ -40,7 +40,7 @@ public class GameHUD extends Stage {
private final Image miniMapPlayer;
private final Label lifePoints;
private final Label money;
private Image miniMap, gamehud, mapborder, avatarborder;
private Image miniMap, gamehud, mapborder, avatarborder, blank;
private TextButton deckActor, menuActor, statsActor;
private boolean deckPressed = false;
private boolean menuPressed = false;
@@ -59,7 +59,9 @@ public class GameHUD extends Stage {
instance = this;
this.gameStage = gameStage;
ui = new UIActor(Config.instance().getFile(GuiBase.isAndroid() ? "ui/hud_mobile.json" : "ui/hud.json"));
ui = new UIActor(Config.instance().getFile("ui/hud_mobile.json"));
blank = ui.findActor("blank");
miniMap = ui.findActor("map");
mapborder = ui.findActor("mapborder");
avatarborder = ui.findActor("avatarborder");
@@ -84,6 +86,8 @@ public class GameHUD extends Stage {
//create touchpad
touchpad = new Touchpad(10, touchpadStyle);
touchpad.setBounds(15, 15, TOUCHPAD_SCALE, TOUCHPAD_SCALE);
if (!Forge.isLandscapeMode())
touchpad.getColor().a = 0.01f; //can't scale image on portrait..
touchpad.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent changeEvent, Actor actor) {
@@ -327,6 +331,37 @@ public class GameHUD extends Stage {
miniMap.setDrawable(new TextureRegionDrawable(miniMapTexture));
avatar.setDrawable(new TextureRegionDrawable(Current.player().avatar()));
if (!Forge.isLandscapeMode()) {
miniMap.setWidth(160);
mapborder.setWidth(160);
miniMapPlayer.setWidth(10);
gamehud.setVisible(false);
blank.setScaleX(2);
blank.setX(388);
blank.setHeight(80);
blank.setY(miniMap.getY());
avatar.setScaleX(2);
avatar.setX(388);
avatarborder.setX(388);
avatarborder.setY(miniMap.getY());
avatarborder.setScaleX(2);
avatarborder.setHeight(80);
money.setX(418);
lifePoints.setX(418);
lifePoints.setY(avatar.getY()-15);
money.setY(avatar.getY()-25);
menuActor.setHeight(20);
menuActor.setWidth(60);
menuActor.setX(420);
statsActor.setHeight(20);
statsActor.setWidth(60);
statsActor.setX(420);
statsActor.setY(menuActor.getY() + 35);
deckActor.setHeight(20);
deckActor.setWidth(60);
deckActor.setX(420);
deckActor.setY(statsActor.getY() + 35);
}
}
private void openDeck() {
@@ -340,11 +375,12 @@ public class GameHUD extends Stage {
miniMap.setVisible(visible);
mapborder.setVisible(visible);
miniMapPlayer.setVisible(visible);
gamehud.setVisible(visible);
avatarborder.setVisible(visible);
avatar.setVisible(visible);
lifePoints.setVisible(visible);
money.setVisible(visible);
gamehud.setVisible(visible);
blank.setVisible(visible);
if (visible) {
deckActor.getColor().a = 1f;
menuActor.getColor().a = 1f;
@@ -354,5 +390,8 @@ public class GameHUD extends Stage {
menuActor.getColor().a = 0.5f;
statsActor.getColor().a = 0.5f;
}
if (!Forge.isLandscapeMode()) {
gamehud.setVisible(false);
}
}
}

View File

@@ -232,7 +232,7 @@ public abstract class GameStage extends Stage {
touchY = screenY;
}
return false;
return true;
}
@Override

View File

@@ -291,15 +291,16 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
class HoldTooltip extends ActorGestureListener {
Image tooltip_image;
Table tooltip_actor;
float height;
//Vector2 tmp = new Vector2();
public HoldTooltip(Image tooltip_image) {
this.tooltip_image = tooltip_image;
tooltip_actor = new Table();
tooltip_actor.add(this.tooltip_image);
tooltip_actor.align(Align.center);
tooltip_actor.setSize(this.tooltip_image.getPrefWidth(), this.tooltip_image.getPrefHeight());
this.height = tooltip_actor.getHeight();
getGestureDetector().setLongPressSeconds(0.1f);
}
@@ -311,6 +312,12 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (tooltip_actor.getX() + tooltip_actor.getWidth() > 480)
tooltip_actor.setX(actor.getX() - tooltip_actor.getWidth());
tooltip_actor.setY(270 / 2 - tooltip_actor.getHeight() / 2);
if (!Forge.isLandscapeMode()) {
float h = height * 0.75f;
tooltip_actor.setX(480/2 - tooltip_actor.getWidth() /2);
tooltip_actor.setHeight(h);
tooltip_actor.setY(270/2 - h/2);
}
//tooltip_actor.setX(480/2 - tooltip_actor.getWidth()/2); //480 hud width
//tooltip_actor.setY(270/2-tooltip_actor.getHeight()/2); //270 hud height
actor.getStage().addActor(tooltip_actor);

View File

@@ -213,10 +213,7 @@ public class SplashScreen extends FContainer {
if (!init) {
init = true;
String defaultText = Localizer.getInstance().getMessageorUseDefault("lblAdventureMode", "Adventure Mode");
String advAndroid = Forge.isLandscapeMode() ? defaultText : "Adventure Mode (Landscape Only)";
btnAdventure = new FButton(GuiBase.isAndroid() ? advAndroid : defaultText);
btnAdventure.setEnabled(Forge.isLandscapeMode());
btnAdventure = new FButton(Localizer.getInstance().getMessageorUseDefault("lblAdventureMode", "Adventure Mode"));
btnHome = new FButton(Localizer.getInstance().getMessageorUseDefault("lblClassicMode", "Classic Mode"));
btnAdventure.setCommand(new FEvent.FEventHandler() {
@Override
@@ -252,7 +249,8 @@ public class SplashScreen extends FContainer {
});
float btn_w = (w - 2 * padding);
float btn_x = x + padding;
float btn_y = y + padding;
float multiplier = Forge.isLandscapeMode() ? 1 : 1.2f;
float btn_y = (y + padding) * multiplier;
btnHome.setFont(FSkinFont.get(22));
btnAdventure.setFont(FSkinFont.get(22));
btnHome.setBounds(btn_x, btn_y, btn_w, height);

View File

@@ -29,6 +29,15 @@
"x": 0,
"y": 0
},
{
"type": "Image",
"name": "blank",
"image": "ui/blank.png",
"width": 46,
"height": 46,
"x": 425,
"y": 10
},
{
"type": "Image",
"name": "avatar",

View File

@@ -11,6 +11,7 @@
},
{
"type": "Image",
"name": "healIcon",
"image": "ui/heal.png",
"x": 60,
"y": 85,
@@ -28,6 +29,7 @@
},
{
"type": "Image",
"name": "sellIcon",
"image": "ui/sell.png",
"x": 190,
"y": 85,
@@ -45,6 +47,7 @@
},
{
"type": "Image",
"name": "leaveIcon",
"image": "ui/leave.png",
"x": 320,
"y": 85,

View File

@@ -11,6 +11,7 @@
},
{
"type": "Scroll",
"name" : "scroll",
"style": "paper",
"x": 10,
"y": 10,
@@ -19,6 +20,7 @@
},
{
"type": "Label",
"name" : "titleL",
"text": "Create a Character",
"width": 128,
"height": 32,
@@ -28,51 +30,63 @@
},
{
"type": "Label",
"name" : "avatarL",
"text": "Avatar:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 64
"y": 58
},
{
"type": "Label",
"name" : "nameL",
"text": "Name:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 96
"y": 90
},
{
"type": "Label",
"name" : "raceL",
"text": "Race:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 128
"y": 124
},
{
"type": "Label",
"name" : "genderL",
"text": "Gender:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 160
"y": 154
},
{
"type": "Label",
"name" : "difficultyL",
"text": "Difficulty:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 192
"y": 186
},
{
"type": "Label",
"name" : "deckL",
"text": "Deck:",
"width": 128,
"height": 32,
"font" : "black",
"x": 16,
"y": 224
"y": 218
},
{
"type": "ImageButton",
@@ -147,7 +161,7 @@
"width": 38,
"height": 16,
"x": 352,
"y": 240
"y": 251
},
{
"type": "TextButton",
@@ -156,7 +170,7 @@
"width": 38,
"height": 16,
"x": 416,
"y": 240
"y": 251
}
]
}

View File

@@ -11,6 +11,7 @@
},
{
"type": "Scroll",
"name" : "scroll",
"style": "paper",
"x": 56,
"y": 10,
@@ -19,6 +20,7 @@
},
{
"type": "Label",
"name" : "titleL",
"text": "Create a Character",
"width": 128,
"height": 32,
@@ -28,6 +30,7 @@
},
{
"type": "Label",
"name" : "avatarL",
"text": "Avatar:",
"width": 128,
"height": 32,
@@ -37,6 +40,7 @@
},
{
"type": "Label",
"name" : "nameL",
"text": "Name:",
"width": 128,
"height": 32,
@@ -46,6 +50,7 @@
},
{
"type": "Label",
"name" : "raceL",
"text": "Race:",
"width": 128,
"height": 32,
@@ -55,6 +60,7 @@
},
{
"type": "Label",
"name" : "genderL",
"text": "Gender:",
"width": 128,
"height": 32,
@@ -64,6 +70,7 @@
},
{
"type": "Label",
"name" : "difficultyL",
"text": "Difficulty:",
"width": 128,
"height": 32,
@@ -73,6 +80,7 @@
},
{
"type": "Label",
"name" : "deckL",
"text": "Deck:",
"width": 128,
"height": 32,

View File

@@ -9,14 +9,6 @@
"width": 480,
"height": 270
},
{
"type": "Image",
"name": "preview",
"x": 364,
"y": 10,
"width": 96,
"height": 54
},
{
"type": "Scroll",
"name": "saveSlots",
@@ -25,6 +17,14 @@
"width": 344,
"height": 235
},
{
"type": "Image",
"name": "preview",
"x": 300,
"y": 18,
"width": 96,
"height": 54
},
{
"type": "TextButton",
"name": "return",

View File

@@ -66,7 +66,7 @@
{
"type": "TextButton",
"name": "Switch",
"text": "Classic Mode",
"text": "Classic",
"width": 75,
"height": 30,
"x": 245,

View File

@@ -11,6 +11,7 @@
},
{
"type": "Scroll",
"name": "stats",
"style": "paper",
"x": 300,
"y": 18,
@@ -35,6 +36,7 @@
},
{
"type": "Image",
"name": "avatarBorder",
"image": "ui/avatarhud.png",
"x": 320,
"y": 28,
@@ -61,6 +63,7 @@
},
{
"type": "Label",
"name": "wins",
"text": "Win:",
"x": 330,
"y": 114,
@@ -79,6 +82,7 @@
},
{
"type": "Label",
"name": "loss",
"text": "Loss:",
"x": 330,
"y": 134,
@@ -97,6 +101,7 @@
},
{
"type": "Label",
"name": "winloss",
"text": "Win Loss Ratio:",
"x": 330,
"y": 154,
@@ -115,6 +120,7 @@
},
{
"type": "Image",
"name": "lifeIcon",
"image": "ui/life.png",
"x": 400,
"y": 40,
@@ -123,6 +129,7 @@
},
{
"type": "Image",
"name": "goldIcon",
"image": "ui/money.png",
"x": 400,
"y": 60,