fix loading Arena, update remaining dialog

This commit is contained in:
Anthony Calosa
2023-04-05 21:20:15 +08:00
parent fede3c1749
commit aa838085f5
9 changed files with 131 additions and 119 deletions

View File

@@ -100,8 +100,11 @@ public class ArenaScene extends UIScene implements IAfterMatch {
private void showAreYouSure() {
if (concedeDialog == null) {
concedeDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblConcedeTitle"), "\n" + Forge.getLocalizer().getMessage("lblConcedeCurrentGame"), () -> {
loose();
concedeDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblConcedeTitle"),
"\n" + Forge.getLocalizer().getMessage("lblConcedeCurrentGame"),
Forge.getLocalizer().getMessage("lblYes"),
Forge.getLocalizer().getMessage("lblNo"), () -> {
this.loose();
removeDialog();
}, this::removeDialog);
}
@@ -117,8 +120,10 @@ public class ArenaScene extends UIScene implements IAfterMatch {
private void startDialog() {
if (startDialog == null) {
startDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblStart"), Forge.getLocalizer().getMessage("lblStartArena"), () -> {
startArena();
startDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblStart"),
Forge.getLocalizer().getMessage("lblStartArena"), Forge.getLocalizer().getMessage("lblYes"),
Forge.getLocalizer().getMessage("lblNo"), () -> {
this.startArena();
removeDialog();
}, this::removeDialog);
}
@@ -287,7 +292,9 @@ public class ArenaScene extends UIScene implements IAfterMatch {
for (int i = 0; i < numberOfEnemies; i++) {
EnemyData enemyData = WorldData.getEnemy(data.enemyPool[rand.nextInt(data.enemyPool.length)]);
EnemyData enemyData = null;
while (enemyData == null)
enemyData = WorldData.getEnemy(data.enemyPool[rand.nextInt(data.enemyPool.length)]);
EnemySprite enemy = new EnemySprite(enemyData);
enemies.add(enemy);
fighters.add(new ArenaRecord(new Image(enemy.getAvatar()), enemyData.name));
@@ -295,7 +302,6 @@ public class ArenaScene extends UIScene implements IAfterMatch {
fighters.add(new ArenaRecord(new Image(Current.player().avatar()), Current.player().getName()));
player = fighters.get(fighters.size - 1).actor;
goldLabel.setText(data.entryFee + " [+Gold]");
goldLabel.layout();
goldLabel.setVisible(true);

View File

@@ -26,6 +26,7 @@ public class DeckSelectScene extends UIScene {
TextraButton back, edit, rename;
int currentSlot = 0;
ScrollPane scrollPane;
Dialog renameDialog;
private static DeckSelectScene object;
@@ -65,14 +66,20 @@ public class DeckSelectScene extends UIScene {
}
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);
if (renameDialog == null) {
renameDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblRenameDeck"), null,
Forge.getLocalizer().getMessage("lblOk"),
Forge.getLocalizer().getMessage("lblAbort"), () -> {
this.rename();
removeDialog();
}, this::removeDialog);
renameDialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblNewNameDeck"))).colspan(2);
renameDialog.getContentTable().row();
renameDialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblName") + ": ")).align(Align.left);
renameDialog.getContentTable().add(textInput).fillX().expandX();
renameDialog.getContentTable().row();
}
showDialog(renameDialog);
}
private TextraButton addDeckSlot(String name, int i) {

View File

@@ -33,6 +33,7 @@ public class InventoryScene extends UIScene {
Button selected;
Button deleteButton;
Texture equipOverlay;
Dialog useDialog, deleteDialog;
int columns = 0;
public InventoryScene() {
@@ -102,9 +103,15 @@ public class InventoryScene extends UIScene {
}
private void showConfirm() {
Dialog confirm = prepareDialog("", ButtonYes | ButtonNo, () -> delete());
confirm.text(Controls.newLabel(Forge.getLocalizer().getMessage("lblDelete")));
showDialog(confirm);
if (deleteDialog == null) {
deleteDialog = createGenericDialog("", Forge.getLocalizer().getMessage("lblDelete"),
Forge.getLocalizer().getMessage("lblYes"),
Forge.getLocalizer().getMessage("lblNo"), () -> {
this.delete();
removeDialog();
}, this::removeDialog);
}
showDialog(deleteDialog);
}
private static InventoryScene object;
@@ -122,7 +129,6 @@ public class InventoryScene extends UIScene {
}
public void delete() {
ItemData data = ItemData.getItem(itemLocation.get(selected));
if (data != null) {
Current.player().removeItem(data.name);
@@ -156,9 +162,16 @@ public class InventoryScene extends UIScene {
private void use() {
ItemData data = ItemData.getItem(itemLocation.get(selected));
if (data == null) return;
Dialog useDialog = prepareDialog("", ButtonYes | ButtonNo, () -> triggerUse());
if (data == null)
return;
if (useDialog == null) {
useDialog = createGenericDialog("", null, Forge.getLocalizer().getMessage("lblYes"),
Forge.getLocalizer().getMessage("lblNo"), () -> {
this.triggerUse();
removeDialog();
}, this::removeDialog);
useDialog.getContentTable().add(Controls.newTextraLabel("Use " + data.name + "?\n" + data.getDescription()));
}
showDialog(useDialog);
}

View File

@@ -2,7 +2,6 @@ package forge.adventure.scene;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
@@ -45,14 +44,13 @@ public class SaveLoadScene extends UIScene {
int currentSlot = 0, lastSelectedSlot = 0;
Image previewImage;
TextraLabel previewDate, playerLocation;
Image previewBorder;
TextraButton saveLoadButton, back;
Selectable<TextraButton> quickSave;
Selectable<TextraButton> autoSave;
Actor lastHighlightedSave;
SelectBox difficulty;
ScrollPane scrollPane;
char ASCII_179 = '│';
Dialog saveDialog;
private SaveLoadScene() {
super(Forge.isLandscapeMode() ? "ui/save_load.json" : "ui/save_load_portrait.json");
@@ -94,9 +92,9 @@ public class SaveLoadScene extends UIScene {
saveLoadButton = ui.findActor("save");
saveLoadButton.setText(Forge.getLocalizer().getMessage("lblSave"));
ui.onButtonPress("save", () -> SaveLoadScene.this.loadSave());
ui.onButtonPress("save", SaveLoadScene.this::loadSave);
back = ui.findActor("return");
ui.onButtonPress("return", () -> SaveLoadScene.this.back());
ui.onButtonPress("return", SaveLoadScene.this::back);
difficulty.setSelectedIndex(1);
difficulty.setAlignment(Align.center);
difficulty.getStyle().fontColor = Color.GOLD;
@@ -201,16 +199,21 @@ public class SaveLoadScene extends UIScene {
case Save:
if (currentSlot > 0) {
//prevent NPE, allowed saveslot is 1 to 10..
textInput.setText(buttons.get(currentSlot).actor.getText().toString());
Dialog dialog = prepareDialog(Forge.getLocalizer().getMessage("lblSave"), ButtonOk | ButtonAbort, () -> SaveLoadScene.this.save());
dialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblNameYourSaveFile"))).colspan(2).pad(2, 15, 2, 15);
dialog.getContentTable().row();
dialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblName") + ": ")).align(Align.left).pad(2, 15, 2, 2);
dialog.getContentTable().add(textInput).fillX().expandX().padRight(15);
dialog.getContentTable().row();
showDialog(dialog);
textInput.setText(buttons.get(currentSlot).actor.getText());
if (saveDialog == null) {
saveDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblSave"), null,
Forge.getLocalizer().getMessage("lblOk"),
Forge.getLocalizer().getMessage("lblAbort"), () -> {
this.save();
removeDialog();
}, this::removeDialog);
saveDialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblNameYourSaveFile"))).colspan(2).pad(2, 15, 2, 15);
saveDialog.getContentTable().row();
saveDialog.getContentTable().add(Controls.newLabel(Forge.getLocalizer().getMessage("lblName") + ": ")).align(Align.left).pad(2, 15, 2, 2);
saveDialog.getContentTable().add(textInput).fillX().expandX().padRight(15);
saveDialog.getContentTable().row();
}
showDialog(saveDialog);
stage.setKeyboardFocus(textInput);
}
break;

View File

@@ -1,11 +1,8 @@
package forge.adventure.scene;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Align;
import com.github.tommyettinger.textra.TextraButton;
import com.github.tommyettinger.textra.TextraLabel;
@@ -31,17 +28,17 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
*/
public class SettingsScene extends UIScene {
static public ForgePreferences Preference;
Texture Background;
private final Table settingGroup;
TextraButton backButton;
TextraButton newPlane;
//TextraButton newPlane;
ScrollPane scrollPane;
SelectBox selectSourcePlane;
SelectBox<String> selectSourcePlane;
TextField newPlaneName;
Dialog createNewPlane, copyPlane, errorDialog;
private void copyNewPlane() {
String plane = (String) selectSourcePlane.getSelected();
String plane = selectSourcePlane.getSelected();
Path source = Paths.get(Config.instance().getPlanePath(plane));
Path destination = Paths.get(Config.instance().getPlanePath("<user>" + newPlaneName.getText()));
AtomicBoolean somethingWentWrong = new AtomicBoolean(false);
@@ -58,43 +55,54 @@ public class SettingsScene extends UIScene {
somethingWentWrong.set(true);
}
if (somethingWentWrong.get()) {
Dialog dialog = prepareDialog("Something went wrong", ButtonOk | ButtonAbort, null);
dialog.text("Copy was not successful check your access right\n and if the folder is in use");
showDialog(dialog);
if (errorDialog == null) {
errorDialog = createGenericDialog("Something went wrong", "Copy was not successful check your access right\n and if the folder is in use",
Forge.getLocalizer().getMessage("lblOk"), Forge.getLocalizer().getMessage("lblAbort"), this::removeDialog, this::removeDialog);
}
showDialog(errorDialog);
} else {
Dialog dialog = prepareDialog("Copied plane", ButtonOk | ButtonAbort, null);
dialog.text("New plane " + newPlaneName.getText() + " was created\nYou can now start the editor to change the plane\n" +
"or edit it manually from the folder\n" +
Config.instance().getPlanePath("<user>" + newPlaneName.getText()));
if (copyPlane == null) {
copyPlane = createGenericDialog("Copied plane", "New plane " + newPlaneName.getText() +
" was created\nYou can now start the editor to change the plane\n" +
"or edit it manually from the folder\n" + Config.instance().getPlanePath("<user>" + newPlaneName.getText()),
Forge.getLocalizer().getMessage("lblOk"), Forge.getLocalizer().getMessage("lblAbort"), this::removeDialog, this::removeDialog);
}
Config.instance().getSettingData().plane = "<user>" + newPlaneName.getText();
Config.instance().saveSettings();
showDialog(dialog);
showDialog(copyPlane);
}
}
private void createNewPlane() {
Dialog dialog = prepareDialog("Create your own Plane", ButtonOk | ButtonAbort, () -> copyNewPlane());
dialog.text("Select a plane to copy");
dialog.getContentTable().row();
dialog.getContentTable().add(selectSourcePlane);
dialog.getContentTable().row();
dialog.text("Set new plane name");
dialog.getContentTable().row();
dialog.getContentTable().add(newPlaneName);
newPlaneName.setText(selectSourcePlane.getSelected().toString() + "_copy");
dialog.show(stage);
if (createNewPlane == null) {
createNewPlane = createGenericDialog("Create your own Plane", "Select a plane to copy",
Forge.getLocalizer().getMessage("lblOk"),
Forge.getLocalizer().getMessage("lblAbort"), () -> {
this.copyNewPlane();
removeDialog();
}, this::removeDialog);
createNewPlane.getContentTable().row();
createNewPlane.getContentTable().add(selectSourcePlane);
createNewPlane.getContentTable().row();
createNewPlane.text("Set new plane name");
createNewPlane.getContentTable().row();
createNewPlane.getContentTable().add(newPlaneName);
newPlaneName.setText(selectSourcePlane.getSelected() + "_copy");
}
showDialog(createNewPlane);
}
private SettingsScene() {
super(Forge.isLandscapeMode() ? "ui/settings.json" : "ui/settings_portrait.json");
selectSourcePlane = Controls.newComboBox();
newPlaneName = Controls.newTextField("");
settingGroup = new Table();
if (Preference == null) {
Preference = new ForgePreferences();
}
//temporary disable custom world until it works correctly on each update
/*selectSourcePlane = Controls.newComboBox();
newPlaneName = Controls.newTextField("");
selectSourcePlane.setItems(Config.instance().getAllAdventures());
SelectBox plane = Controls.newComboBox(Config.instance().getAllAdventures(), Config.instance().getSettingData().plane, o -> {
Config.instance().getSettingData().plane = (String) o;
@@ -111,10 +119,10 @@ public class SettingsScene extends UIScene {
addLabel(Forge.getLocalizer().getMessage("lblWorld"));
settingGroup.add(plane).align(Align.right).pad(2);
addLabel(Forge.getLocalizer().getMessage("lblCreate") + Forge.getLocalizer().getMessage("lblWorld"));
settingGroup.add(newPlane).align(Align.right).pad(2);
settingGroup.add(newPlane).align(Align.right).pad(2);*/
if (!GuiBase.isAndroid()) {
SelectBox videomode = Controls.newComboBox(new String[]{"720p", "768p", "900p", "1080p"}, Config.instance().getSettingData().videomode, o -> {
SelectBox<String> videomode = Controls.newComboBox(new String[]{"720p", "768p", "900p", "1080p"}, Config.instance().getSettingData().videomode, o -> {
String mode = (String) o;
if (mode == null)
mode = "720p";
@@ -145,7 +153,7 @@ public class SettingsScene extends UIScene {
}
if (Forge.isLandscapeMode()) {
//different adjustment to landscape
SelectBox rewardCardAdjLandscape = Controls.newComboBox(new Float[]{0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f, 1.05f, 1.1f, 1.15f, 1.2f, 1.25f, 1.3f, 1.35f, 1.4f, 1.45f, 1.5f, 1.55f, 1.6f}, Config.instance().getSettingData().rewardCardAdjLandscape, o -> {
SelectBox<Float> rewardCardAdjLandscape = Controls.newComboBox(new Float[]{0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f, 1.05f, 1.1f, 1.15f, 1.2f, 1.25f, 1.3f, 1.35f, 1.4f, 1.45f, 1.5f, 1.55f, 1.6f}, Config.instance().getSettingData().rewardCardAdjLandscape, o -> {
Float val = (Float) o;
if (val == null || val == 0f)
val = 1f;
@@ -155,7 +163,7 @@ public class SettingsScene extends UIScene {
});
addLabel("Reward/Shop Card Display Ratio");
settingGroup.add(rewardCardAdjLandscape).align(Align.right).pad(2);
SelectBox tooltipAdjLandscape = Controls.newComboBox(new Float[]{0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f, 1.05f, 1.1f, 1.15f, 1.2f, 1.25f, 1.3f, 1.35f, 1.4f, 1.45f, 1.5f, 1.55f, 1.6f}, Config.instance().getSettingData().cardTooltipAdjLandscape, o -> {
SelectBox<Float> tooltipAdjLandscape = Controls.newComboBox(new Float[]{0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f, 1.05f, 1.1f, 1.15f, 1.2f, 1.25f, 1.3f, 1.35f, 1.4f, 1.45f, 1.5f, 1.55f, 1.6f}, Config.instance().getSettingData().cardTooltipAdjLandscape, o -> {
Float val = (Float) o;
if (val == null || val == 0f)
val = 1f;
@@ -167,7 +175,7 @@ public class SettingsScene extends UIScene {
settingGroup.add(tooltipAdjLandscape).align(Align.right).pad(2);
} else {
//portrait adjustment
SelectBox rewardCardAdj = Controls.newComboBox(new Float[]{0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.8f, 1.9f, 2f}, Config.instance().getSettingData().rewardCardAdj, o -> {
SelectBox<Float> rewardCardAdj = Controls.newComboBox(new Float[]{0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.8f, 1.9f, 2f}, Config.instance().getSettingData().rewardCardAdj, o -> {
Float val = (Float) o;
if (val == null || val == 0f)
val = 1f;
@@ -177,7 +185,7 @@ public class SettingsScene extends UIScene {
});
addLabel("Reward/Shop Card Display Ratio");
settingGroup.add(rewardCardAdj).align(Align.right).pad(2);
SelectBox tooltipAdj = Controls.newComboBox(new Float[]{0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.8f, 1.9f, 2f}, Config.instance().getSettingData().cardTooltipAdj, o -> {
SelectBox<Float> tooltipAdj = Controls.newComboBox(new Float[]{0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.8f, 1.9f, 2f}, Config.instance().getSettingData().cardTooltipAdj, o -> {
Float val = (Float) o;
if (val == null || val == 0f)
val = 1f;

View File

@@ -101,9 +101,15 @@ public class StartScene extends UIScene {
}
public boolean Exit() {
Dialog dialog = prepareDialog(Forge.getLocalizer().getMessage("lblExitForge"), ButtonOk | ButtonAbort, () -> Forge.exit(true));
dialog.text(Controls.newLabel(Forge.getLocalizer().getMessage("lblAreYouSureYouWishExitForge")));
showDialog(dialog);
if (exitDialog == null) {
exitDialog = createGenericDialog(Forge.getLocalizer().getMessage("lblExitForge"),
Forge.getLocalizer().getMessage("lblAreYouSureYouWishExitForge"), Forge.getLocalizer().getMessage("lblOk"),
Forge.getLocalizer().getMessage("lblAbort"), () -> {
Forge.exit(true);
removeDialog();
}, this::removeDialog);
}
showDialog(exitDialog);
return true;
}

View File

@@ -20,8 +20,6 @@ import com.github.tommyettinger.textra.TextraLabel;
import forge.Forge;
import forge.adventure.stage.GameHUD;
import forge.adventure.util.*;
import forge.sound.SoundEffectType;
import forge.sound.SoundSystem;
import java.time.LocalTime;
@@ -87,36 +85,6 @@ public class UIScene extends Scene {
}
}
static final public int ButtonYes = 0x1;
static final public int ButtonNo = 0x2;
static final public int ButtonOk = 0x4;
static final public int ButtonAbort = 0x8;
public Dialog prepareDialog(String header, int buttons, Runnable onOkOrYes) {
Dialog dialog = new Dialog(header, Controls.getSkin()) {
protected void result(Object object) {
SoundSystem.instance.play(SoundEffectType.ButtonPress, false);
if (onOkOrYes != null && object != null && object.equals(true))
onOkOrYes.run();
this.hide();
removeDialog();
}
};
if ((buttons & ButtonYes) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblYes"), true);
if ((buttons & ButtonNo) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblNo"), false);
if ((buttons & ButtonOk) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblOk"), true);
if ((buttons & ButtonAbort) != 0)
dialog.button(Forge.getLocalizer().getMessage("lblAbort"), false);
dialog.setMovable(false);
dialog.setKeepWithinStage(true);
dialog.setResizable(false);
return dialog;
}
public void showDialog(Dialog dialog) {
stage.addActor(dialog);
possibleSelectionStack.add(new Array<>());
@@ -271,11 +239,12 @@ public class UIScene extends Scene {
}
}
public Dialog createGenericDialog(String title, String label, Runnable runnableYes, Runnable runnableNo) {
Dialog dialog = new Dialog(title, Controls.getSkin());
public Dialog createGenericDialog(String title, String label, String stringYes, String stringNo, Runnable runnableYes, Runnable runnableNo) {
Dialog dialog = new Dialog(title == null ? "" : title, Controls.getSkin());
if (label != null)
dialog.text(label);
TextraButton yes = Controls.newTextButton(Forge.getLocalizer().getMessage("lblYes"), runnableYes);
TextraButton no = Controls.newTextButton(Forge.getLocalizer().getMessage("lblNo"), runnableNo);
TextraButton yes = Controls.newTextButton(stringYes, runnableYes);
TextraButton no = Controls.newTextButton(stringNo, runnableNo);
dialog.button(yes).button(no);
return dialog;
}

View File

@@ -218,6 +218,7 @@ public class Controls {
@Override
public void clicked(InputEvent event, float x, float y) {
try {
if (func != null)
func.run();
} catch (Exception e) {
e.printStackTrace();

View File

@@ -36,10 +36,9 @@
"Boar",
"Boggart",
"Bull",
"Challenger 1",
"Challenger 2",
"Challenger 3",
"Challenger 4",
"Challenger 20",
"Challenger 21",
"Challenger 22",
"Cyclops",
"Devil",
"Dinosaur",