Merge branch 'AdventureModePort' into 'master'

Mobile + Adventure port

See merge request core-developers/forge!6180
This commit is contained in:
Michael Kamensky
2022-02-11 03:34:01 +00:00
528 changed files with 24075 additions and 2157 deletions

View File

@@ -260,12 +260,6 @@
<artifactId>forge-gui-mobile</artifactId> <artifactId>forge-gui-mobile</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.raeleus.TenPatch</groupId>
<artifactId>tenpatch</artifactId>
<version>5.2.0</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.jetbrains</groupId> <groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId> <artifactId>annotations</artifactId>

View File

@@ -1,202 +0,0 @@
package forge.adventure;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Clipboard;
import com.badlogic.gdx.utils.ScreenUtils;
import forge.Forge;
import forge.Graphics;
import forge.adventure.scene.ForgeScene;
import forge.adventure.scene.Scene;
import forge.adventure.scene.SceneType;
import forge.adventure.util.Config;
import forge.interfaces.IDeviceAdapter;
/**
* Application adapter the handle switching and fading between scenes
*/
public class AdventureApplicationAdapter extends Forge {
public static AdventureApplicationAdapter instance;
Scene currentScene = null;
Array<Scene> lastScene = new Array<>();
private int currentWidth;
private int currentHeight;
private float animationTimeout;
Batch animationBatch;
Texture transitionTexture;
TextureRegion lastScreenTexture;
private boolean sceneWasSwapped =false;
private Graphics graphics;
public Graphics getGraphics()
{
if(graphics==null)
graphics=new Graphics();
return graphics;
}
public TextureRegion getLastScreenTexture() {
return lastScreenTexture;
}
public AdventureApplicationAdapter(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0, boolean value, boolean androidOrientation, int totalRAM, boolean isTablet, int AndroidAPI, String AndroidRelease, String deviceName) {
super(clipboard0, deviceAdapter0, assetDir0, value, androidOrientation, totalRAM, isTablet, AndroidAPI, AndroidRelease, deviceName);
instance = this;
}
public int getCurrentWidth() {
return currentWidth;
}
public int getCurrentHeight() {
return currentHeight;
}
public Scene getCurrentScene() {
return currentScene;
}
@Override
public void resize(int w, int h) {
currentWidth = w;
currentHeight = h;
super.resize(w, h);
}
public boolean switchScene(Scene newScene) {
if (currentScene != null) {
if (!currentScene.leave())
return false;
lastScene.add(currentScene);
}
storeScreen();
sceneWasSwapped =true;
currentScene = newScene;
currentScene.enter();
return true;
}
private void storeScreen() {
if(!(currentScene instanceof ForgeScene))
{
if(lastScreenTexture!=null)
lastScreenTexture.getTexture().dispose();
lastScreenTexture = ScreenUtils.getFrameBufferTexture();
}
}
public void resLoaded() {
for (forge.adventure.scene.SceneType entry : SceneType.values()) {
entry.instance.resLoaded();
}
//AdventureApplicationAdapter.CurrentAdapter.switchScene(SceneType.RewardScene.instance);
switchScene(SceneType.StartScene.instance);
animationBatch=new SpriteBatch();
transitionTexture =new Texture(Config.instance().getFile("ui/transition.png"));
}
@Override
public void create() {
Pixmap pm = new Pixmap(Config.instance().getFile("skin/cursor.png"));
Gdx.graphics.setCursor(Gdx.graphics.newCursor(pm, 0, 0));
pm.dispose();
for (forge.adventure.scene.SceneType entry : SceneType.values()) {
entry.instance.create();
}
super.create();
}
@Override
public void render() {
float delta=Gdx.graphics.getDeltaTime();
float transitionTime = 0.2f;
if(sceneWasSwapped)
{
sceneWasSwapped =false;
animationTimeout= transitionTime;
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
return;
}
if(animationTimeout>=0)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
animationBatch.begin();
animationTimeout-=delta;
animationBatch.setColor(1,1,1,1);
animationBatch.draw(lastScreenTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.setColor(1,1,1,1-(1/ transitionTime)*animationTimeout);
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.end();
if(animationTimeout<0)
{
currentScene.render();
storeScreen();
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
else
{
return;
}
}
if(animationTimeout>=-transitionTime)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
animationBatch.begin();
animationTimeout-=delta;
animationBatch.setColor(1,1,1,1);
animationBatch.draw(lastScreenTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.setColor(1,1,1,(1/ transitionTime)*(animationTimeout+ transitionTime));
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.end();
return;
}
currentScene.render();
currentScene.act(delta);
}
@Override
public void dispose() {
for (forge.adventure.scene.SceneType entry : SceneType.values()) {
entry.instance.dispose();
}
System.exit(0);
}
private Scene getLastScene() {
return lastScene.size==0?null: lastScene.get(lastScene.size-1);
}
public Scene switchToLast() {
if(lastScene.size!=0)
{
storeScreen();
currentScene = lastScene.get(lastScene.size-1);
currentScene.enter();
sceneWasSwapped =true;
lastScene.removeIndex(lastScene.size-1);
return currentScene;
}
return null;
}
}

View File

@@ -1,17 +1,12 @@
package forge.adventure; package forge.adventure;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Clipboard; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Clipboard;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.glutils.HdpiMode;
import forge.Forge; import forge.Forge;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.assets.FSkin;
import forge.gui.GuiBase;
import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem;
import forge.util.BuildInfo; import forge.util.BuildInfo;
import io.sentry.Sentry; import io.sentry.Sentry;
import io.sentry.SentryClient; import io.sentry.SentryClient;
@@ -19,86 +14,6 @@ import io.sentry.SentryClient;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
/**
* Wrapper to start forge first (splash screen and resources loading)
*
*/
class StartAdventure extends AdventureApplicationAdapter {
public StartAdventure( ) {
super(new Lwjgl3Clipboard(), new DesktopAdapter(""), Files.exists(Paths.get("./res"))?"./":"../forge-gui/", true, false, 0, true, 0, "", "");
Forge.isTabletDevice = true;
Forge.isPortraitMode = false;
Forge.hdbuttons = true;
Forge.hdstart = true;
isPortraitMode = true;
totalDeviceRAM = 0;
GuiBase.setDeviceInfo("", "", 0, 0);
GuiBase.setIsAdventureMode(true);
}
@Override
public void render() {
if (splashScreen != null) {
Gdx.gl.glClearColor(1, 0, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // Clear the screen.
getGraphics().begin(getCurrentWidth(), getCurrentHeight());
splashScreen.setSize(getCurrentWidth(), getCurrentHeight());
splashScreen.screenPos.setSize(getCurrentWidth(), getCurrentHeight());
if (splashScreen.getRotate180()) {
getGraphics().startRotateTransform(getCurrentWidth() / 2f, getCurrentHeight() / 2f, 180);
}
splashScreen.draw(getGraphics());
if (splashScreen.getRotate180()) {
getGraphics().endTransform();
}
getGraphics().end();
} else {
super.render();
}
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
if (splashScreen != null)
splashScreen.setSize(width, height);
}
@Override
public void create() {
//install our error handler
FSkin.loadLight("default", splashScreen,Config.instance().getFile("skin"));
//load model on background thread (using progress bar to report progress)
super.create();
}
@Override
protected void afterDbLoaded()
{
FSkin.loadLight("default", splashScreen,Config.instance().getFile("skin"));
FSkin.loadFull(splashScreen);
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music
Gdx.input.setCatchKey(Input.Keys.MENU, true);
//openHomeScreen(-1, null); //default for startup
splashScreen = null;
afterDBloaded = true;
//adjust height modifier
adjustHeightModifier(getScreenWidth(), getScreenHeight());
resLoaded();
}
}
/** /**
* Main entry point * Main entry point
*/ */
@@ -121,17 +36,19 @@ public class Main {
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration(); Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setResizable(false); config.setResizable(false);
StartAdventure start=new StartAdventure(); ApplicationListener start = Forge.getApp(new Lwjgl3Clipboard(), new DesktopAdapter(""), Files.exists(Paths.get("./res"))?"./":"../forge-gui/", true, false, 0, true, 0, "", "");
if (Config.instance().getSettingData().fullScreen) if (Config.instance().getSettingData().fullScreen) {
{
config.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode()); config.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode());
config.setAutoIconify(true);
config.setHdpiMode(HdpiMode.Logical);
} else { } else {
config.setWindowedMode(Config.instance().getSettingData().width, Config.instance().getSettingData().height); config.setWindowedMode(Config.instance().getSettingData().width, Config.instance().getSettingData().height);
} }
config.setTitle("Forge Adventure Mobile");
config.setWindowIcon(Config.instance().getFilePath("forge-adventure.png")); config.setWindowIcon(Config.instance().getFilePath("forge-adventure.png"));
new Lwjgl3Application(start, config); new Lwjgl3Application(start, config);
} }

View File

@@ -3,6 +3,8 @@ package forge.adventure.editor;
import forge.adventure.data.EnemyData; import forge.adventure.data.EnemyData;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
/** /**
@@ -42,15 +44,60 @@ public class EnemyEdit extends JComponent {
add(rewards,BorderLayout.CENTER); add(rewards,BorderLayout.CENTER);
add(preview,BorderLayout.LINE_START); add(preview,BorderLayout.LINE_START);
atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateEnemy())); atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
nameField.getDocument().addDocumentListener(new DocumentChangeListener(()->updateEnemy())); @Override
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateEnemy())); public void run() {
lifeFiled.addChangeListener(e -> updateEnemy()); EnemyEdit.this.updateEnemy();
speed.addChangeListener(e -> updateEnemy()); }
difficulty.addChangeListener(e -> updateEnemy()); }));
spawnRate.addChangeListener(e -> updateEnemy()); nameField.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
rewards.addChangeListener(e -> updateEnemy()); @Override
lifeFiled.addChangeListener(e -> updateEnemy()); public void run() {
EnemyEdit.this.updateEnemy();
}
}));
deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
EnemyEdit.this.updateEnemy();
}
}));
lifeFiled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
speed.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
difficulty.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
spawnRate.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
rewards.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
lifeFiled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
EnemyEdit.this.updateEnemy();
}
});
refresh(); refresh();
} }

View File

@@ -9,7 +9,10 @@ import forge.adventure.util.Config;
import forge.adventure.util.Paths; import forge.adventure.util.Paths;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
/** /**
@@ -58,12 +61,42 @@ public class EnemyEditor extends JComponent {
{ {
list.setCellRenderer(new EnemyDataRenderer()); list.setCellRenderer(new EnemyDataRenderer());
list.addListSelectionListener(e -> updateEdit()); list.addListSelectionListener(new ListSelectionListener() {
addButton("add",e->addEnemy()); @Override
addButton("remove",e->remove()); public void valueChanged(ListSelectionEvent e) {
addButton("copy",e->copy()); EnemyEditor.this.updateEdit();
addButton("load",e->load()); }
addButton("save",e->save()); });
addButton("add", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.addEnemy();
}
});
addButton("remove", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.remove();
}
});
addButton("copy", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.copy();
}
});
addButton("load", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.load();
}
});
addButton("save", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EnemyEditor.this.save();
}
});
BorderLayout layout=new BorderLayout(); BorderLayout layout=new BorderLayout();
setLayout(layout); setLayout(layout);
add(new JScrollPane(list), BorderLayout.LINE_START); add(new JScrollPane(list), BorderLayout.LINE_START);

View File

@@ -4,6 +4,8 @@ import forge.adventure.util.Config;
import javax.swing.*; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -19,7 +21,12 @@ public class FilePicker extends Box {
super(BoxLayout.X_AXIS); super(BoxLayout.X_AXIS);
this.fileEndings = fileEndings; this.fileEndings = fileEndings;
findButton.addActionListener(e->find()); findButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FilePicker.this.find();
}
});
add(edit); add(edit);
add(findButton); add(findButton);

View File

@@ -8,6 +8,8 @@ import javax.swing.*;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays; import java.util.Arrays;
/** /**
@@ -56,22 +58,102 @@ public class RewardEdit extends JComponent {
add(new JLabel("cardText:")); add(cardText); add(new JLabel("cardText:")); add(cardText);
typeField.addActionListener(((e)->updateReward())); typeField.addActionListener((new ActionListener() {
probability.addChangeListener(e->updateReward()); @Override
count.addChangeListener(e->updateReward()); public void actionPerformed(ActionEvent e) {
addMaxCount.addChangeListener(e->updateReward()); RewardEdit.this.updateReward();
cardName.getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); }
itemName.getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); }));
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); probability.addChangeListener(new ChangeListener() {
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); @Override
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); public void stateChanged(ChangeEvent e) {
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); RewardEdit.this.updateReward();
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); }
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); });
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); count.addChangeListener(new ChangeListener() {
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); @Override
colorType.addActionListener(((e)->updateReward())); public void stateChanged(ChangeEvent e) {
cardText.getDocument().addDocumentListener(new DocumentChangeListener(()->updateReward())); RewardEdit.this.updateReward();
}
});
addMaxCount.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
RewardEdit.this.updateReward();
}
});
cardName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
itemName.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
editions.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
colors.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
rarity.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
subTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
cardTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
superTypes.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
manaCosts.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
keyWords.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
colorType.addActionListener((new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardEdit.this.updateReward();
}
}));
cardText.getDocument().addDocumentListener(new DocumentChangeListener(new Runnable() {
@Override
public void run() {
RewardEdit.this.updateReward();
}
}));
} }

View File

@@ -5,7 +5,10 @@ import forge.adventure.data.RewardData;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
/** /**
@@ -55,11 +58,31 @@ public class RewardsEditor extends JComponent{
public RewardsEditor() public RewardsEditor()
{ {
list.setCellRenderer(new RewardsEditor.RewardDataRenderer()); list.setCellRenderer(new RewardDataRenderer());
list.addListSelectionListener(e -> updateEdit()); list.addListSelectionListener(new ListSelectionListener() {
addButton("add",e->addReward()); @Override
addButton("remove",e->remove()); public void valueChanged(ListSelectionEvent e) {
addButton("copy",e->copy()); RewardsEditor.this.updateEdit();
}
});
addButton("add", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.addReward();
}
});
addButton("remove", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.remove();
}
});
addButton("copy", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
RewardsEditor.this.copy();
}
});
BorderLayout layout=new BorderLayout(); BorderLayout layout=new BorderLayout();
setLayout(layout); setLayout(layout);
add(list, BorderLayout.LINE_START); add(list, BorderLayout.LINE_START);

View File

@@ -3,6 +3,8 @@ package forge.adventure.editor;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import javax.swing.*; import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -16,7 +18,12 @@ public class TextListEdit extends Box {
public TextListEdit(String[] possibleElements) { public TextListEdit(String[] possibleElements) {
super(BoxLayout.X_AXIS); super(BoxLayout.X_AXIS);
findButton.addActionListener(e->find()); findButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TextListEdit.this.find();
}
});
add(edit); add(edit);
//add(findButton); //add(findButton);

View File

@@ -1,26 +0,0 @@
package forge.adventure.scene;
/**
* Enum of all scenes
*/
public enum SceneType {
StartScene(new forge.adventure.scene.StartScene()),
NewGameScene(new forge.adventure.scene.NewGameScene()),
SettingsScene(new forge.adventure.scene.SettingsScene()),
GameScene(new forge.adventure.scene.GameScene()),
DuelScene(new forge.adventure.scene.DuelScene()),
SaveLoadScene(new forge.adventure.scene.SaveLoadScene()),
DeckEditScene(new forge.adventure.scene.DeckEditScene()),
TileMapScene(new forge.adventure.scene.TileMapScene()),
RewardScene(new forge.adventure.scene.RewardScene()),
InnScene(new forge.adventure.scene.InnScene()),
DeckSelectScene(new forge.adventure.scene.DeckSelectScene()),
ShopScene(new forge.adventure.scene.ShopScene()),
PlayerStatisticScene(new forge.adventure.scene.PlayerStatisticScene());
public final forge.adventure.scene.Scene instance;
SceneType(forge.adventure.scene.Scene scene) {
this.instance = scene;
}
}

View File

@@ -22,6 +22,7 @@ public class Localizer {
private Locale locale; private Locale locale;
private ResourceBundle resourceBundle; private ResourceBundle resourceBundle;
private boolean silent = false;
public static Localizer getInstance() { public static Localizer getInstance() {
if (instance == null) { if (instance == null) {
@@ -60,7 +61,11 @@ public class Localizer {
public String getMessageorUseDefault(final String key, final String defaultValue, final Object... messageArguments) { public String getMessageorUseDefault(final String key, final String defaultValue, final Object... messageArguments) {
try { try {
return getMessage(key, messageArguments); silent = true;
String value = getMessage(key, messageArguments);
if (value.contains("INVALID PROPERTY:"))
return defaultValue;
return value;
} catch (Exception e) { } catch (Exception e) {
return defaultValue; return defaultValue;
} }
@@ -73,14 +78,17 @@ public class Localizer {
//formatter = new MessageFormat(resourceBundle.getString(key.toLowerCase()), locale); //formatter = new MessageFormat(resourceBundle.getString(key.toLowerCase()), locale);
formatter = new MessageFormat(resourceBundle.getString(key), locale); formatter = new MessageFormat(resourceBundle.getString(key), locale);
} catch (final IllegalArgumentException | MissingResourceException e) { } catch (final IllegalArgumentException | MissingResourceException e) {
if (!silent)
e.printStackTrace(); e.printStackTrace();
} }
if (formatter == null) { if (formatter == null && !silent) {
System.err.println("INVALID PROPERTY: '" + key + "' -- Translation Needed?"); System.err.println("INVALID PROPERTY: '" + key + "' -- Translation Needed?");
return "INVALID PROPERTY: '" + key + "' -- Translation Needed?"; return "INVALID PROPERTY: '" + key + "' -- Translation Needed?";
} }
silent = false;
formatter.setLocale(locale); formatter.setLocale(locale);
String formattedMessage = "CHAR ENCODING ERROR"; String formattedMessage = "CHAR ENCODING ERROR";

View File

@@ -44,6 +44,7 @@
-keep class io.sentry.event.Event { *; } -keep class io.sentry.event.Event { *; }
-keep class io.netty.util.internal.logging.** { *; } -keep class io.netty.util.internal.logging.** { *; }
-keep class net.jpountz.** { *; } -keep class net.jpountz.** { *; }
-keep class com.ray3k.** { *; }
-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* { -keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* {
<init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration); <init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration);

View File

@@ -5,7 +5,17 @@ import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Clipboard; import com.badlogic.gdx.utils.Clipboard;
import com.badlogic.gdx.utils.ScreenUtils;
import forge.adventure.scene.ForgeScene;
import forge.adventure.scene.Scene;
import forge.adventure.scene.SceneType;
import forge.adventure.util.Config;
import forge.animation.ForgeAnimation; import forge.animation.ForgeAnimation;
import forge.assets.AssetsDownloader; import forge.assets.AssetsDownloader;
import forge.assets.FSkin; import forge.assets.FSkin;
@@ -40,6 +50,13 @@ public class Forge implements ApplicationListener {
public static final String CURRENT_VERSION = "1.6.47.001"; public static final String CURRENT_VERSION = "1.6.47.001";
private static ApplicationListener app = null; private static ApplicationListener app = null;
static Scene currentScene = null;
static Array<Scene> lastScene = new Array<>();
private float animationTimeout;
static Batch animationBatch;
static Texture transitionTexture;
static TextureRegion lastScreenTexture;
private static boolean sceneWasSwapped =false;
private static Clipboard clipboard; private static Clipboard clipboard;
private static IDeviceAdapter deviceAdapter; private static IDeviceAdapter deviceAdapter;
private static int screenWidth; private static int screenWidth;
@@ -71,6 +88,7 @@ public class Forge implements ApplicationListener {
public static boolean isPortraitMode = false; public static boolean isPortraitMode = false;
public static boolean gameInProgress = false; public static boolean gameInProgress = false;
public static boolean disposeTextures = false; public static boolean disposeTextures = false;
public static boolean isMobileAdventureMode = false;
public static int cacheSize = 400; public static int cacheSize = 400;
public static int totalDeviceRAM = 0; public static int totalDeviceRAM = 0;
public static int androidVersion = 0; public static int androidVersion = 0;
@@ -97,21 +115,6 @@ public class Forge implements ApplicationListener {
GuiBase.setDeviceInfo(deviceName, AndroidRelease, AndroidAPI, totalRAM); GuiBase.setDeviceInfo(deviceName, AndroidRelease, AndroidAPI, totalRAM);
return app; return app;
} }
protected Forge(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0, boolean value, boolean androidOrientation, int totalRAM, boolean isTablet, int AndroidAPI, String AndroidRelease, String deviceName) {
if (GuiBase.getInterface() == null) {
clipboard = clipboard0;
deviceAdapter = deviceAdapter0;
GuiBase.setUsingAppDirectory(assetDir0.contains("forge.app")); //obb directory on android uses the package name as entrypoint
GuiBase.setInterface(new GuiMobile(assetDir0));
GuiBase.enablePropertyConfig(value);
isPortraitMode = androidOrientation;
totalDeviceRAM = totalRAM;
isTabletDevice = isTablet;
androidVersion = AndroidAPI;
}
GuiBase.setDeviceInfo(deviceName, AndroidRelease, AndroidAPI, totalRAM);
app=this;
}
private Forge() { private Forge() {
} }
@@ -132,6 +135,8 @@ public class Forge implements ApplicationListener {
graphics = new Graphics(); graphics = new Graphics();
splashScreen = new SplashScreen(); splashScreen = new SplashScreen();
frameRate = new FrameRate(); frameRate = new FrameRate();
animationBatch = new SpriteBatch();
Gdx.input.setInputProcessor(new MainInputProcessor()); Gdx.input.setInputProcessor(new MainInputProcessor());
/* /*
Set CatchBackKey here and exit the app when you hit the Set CatchBackKey here and exit the app when you hit the
@@ -222,6 +227,14 @@ public class Forge implements ApplicationListener {
}); });
} }
public static Graphics getGraphics() {
return graphics;
}
public static Scene getCurrentScene() {
return currentScene;
}
private void preloadExtendedArt() { private void preloadExtendedArt() {
if (!enablePreloadExtendedArt||!enableUIMask.equals("Full")) if (!enablePreloadExtendedArt||!enableUIMask.equals("Full"))
return; return;
@@ -252,30 +265,52 @@ public class Forge implements ApplicationListener {
/*for (FScreen fScreen : Dscreens) /*for (FScreen fScreen : Dscreens)
System.out.println(fScreen.toString());*/ System.out.println(fScreen.toString());*/
} }
public static void openHomeDefault() {
GuiBase.setIsAdventureMode(false);
openHomeScreen(-1, null); //default for startup
splashScreen = null;
isMobileAdventureMode = false;
if (isLandscapeMode()) { //open preferred new game screen by default if landscape mode
NewGameMenu.getPreferredScreen().open();
}
}
public static void openAdventure() {
//continuous rendering is needed for adventure mode
startContinuousRendering();
GuiBase.setIsAdventureMode(true);
splashScreen = null;
isMobileAdventureMode = true;
try {
for (SceneType sceneType : SceneType.values()) {
sceneType.instance.resLoaded();
}
switchScene(SceneType.StartScene.instance);
} catch (Exception e) { e.printStackTrace(); }
}
protected void afterDbLoaded() { protected void afterDbLoaded() {
stopContinuousRendering(); //save power consumption by disabling continuous rendering once assets loaded stopContinuousRendering(); //save power consumption by disabling continuous rendering once assets loaded
//init here to fix crash if the assets are missings on android
transitionTexture = new Texture(Config.instance().getFile("ui/transition.png"));
FSkin.loadFull(splashScreen); FSkin.loadFull(splashScreen);
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music
destroyThis = false; //Allow back() destroyThis = false; //Allow back()
Gdx.input.setCatchKey(Keys.MENU, true); Gdx.input.setCatchKey(Keys.MENU, true);
openHomeScreen(-1, null); //default for startup
splashScreen = null;
afterDBloaded = true;
boolean isLandscapeMode = isLandscapeMode(); afterDBloaded = true;
if (isLandscapeMode) { //open preferred new game screen by default if landscape mode //selection
NewGameMenu.getPreferredScreen().open(); if (isLandscapeMode() && !GuiBase.isAndroid())
} splashScreen.setShowModeSelector(true);
else
openHomeDefault();
//adjust height modifier //adjust height modifier
adjustHeightModifier(getScreenWidth(), getScreenHeight()); adjustHeightModifier(getScreenWidth(), getScreenHeight());
//update landscape mode preference if it doesn't match what the app loaded as //update landscape mode preference if it doesn't match what the app loaded as
if (FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE) != isLandscapeMode) { if (FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE) != isLandscapeMode()) {
FModel.getPreferences().setPref(FPref.UI_LANDSCAPE_MODE, isLandscapeMode); FModel.getPreferences().setPref(FPref.UI_LANDSCAPE_MODE, isLandscapeMode());
FModel.getPreferences().save(); FModel.getPreferences().save();
} }
} }
@@ -488,6 +523,9 @@ public class Forge implements ApplicationListener {
return currentScreen; return currentScreen;
} }
public static void clearCurrentScreen() {
currentScreen = null;
}
private static void setCurrentScreen(FScreen screen0) { private static void setCurrentScreen(FScreen screen0) {
String toNewScreen = screen0 != null ? screen0.toString() : ""; String toNewScreen = screen0 != null ? screen0.toString() : "";
String previousScreen = currentScreen != null ? currentScreen.toString() : ""; String previousScreen = currentScreen != null ? currentScreen.toString() : "";
@@ -527,6 +565,60 @@ public class Forge implements ApplicationListener {
if (screen == null) { if (screen == null) {
screen = splashScreen; screen = splashScreen;
if (screen == null) { if (screen == null) {
if (isMobileAdventureMode) {
float delta=Gdx.graphics.getDeltaTime();
float transitionTime = 0.2f;
if(sceneWasSwapped)
{
sceneWasSwapped =false;
animationTimeout= transitionTime;
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
return;
}
if(animationTimeout>=0)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
animationBatch.begin();
animationTimeout-=delta;
animationBatch.setColor(1,1,1,1);
animationBatch.draw(lastScreenTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.setColor(1,1,1,1-(1/ transitionTime)*animationTimeout);
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.end();
if(animationTimeout<0)
{
currentScene.render();
storeScreen();
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
else
{
return;
}
}
if(animationTimeout>=-transitionTime)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
animationBatch.begin();
animationTimeout-=delta;
animationBatch.setColor(1,1,1,1);
animationBatch.draw(lastScreenTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.setColor(1,1,1,(1/ transitionTime)*(animationTimeout+ transitionTime));
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.draw(transitionTexture,0,0, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
animationBatch.end();
return;
}
currentScene.render();
currentScene.act(delta);
}
if (showFPS)
frameRate.render();
return; return;
} }
} }
@@ -534,7 +626,7 @@ public class Forge implements ApplicationListener {
graphics.begin(screenWidth, screenHeight); graphics.begin(screenWidth, screenHeight);
screen.screenPos.setSize(screenWidth, screenHeight); screen.screenPos.setSize(screenWidth, screenHeight);
if (screen.getRotate180()) { if (screen.getRotate180()) {
graphics.startRotateTransform(screenWidth / 2, screenHeight / 2, 180); graphics.startRotateTransform(screenWidth / 2f, screenHeight / 2f, 180);
} }
screen.draw(graphics); screen.draw(graphics);
if (screen.getRotate180()) { if (screen.getRotate180()) {
@@ -545,7 +637,7 @@ public class Forge implements ApplicationListener {
overlay.screenPos.setSize(screenWidth, screenHeight); overlay.screenPos.setSize(screenWidth, screenHeight);
overlay.setSize(screenWidth, screenHeight); //update overlay sizes as they're rendered overlay.setSize(screenWidth, screenHeight); //update overlay sizes as they're rendered
if (overlay.getRotate180()) { if (overlay.getRotate180()) {
graphics.startRotateTransform(screenWidth / 2, screenHeight / 2, 180); graphics.startRotateTransform(screenWidth / 2f, screenHeight / 2f, 180);
} }
overlay.draw(graphics); overlay.draw(graphics);
if (overlay.getRotate180()) { if (overlay.getRotate180()) {
@@ -615,6 +707,43 @@ public class Forge implements ApplicationListener {
catch (Exception e) {} catch (Exception e) {}
} }
public static boolean switchScene(Scene newScene) {
if (currentScene != null) {
if (!currentScene.leave())
return false;
lastScene.add(currentScene);
}
storeScreen();
sceneWasSwapped =true;
currentScene = newScene;
currentScene.enter();
return true;
}
protected static void storeScreen() {
if(!(currentScene instanceof ForgeScene))
{
if(lastScreenTexture!=null)
lastScreenTexture.getTexture().dispose();
lastScreenTexture = ScreenUtils.getFrameBufferTexture();
}
}
public static Scene switchToLast() {
if(lastScene.size!=0)
{
storeScreen();
currentScene = lastScene.get(lastScene.size-1);
currentScene.enter();
sceneWasSwapped =true;
lastScene.removeIndex(lastScene.size-1);
return currentScene;
}
return null;
}
//log message to Forge.log file //log message to Forge.log file
public static void log(Object message) { public static void log(Object message) {
System.out.println(message); System.out.println(message);
@@ -770,6 +899,9 @@ public class Forge implements ApplicationListener {
if (currentScreen != null) { if (currentScreen != null) {
currentScreen.buildTouchListeners(x, y, potentialListeners); currentScreen.buildTouchListeners(x, y, potentialListeners);
} }
if (splashScreen != null) {
splashScreen.buildTouchListeners(x, y, potentialListeners);
}
} }
@Override @Override

View File

@@ -1,6 +1,10 @@
package forge.adventure.character; package forge.adventure.character;
import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.graphics.g2d.Animation;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;

View File

@@ -1,10 +1,10 @@
package forge.adventure.character; package forge.adventure.character;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import forge.adventure.player.AdventurePlayer;
import forge.adventure.stage.GameStage; import forge.adventure.stage.GameStage;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.player.AdventurePlayer;
/** /**
* Class that will represent the player sprite on the map * Class that will represent the player sprite on the map
@@ -18,7 +18,12 @@ public class PlayerSprite extends CharacterSprite {
super(AdventurePlayer.current().spriteName()); super(AdventurePlayer.current().spriteName());
this.gameStage=gameStage; this.gameStage=gameStage;
setOriginX(getWidth() / 2); setOriginX(getWidth() / 2);
Current.player().onPlayerChanged(()->updatePlayer()); Current.player().onPlayerChanged(new Runnable() {
@Override
public void run() {
PlayerSprite.this.updatePlayer();
}
});
playerSpeed=Config.instance().getConfigData().playerBaseSpeed; playerSpeed=Config.instance().getConfigData().playerBaseSpeed;
} }

View File

@@ -1,7 +1,7 @@
package forge.adventure.character; package forge.adventure.character;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.scene.RewardScene; import forge.adventure.scene.RewardScene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.adventure.stage.MapStage; import forge.adventure.stage.MapStage;
@@ -34,7 +34,7 @@ public class ShopActor extends MapActor{
stage.GetPlayer().stop(); stage.GetPlayer().stop();
((RewardScene) SceneType.RewardScene.instance).loadRewards(rewardData, RewardScene.Type.Shop,this); ((RewardScene) SceneType.RewardScene.instance).loadRewards(rewardData, RewardScene.Type.Shop,this);
AdventureApplicationAdapter.instance.switchScene(SceneType.RewardScene.instance); Forge.switchScene(SceneType.RewardScene.instance);
} }
public int getObjectID() { public int getObjectID() {

View File

@@ -1,6 +1,7 @@
package forge.adventure.data; package forge.adventure.data;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.StaticData; import forge.StaticData;
import forge.adventure.util.CardUtil; import forge.adventure.util.CardUtil;
@@ -9,6 +10,7 @@ import forge.adventure.util.Reward;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.FModel; import forge.model.FModel;
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -83,9 +85,12 @@ public class RewardData {
{ {
allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true)); allCards = Iterables.filter(FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(), new CardUtil.CardPredicate(legals, true));
} }
allEnemyCards=Iterables.filter(allCards, input -> { allEnemyCards=Iterables.filter(allCards, new Predicate<PaperCard>() {
@Override
public boolean apply(@NullableDecl PaperCard input) {
if (input == null) return false; if (input == null) return false;
return !input.getRules().getAiHints().getRemAIDecks(); return !input.getRules().getAiHints().getRemAIDecks();
}
}); });
} }
Array<Reward> ret=new Array<>(); Array<Reward> ret=new Array<>();

View File

@@ -5,7 +5,12 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.adventure.data.DifficultyData; import forge.adventure.data.DifficultyData;
import forge.adventure.data.HeroListData; import forge.adventure.data.HeroListData;
import forge.adventure.util.*; import forge.adventure.util.CardUtil;
import forge.adventure.util.Config;
import forge.adventure.util.Reward;
import forge.adventure.util.SaveFileContent;
import forge.adventure.util.SaveFileData;
import forge.adventure.util.SignalList;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;

View File

@@ -5,16 +5,23 @@ import com.badlogic.gdx.utils.Align;
import com.google.common.base.Function; import com.google.common.base.Function;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.adventure.AdventureApplicationAdapter;
import forge.adventure.player.AdventurePlayer; import forge.adventure.player.AdventurePlayer;
import forge.assets.FImage; import forge.assets.FImage;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.deck.*; import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckFormat;
import forge.deck.DeckSection;
import forge.deck.FDeckViewer;
import forge.gui.FThreads; import forge.gui.FThreads;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.itemmanager.*; import forge.itemmanager.CardManager;
import forge.itemmanager.ColumnDef;
import forge.itemmanager.ItemColumn;
import forge.itemmanager.ItemManager;
import forge.itemmanager.ItemManagerConfig;
import forge.itemmanager.filters.ItemFilter; import forge.itemmanager.filters.ItemFilter;
import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences;
import forge.menu.FCheckBoxMenuItem; import forge.menu.FCheckBoxMenuItem;
@@ -25,12 +32,16 @@ import forge.model.FModel;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.screens.TabPageScreen; import forge.screens.TabPageScreen;
import forge.toolbox.*; import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FLabel;
import forge.toolbox.GuiChoose;
import forge.util.Callback; import forge.util.Callback;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.Localizer; import forge.util.Localizer;
import forge.util.Utils; import forge.util.Utils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -69,41 +80,48 @@ import java.util.Map;
((CardManagerPage)page).refresh(); ((CardManagerPage)page).refresh();
} }
for (TabPage<AdventureDeckEditor> tabPage : tabPages) { for (TabPage<AdventureDeckEditor> tabPage : tabPages) {
((AdventureDeckEditor.DeckEditorPage)tabPage).initialize(); ((DeckEditorPage)tabPage).initialize();
} }
} }
private static AdventureDeckEditor.DeckEditorPage[] getPages() { private static DeckEditorPage[] getPages() {
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
return new AdventureDeckEditor.DeckEditorPage[] { return new DeckEditorPage[] {
new AdventureDeckEditor.CatalogPage(ItemManagerConfig.QUEST_EDITOR_POOL, localizer.getMessage("lblInventory"), FSkinImage.QUEST_BOX), new CatalogPage(ItemManagerConfig.QUEST_EDITOR_POOL, localizer.getMessage("lblInventory"), FSkinImage.QUEST_BOX),
new AdventureDeckEditor.DeckSectionPage(DeckSection.Main, ItemManagerConfig.QUEST_DECK_EDITOR), new DeckSectionPage(DeckSection.Main, ItemManagerConfig.QUEST_DECK_EDITOR),
new AdventureDeckEditor.DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.QUEST_DECK_EDITOR) new DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.QUEST_DECK_EDITOR)
}; };
} }
private AdventureDeckEditor.CatalogPage catalogPage; private CatalogPage catalogPage;
private AdventureDeckEditor.DeckSectionPage mainDeckPage; private DeckSectionPage mainDeckPage;
private AdventureDeckEditor.DeckSectionPage sideboardPage; private DeckSectionPage sideboardPage;
private AdventureDeckEditor.DeckSectionPage commanderPage; private DeckSectionPage commanderPage;
protected final AdventureDeckEditor.DeckHeader deckHeader = add(new AdventureDeckEditor.DeckHeader()); protected final DeckHeader deckHeader = add(new DeckHeader());
protected final FLabel lblName = deckHeader.add(new FLabel.Builder().font(FSkinFont.get(16)).insets(new Vector2(Utils.scale(5), 0)).build()); protected final FLabel lblName = deckHeader.add(new FLabel.Builder().font(FSkinFont.get(16)).insets(new Vector2(Utils.scale(5), 0)).build());
private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(Align.center).pressedColor(Header.BTN_PRESSED_COLOR).build()); private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(Align.center).pressedColor(Header.BTN_PRESSED_COLOR).build());
boolean isShop=false; boolean isShop=false;
public AdventureDeckEditor(boolean createAsShop) { public AdventureDeckEditor(boolean createAsShop) {
super(e -> {AdventurePlayer.current().getNewCards().clear();AdventureApplicationAdapter.instance.switchToLast();},getPages()); super(new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
AdventurePlayer.current().getNewCards().clear();
Forge.clearCurrentScreen();
Forge.switchScene(SceneType.DeckSelectScene.instance);
}
},getPages());
isShop=createAsShop; isShop=createAsShop;
//cache specific pages //cache specific pages
for (TabPage<AdventureDeckEditor> tabPage : tabPages) { for (TabPage<AdventureDeckEditor> tabPage : tabPages) {
if (tabPage instanceof AdventureDeckEditor.CatalogPage) { if (tabPage instanceof CatalogPage) {
catalogPage = (AdventureDeckEditor.CatalogPage) tabPage; catalogPage = (CatalogPage) tabPage;
} }
else if (tabPage instanceof AdventureDeckEditor.DeckSectionPage) { else if (tabPage instanceof DeckSectionPage) {
AdventureDeckEditor.DeckSectionPage deckSectionPage = (AdventureDeckEditor.DeckSectionPage) tabPage; DeckSectionPage deckSectionPage = (DeckSectionPage) tabPage;
switch (deckSectionPage.deckSection) { switch (deckSectionPage.deckSection) {
case Main: case Main:
case Schemes: case Schemes:
@@ -130,8 +148,13 @@ import java.util.Map;
protected void buildMenu() { protected void buildMenu() {
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
addItem(new FMenuItem(localizer.getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, e1 -> FDeckViewer.copyDeckToClipboard(getDeck()))); addItem(new FMenuItem(localizer.getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, new FEvent.FEventHandler() {
((AdventureDeckEditor.DeckEditorPage)getSelectedPage()).buildDeckMenu(this); @Override
public void handleEvent(FEvent e1) {
FDeckViewer.copyDeckToClipboard(getDeck());
}
}));
((DeckEditorPage)getSelectedPage()).buildDeckMenu(this);
} }
}; };
menu.show(btnMoreOptions, 0, btnMoreOptions.getHeight()); menu.show(btnMoreOptions, 0, btnMoreOptions.getHeight());
@@ -149,19 +172,19 @@ import java.util.Map;
public Deck getDeck() { public Deck getDeck() {
return AdventurePlayer.current().getSelectedDeck(); return AdventurePlayer.current().getSelectedDeck();
} }
protected AdventureDeckEditor.CatalogPage getCatalogPage() { protected CatalogPage getCatalogPage() {
return catalogPage; return catalogPage;
} }
protected AdventureDeckEditor.DeckSectionPage getMainDeckPage() { protected DeckSectionPage getMainDeckPage() {
return mainDeckPage; return mainDeckPage;
} }
protected AdventureDeckEditor.DeckSectionPage getSideboardPage() { protected DeckSectionPage getSideboardPage() {
return sideboardPage; return sideboardPage;
} }
protected AdventureDeckEditor.DeckSectionPage getCommanderPage() { protected DeckSectionPage getCommanderPage() {
return commanderPage; return commanderPage;
} }
@@ -222,25 +245,54 @@ import java.util.Map;
} }
} }
protected static abstract class CardManagerPage extends AdventureDeckEditor.DeckEditorPage { protected static abstract class CardManagerPage extends DeckEditorPage {
private final ItemManagerConfig config; private final ItemManagerConfig config;
protected final CardManager cardManager = add(new CardManager(false)); protected final CardManager cardManager = add(new CardManager(false));
protected CardManagerPage(ItemManagerConfig config0, String caption0, FImage icon0) { protected CardManagerPage(ItemManagerConfig config0, String caption0, FImage icon0) {
super(caption0, icon0); super(caption0, icon0);
config = config0; config = config0;
cardManager.setItemActivateHandler(e -> onCardActivated(cardManager.getSelectedItem())); cardManager.setItemActivateHandler(new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
CardManagerPage.this.onCardActivated(cardManager.getSelectedItem());
}
});
cardManager.setContextMenuBuilder(new ItemManager.ContextMenuBuilder<PaperCard>() { cardManager.setContextMenuBuilder(new ItemManager.ContextMenuBuilder<PaperCard>() {
@Override @Override
public void buildMenu(final FDropDownMenu menu, final PaperCard card) { public void buildMenu(final FDropDownMenu menu, final PaperCard card) {
AdventureDeckEditor.CardManagerPage.this.buildMenu(menu, card); CardManagerPage.this.buildMenu(menu, card);
} }
}); });
} }
private final Function<Map.Entry<InventoryItem, Integer>, Comparable<?>> fnNewCompare = from -> AdventurePlayer.current().getNewCards().contains(from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0); private final Function<Map.Entry<InventoryItem, Integer>, Comparable<?>> fnNewCompare = new Function<Map.Entry<InventoryItem, Integer>, Comparable<?>>() {
private final Function<Map.Entry<? extends InventoryItem, Integer>, Object> fnNewGet = from -> AdventurePlayer.current().getNewCards().contains(from.getKey()) ? "NEW" : ""; @NullableDecl
public static final Function<Map.Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = from -> decksUsingMyCards.count(from.getKey()); @Override
public static final Function<Map.Entry<? extends InventoryItem, Integer>, Object> fnDeckGet = from -> Integer.valueOf(decksUsingMyCards.count(from.getKey())).toString(); public Comparable<?> apply(@NullableDecl Map.Entry<InventoryItem, Integer> from) {
return AdventurePlayer.current().getNewCards().contains(from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0);
}
};
private final Function<Map.Entry<? extends InventoryItem, Integer>, Object> fnNewGet = new Function<Map.Entry<? extends InventoryItem, Integer>, Object>() {
@NullableDecl
@Override
public Object apply(@NullableDecl Map.Entry<? extends InventoryItem, Integer> from) {
return AdventurePlayer.current().getNewCards().contains(from.getKey()) ? "NEW" : "";
}
};
public static final Function<Map.Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = new Function<Map.Entry<InventoryItem, Integer>, Comparable<?>>() {
@NullableDecl
@Override
public Comparable<?> apply(@NullableDecl Map.Entry<InventoryItem, Integer> from) {
return decksUsingMyCards.count(from.getKey());
}
};
public static final Function<Map.Entry<? extends InventoryItem, Integer>, Object> fnDeckGet = new Function<Map.Entry<? extends InventoryItem, Integer>, Object>() {
@NullableDecl
@Override
public Object apply(@NullableDecl Map.Entry<? extends InventoryItem, Integer> from) {
return Integer.valueOf(decksUsingMyCards.count(from.getKey())).toString();
}
};
protected void initialize() { protected void initialize() {
@@ -370,13 +422,16 @@ import java.util.Map;
if (!StringUtils.isEmpty(dest)) { if (!StringUtils.isEmpty(dest)) {
label += " " + dest; label += " " + dest;
} }
menu.addItem(new FMenuItem(label, icon, e -> { menu.addItem(new FMenuItem(label, icon, new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (max == 1) { if (max == 1) {
callback.run(max); callback.run(max);
} else { } else {
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + localizer.getMessage("lblHowMany"), 1, max, 20, callback); GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + localizer.getMessage("lblHowMany"), 1, max, 20, callback);
} }
}
})); }));
} }
@@ -488,7 +543,7 @@ import java.util.Map;
} }
} }
protected static class CatalogPage extends AdventureDeckEditor.CardManagerPage { protected static class CatalogPage extends CardManagerPage {
private boolean initialized, needRefreshWhenShown; private boolean initialized, needRefreshWhenShown;
protected CatalogPage(ItemManagerConfig config, String caption0, FImage icon0) { protected CatalogPage(ItemManagerConfig config, String caption0, FImage icon0) {
@@ -537,7 +592,12 @@ import java.util.Map;
@Override @Override
public void refresh() { public void refresh() {
FThreads.invokeInEdtLater(() -> LoadingOverlay.show(Localizer.getInstance().getMessage("lblLoading"), () -> { FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
LoadingOverlay.show(Localizer.getInstance().getMessage("lblLoading"), new Runnable() {
@Override
public void run() {
final ItemPool<PaperCard> adventurePool = new ItemPool<>(PaperCard.class); final ItemPool<PaperCard> adventurePool = new ItemPool<>(PaperCard.class);
adventurePool.addAll(AdventurePlayer.current().getCards()); adventurePool.addAll(AdventurePlayer.current().getCards());
@@ -546,7 +606,10 @@ import java.util.Map;
// remove sideboard cards from the catalog // remove sideboard cards from the catalog
adventurePool.removeAll(AdventurePlayer.current().getSelectedDeck().getOrCreate(DeckSection.Sideboard)); adventurePool.removeAll(AdventurePlayer.current().getSelectedDeck().getOrCreate(DeckSection.Sideboard));
cardManager.setPool(adventurePool); cardManager.setPool(adventurePool);
})); }
});
}
});
} }
@Override @Override
@@ -621,17 +684,20 @@ import java.util.Map;
protected void buildDeckMenu(FPopupMenu menu) { protected void buildDeckMenu(FPopupMenu menu) {
if (cardManager.getConfig().getShowUniqueCardsOption()) { if (cardManager.getConfig().getShowUniqueCardsOption()) {
final Localizer localizer = Localizer.getInstance(); final Localizer localizer = Localizer.getInstance();
menu.addItem(new FCheckBoxMenuItem(localizer.getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), e -> { menu.addItem(new FCheckBoxMenuItem(localizer.getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
boolean wantUnique = !cardManager.getWantUnique(); boolean wantUnique = !cardManager.getWantUnique();
cardManager.setWantUnique(wantUnique); cardManager.setWantUnique(wantUnique);
refresh(); CatalogPage.this.refresh();
cardManager.getConfig().setUniqueCardsOnly(wantUnique); cardManager.getConfig().setUniqueCardsOnly(wantUnique);
}
})); }));
} }
} }
} }
protected static class DeckSectionPage extends AdventureDeckEditor.CardManagerPage { protected static class DeckSectionPage extends CardManagerPage {
private final String captionPrefix; private final String captionPrefix;
private final DeckSection deckSection; private final DeckSection deckSection;

View File

@@ -3,14 +3,19 @@ package forge.adventure.scene;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
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.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.IntMap;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.player.AdventurePlayer;
import forge.adventure.util.Controls; import forge.adventure.util.Controls;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.player.AdventurePlayer;
public class DeckSelectScene extends UIScene { public class DeckSelectScene extends UIScene {
private final IntMap<TextButton> buttons = new IntMap<>(); private final IntMap<TextButton> buttons = new IntMap<>();
@@ -51,7 +56,7 @@ public class DeckSelectScene extends UIScene {
} }
public void back() { public void back() {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchScene(SceneType.GameScene.instance);
} }
public boolean select(int slot) { public boolean select(int slot) {
@@ -114,15 +119,38 @@ public class DeckSelectScene extends UIScene {
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left); dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX(); dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row(); dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Rename", () -> rename())).align(Align.left); dialog.getButtonTable().add(Controls.newTextButton("Rename", new Runnable() {
dialog.getButtonTable().add(Controls.newTextButton("Abort", () -> dialog.hide())).align(Align.left); @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);
ui.onButtonPress("return",()-> back()); ui.onButtonPress("return", new Runnable() {
ui.onButtonPress("edit",()-> edit()); @Override
ui.onButtonPress("rename",()-> { public void run() {
DeckSelectScene.this.back();
}
});
ui.onButtonPress("edit", new Runnable() {
@Override
public void run() {
DeckSelectScene.this.edit();
}
});
ui.onButtonPress("rename", new Runnable() {
@Override
public void run() {
textInput.setText(Current.player().getSelectedDeck().getName()); textInput.setText(Current.player().getSelectedDeck().getName());
dialog.show(stage); dialog.show(stage);
stage.setKeyboardFocus(textInput); stage.setKeyboardFocus(textInput);
}
}); });
defColor = ui.findActor("return").getColor(); defColor = ui.findActor("return").getColor();
@@ -139,6 +167,6 @@ public class DeckSelectScene extends UIScene {
} }
private void edit() { private void edit() {
AdventureApplicationAdapter.instance.switchScene(SceneType.DeckEditScene.instance); Forge.switchScene(SceneType.DeckEditScene.instance);
} }
} }

View File

@@ -1,13 +1,13 @@
package forge.adventure.scene; package forge.adventure.scene;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import forge.Forge;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.adventure.AdventureApplicationAdapter;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.character.PlayerSprite; import forge.adventure.character.PlayerSprite;
import forge.adventure.player.AdventurePlayer;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.player.AdventurePlayer;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameRules; import forge.game.GameRules;
@@ -24,7 +24,12 @@ import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem; import forge.sound.SoundSystem;
import forge.trackable.TrackableCollection; import forge.trackable.TrackableCollection;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* DuelScene * DuelScene
@@ -49,15 +54,17 @@ public class DuelScene extends ForgeScene {
public void GameEnd() { public void GameEnd() {
boolean winner=humanPlayer == hostedMatch.getGame().getMatch().getWinner(); boolean winner=humanPlayer == hostedMatch.getGame().getMatch().getWinner();
String enemyName=enemy.getData().name; String enemyName=enemy.getData().name;
Gdx.app.postRunnable(() -> { Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MENUS); //start background music
Scene last= AdventureApplicationAdapter.instance.switchToLast(); Scene last = Forge.switchToLast();
if(last instanceof HudScene) if (last instanceof HudScene) {
{
Current.player().getStatistic().setResult(enemyName, winner); Current.player().getStatistic().setResult(enemyName, winner);
((HudScene) last).stage.setWinner(winner); ((HudScene) last).stage.setWinner(winner);
} }
}
}); });
@@ -105,7 +112,12 @@ public class DuelScene extends ForgeScene {
rules.setGamesPerMatch(1); rules.setGamesPerMatch(1);
rules.setManaBurn(false); rules.setManaBurn(false);
hostedMatch.setEndGameHook(() -> GameEnd()); hostedMatch.setEndGameHook(new Runnable() {
@Override
public void run() {
DuelScene.this.GameEnd();
}
});
hostedMatch.startMatch(rules, appliedVariants, players, guiMap); hostedMatch.startMatch(rules, appliedVariants, players, guiMap);
MatchController.instance.setGameView(hostedMatch.getGameView()); MatchController.instance.setGameView(hostedMatch.getGameView());

View File

@@ -2,13 +2,14 @@ package forge.adventure.scene;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import forge.Forge; import forge.Forge;
import forge.gui.GuiBase;
import forge.gui.error.BugReporter;
import forge.screens.match.MatchController; import forge.screens.match.MatchController;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FGestureAdapter; import forge.toolbox.FGestureAdapter;
import forge.toolbox.FOverlay; import forge.toolbox.FOverlay;
import forge.util.Utils; import forge.util.Utils;
import forge.gui.error.BugReporter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -280,6 +281,20 @@ public class ForgeInput extends FGestureAdapter {
public boolean mouseMoved(int x, int y) { public boolean mouseMoved(int x, int y) {
mouseMovedX = x; mouseMovedX = x;
mouseMovedY = y; mouseMovedY = y;
//todo: mouse listener for android?
if (GuiBase.isAndroid())
return true;
Forge.hoveredCount = 0;
//reset
try {
for (FDisplayObject listener : potentialListeners) {
listener.setHovered(false);
}
}
catch (Exception ex) {
BugReporter.reportException(ex);
}
updatePotentialListeners(x, y);
return true; return true;
} }

View File

@@ -2,16 +2,15 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import forge.adventure.AdventureApplicationAdapter;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.animation.ForgeAnimation; import forge.animation.ForgeAnimation;
import forge.assets.ImageCache; import forge.assets.ImageCache;
import forge.gamemodes.match.LobbySlotType;
import forge.interfaces.IUpdateable;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FOverlay; import forge.toolbox.FOverlay;
import forge.gamemodes.match.LobbySlotType;
import forge.interfaces.IUpdateable;
import java.util.List; import java.util.List;
@@ -35,10 +34,10 @@ public abstract class ForgeScene extends Scene implements IUpdateable {
} }
localGraphics.begin(AdventureApplicationAdapter.instance.getCurrentWidth(), AdventureApplicationAdapter.instance.getCurrentHeight()); localGraphics.begin(Forge.getScreenWidth(), Forge.getScreenHeight());
getScreen().screenPos.setSize(AdventureApplicationAdapter.instance.getCurrentWidth(), AdventureApplicationAdapter.instance.getCurrentHeight()); getScreen().screenPos.setSize(Forge.getScreenWidth(), Forge.getScreenHeight());
if (getScreen().getRotate180()) { if (getScreen().getRotate180()) {
localGraphics.startRotateTransform(AdventureApplicationAdapter.instance.getCurrentWidth() / 2f, AdventureApplicationAdapter.instance.getCurrentHeight() / 2f, 180); localGraphics.startRotateTransform( Forge.getScreenWidth() / 2f, Forge.getScreenHeight() / 2f, 180);
} }
getScreen().draw(localGraphics); getScreen().draw(localGraphics);
if (getScreen().getRotate180()) { if (getScreen().getRotate180()) {
@@ -46,10 +45,10 @@ public abstract class ForgeScene extends Scene implements IUpdateable {
} }
for (FOverlay overlay : FOverlay.getOverlays()) { for (FOverlay overlay : FOverlay.getOverlays()) {
if (overlay.isVisibleOnScreen(getScreen())) { if (overlay.isVisibleOnScreen(getScreen())) {
overlay.screenPos.setSize(AdventureApplicationAdapter.instance.getCurrentWidth(), AdventureApplicationAdapter.instance.getCurrentHeight()); overlay.screenPos.setSize(Forge.getScreenWidth(), Forge.getScreenHeight());
overlay.setSize(AdventureApplicationAdapter.instance.getCurrentWidth(), AdventureApplicationAdapter.instance.getCurrentHeight()); //update overlay sizes as they're rendered overlay.setSize(Forge.getScreenWidth(), Forge.getScreenHeight()); //update overlay sizes as they're rendered
if (overlay.getRotate180()) { if (overlay.getRotate180()) {
localGraphics.startRotateTransform(AdventureApplicationAdapter.instance.getCurrentHeight() / 2f, AdventureApplicationAdapter.instance.getCurrentHeight() / 2f, 180); localGraphics.startRotateTransform(Forge.getScreenWidth() / 2f, Forge.getScreenHeight() / 2f, 180);
} }
overlay.draw(localGraphics); overlay.draw(localGraphics);
if (overlay.getRotate180()) { if (overlay.getRotate180()) {
@@ -73,7 +72,7 @@ public abstract class ForgeScene extends Scene implements IUpdateable {
public void enter() { public void enter() {
FOverlay.hideAll(); FOverlay.hideAll();
if(getScreen()!=null) if(getScreen()!=null)
getScreen().setSize(AdventureApplicationAdapter.instance.getCurrentWidth(), AdventureApplicationAdapter.instance.getCurrentHeight()); getScreen().setSize(Forge.getScreenWidth(), Forge.getScreenHeight());
Forge.openScreen(getScreen()); Forge.openScreen(getScreen());
Gdx.input.setInputProcessor(input); Gdx.input.setInputProcessor(input);
@@ -88,7 +87,7 @@ public abstract class ForgeScene extends Scene implements IUpdateable {
@Override @Override
public void resLoaded() { public void resLoaded() {
localGraphics = AdventureApplicationAdapter.instance.getGraphics(); localGraphics = Forge.getGraphics();
} }

View File

@@ -2,7 +2,7 @@ package forge.adventure.scene;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.util.Current; import forge.adventure.util.Current;
/** /**
@@ -18,7 +18,7 @@ public class InnScene extends UIScene {
public void done() public void done()
{ {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
} }
public void heal() public void heal()
{ {
@@ -33,14 +33,29 @@ public class InnScene extends UIScene {
@Override @Override
public void resLoaded() { public void resLoaded() {
super.resLoaded(); super.resLoaded();
ui.onButtonPress("done",()->done()); ui.onButtonPress("done", new Runnable() {
ui.onButtonPress("heal",()->heal()); @Override
ui.onButtonPress("sell",()->sell()); public void run() {
InnScene.this.done();
}
});
ui.onButtonPress("heal", new Runnable() {
@Override
public void run() {
InnScene.this.heal();
}
});
ui.onButtonPress("sell", new Runnable() {
@Override
public void run() {
InnScene.this.sell();
}
});
TextButton doneButton = ui.findActor("done"); TextButton doneButton = ui.findActor("done");
} }
private void sell() { private void sell() {
AdventureApplicationAdapter.instance.switchScene(SceneType.ShopScene.instance); Forge.switchScene(SceneType.ShopScene.instance);
} }
@Override @Override

View File

@@ -1,11 +1,13 @@
package forge.adventure.scene; package forge.adventure.scene;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
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.Image;
import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.data.DifficultyData; import forge.adventure.data.DifficultyData;
import forge.adventure.data.HeroListData; import forge.adventure.data.HeroListData;
import forge.adventure.util.Config; import forge.adventure.util.Config;
@@ -47,12 +49,12 @@ public class NewGameScene extends UIScene {
GamePlayerUtil.getGuiPlayer().setName(selectedName.getText()); GamePlayerUtil.getGuiPlayer().setName(selectedName.getText());
//image = new Texture(img); //image = new Texture(img);
AdventureApplicationAdapter.instance.switchScene(SceneType.GameScene.instance); Forge.switchScene(SceneType.GameScene.instance);
return true; return true;
} }
public boolean back() { public boolean back() {
AdventureApplicationAdapter.instance.switchScene(SceneType.StartScene.instance); Forge.switchScene(SceneType.StartScene.instance);
return true; return true;
} }
@@ -64,7 +66,12 @@ public class NewGameScene extends UIScene {
avatarImage = ui.findActor("avatarPreview"); avatarImage = ui.findActor("avatarPreview");
gender = ui.findActor("gender"); gender = ui.findActor("gender");
gender.setTextList(new String[]{"Male", "Female"}); gender.setTextList(new String[]{"Male", "Female"});
gender.addListener(event -> updateAvatar()); gender.addListener(new EventListener() {
@Override
public boolean handle(Event event) {
return NewGameScene.this.updateAvatar();
}
});
Random rand=new Random(); Random rand=new Random();
deck = ui.findActor("deck"); deck = ui.findActor("deck");
@@ -77,7 +84,12 @@ public class NewGameScene extends UIScene {
deck.setTextList(stringList); deck.setTextList(stringList);
race = ui.findActor("race"); race = ui.findActor("race");
race.addListener(event -> updateAvatar()); race.addListener(new EventListener() {
@Override
public boolean handle(Event event) {
return NewGameScene.this.updateAvatar();
}
});
race.setTextList(HeroListData.getRaces()); race.setTextList(HeroListData.getRaces());
difficulty = ui.findActor("difficulty"); difficulty = ui.findActor("difficulty");
@@ -97,10 +109,30 @@ public class NewGameScene extends UIScene {
gender.setCurrentIndex(rand.nextInt()); gender.setCurrentIndex(rand.nextInt());
deck.setCurrentIndex(rand.nextInt()); deck.setCurrentIndex(rand.nextInt());
race.setCurrentIndex(rand.nextInt()); race.setCurrentIndex(rand.nextInt());
ui.onButtonPress("back", this::back); ui.onButtonPress("back", new Runnable() {
ui.onButtonPress("start", this::start); @Override
ui.onButtonPress("leftAvatar", this::leftAvatar); public void run() {
ui.onButtonPress("rightAvatar", this::rightAvatar); NewGameScene.this.back();
}
});
ui.onButtonPress("start", new Runnable() {
@Override
public void run() {
NewGameScene.this.start();
}
});
ui.onButtonPress("leftAvatar", new Runnable() {
@Override
public void run() {
NewGameScene.this.leftAvatar();
}
});
ui.onButtonPress("rightAvatar", new Runnable() {
@Override
public void run() {
NewGameScene.this.rightAvatar();
}
});
updateAvatar(); updateAvatar();
} }

View File

@@ -7,7 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.data.EnemyData; import forge.adventure.data.EnemyData;
import forge.adventure.data.WorldData; import forge.adventure.data.WorldData;
@@ -46,7 +46,7 @@ public class PlayerStatisticScene extends UIScene {
return true; return true;
} }
public boolean back() { public boolean back() {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
return true; return true;
} }
@Override @Override
@@ -101,7 +101,12 @@ public class PlayerStatisticScene extends UIScene {
enemiesGroup = new Table(Controls.GetSkin()); enemiesGroup = new Table(Controls.GetSkin());
enemiesGroup.row(); enemiesGroup.row();
ui.onButtonPress("return", () -> back()); ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
PlayerStatisticScene.this.back();
}
});
avatar=ui.findActor("avatar"); avatar=ui.findActor("avatar");
totalWins=ui.findActor("totalWins"); totalWins=ui.findActor("totalWins");

View File

@@ -7,16 +7,16 @@ import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.character.ShopActor; import forge.adventure.character.ShopActor;
import forge.assets.ImageCache; import forge.adventure.player.AdventurePlayer;
import forge.adventure.pointofintrest.PointOfInterestChanges;
import forge.adventure.util.CardUtil; import forge.adventure.util.CardUtil;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.util.Reward; import forge.adventure.util.Reward;
import forge.adventure.util.RewardActor; import forge.adventure.util.RewardActor;
import forge.adventure.player.AdventurePlayer;
import forge.adventure.pointofintrest.PointOfInterestChanges;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.assets.ImageCache;
/** /**
* Displays the rewards of a fight or a treasure * Displays the rewards of a fight or a treasure
@@ -73,12 +73,12 @@ public class RewardScene extends UIScene {
} }
else else
{ {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
} }
} }
else else
{ {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
} }
return true; return true;
} }
@@ -93,14 +93,19 @@ public class RewardScene extends UIScene {
flipCountDown-=Gdx.graphics.getDeltaTime(); flipCountDown-=Gdx.graphics.getDeltaTime();
if(flipCountDown<=0) if(flipCountDown<=0)
{ {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
} }
} }
} }
@Override @Override
public void resLoaded() { public void resLoaded() {
super.resLoaded(); super.resLoaded();
ui.onButtonPress("done",()->done()); ui.onButtonPress("done", new Runnable() {
@Override
public void run() {
RewardScene.this.done();
}
});
doneButton=ui.findActor("done"); doneButton=ui.findActor("done");
} }

View File

@@ -4,13 +4,19 @@ import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
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.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.GdxRuntimeException; import com.badlogic.gdx.utils.GdxRuntimeException;
import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.IntMap;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.util.Controls; import forge.adventure.util.Controls;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import forge.adventure.world.WorldSaveHeader; import forge.adventure.world.WorldSaveHeader;
@@ -69,7 +75,7 @@ public class SaveLoadScene extends UIScene {
} }
public void back() { public void back() {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
} }
public boolean select(int slot) { public boolean select(int slot) {
@@ -100,7 +106,7 @@ public class SaveLoadScene extends UIScene {
stage.setKeyboardFocus(textInput); stage.setKeyboardFocus(textInput);
} else { } else {
if(WorldSave.load(currentSlot)) if(WorldSave.load(currentSlot))
AdventureApplicationAdapter.instance.switchScene(SceneType.GameScene.instance); Forge.switchScene(SceneType.GameScene.instance);
} }
} }
@@ -124,7 +130,7 @@ public class SaveLoadScene extends UIScene {
if( WorldSave.getCurrentSave().save(textInput.getText(), currentSlot)) if( WorldSave.getCurrentSave().save(textInput.getText(), currentSlot))
{ {
updateFiles(); updateFiles();
AdventureApplicationAdapter.instance.switchScene(SceneType.GameScene.instance); Forge.switchScene(SceneType.GameScene.instance);
} }
@@ -196,8 +202,18 @@ public class SaveLoadScene extends UIScene {
dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left); dialog.getButtonTable().add(Controls.newLabel("Name:")).align(Align.left);
dialog.getButtonTable().add(textInput).fillX().expandX(); dialog.getButtonTable().add(textInput).fillX().expandX();
dialog.getButtonTable().row(); dialog.getButtonTable().row();
dialog.getButtonTable().add(Controls.newTextButton("Save", () -> save())).align(Align.left); dialog.getButtonTable().add(Controls.newTextButton("Save", new Runnable() {
dialog.getButtonTable().add(Controls.newTextButton("Abort", () -> saveAbort())).align(Align.left); @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);
previewImage = ui.findActor("preview"); previewImage = ui.findActor("preview");
header = Controls.newLabel("Save"); header = Controls.newLabel("Save");
@@ -210,8 +226,18 @@ public class SaveLoadScene extends UIScene {
addSaveSlot("Slot:" + i, i); addSaveSlot("Slot:" + i, i);
saveLoadButton = ui.findActor("save"); saveLoadButton = ui.findActor("save");
ui.onButtonPress("save",()-> loadSave()); ui.onButtonPress("save", new Runnable() {
ui.onButtonPress("return",()-> back()); @Override
public void run() {
SaveLoadScene.this.loadSave();
}
});
ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
SaveLoadScene.this.back();
}
});
defColor = saveLoadButton.getColor(); defColor = saveLoadButton.getColor();

View File

@@ -0,0 +1,26 @@
package forge.adventure.scene;
/**
* Enum of all scenes
*/
public enum SceneType {
StartScene(new StartScene()),
NewGameScene(new NewGameScene()),
SettingsScene(new SettingsScene()),
GameScene(new GameScene()),
DuelScene(new DuelScene()),
SaveLoadScene(new SaveLoadScene()),
DeckEditScene(new DeckEditScene()),
TileMapScene(new TileMapScene()),
RewardScene(new RewardScene()),
InnScene(new InnScene()),
DeckSelectScene(new DeckSelectScene()),
ShopScene(new ShopScene()),
PlayerStatisticScene(new PlayerStatisticScene());
public final Scene instance;
SceneType(Scene scene) {
this.instance = scene;
}
}

View File

@@ -6,12 +6,19 @@ import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
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.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.Controls; import forge.adventure.util.Controls;
import forge.gui.GuiBase;
import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences;
import forge.util.Localizer; import forge.util.Localizer;
@@ -64,7 +71,7 @@ public class SettingsScene extends UIScene {
return true; return true;
} }
public boolean back() { public boolean back() {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
return true; return true;
} }
private void addInputField(String name, ForgePreferences.FPref pref) { private void addInputField(String name, ForgePreferences.FPref pref) {
@@ -165,8 +172,7 @@ public class SettingsScene extends UIScene {
addLabel("Plane"); addLabel("Plane");
settingGroup.add(plane).align(Align.right); settingGroup.add(plane).align(Align.right);
if (!GuiBase.isAndroid()) {
addSettingField("Fullscreen", Config.instance().getSettingData().fullScreen, new ChangeListener() { addSettingField("Fullscreen", Config.instance().getSettingData().fullScreen, new ChangeListener() {
@Override @Override
public void changed(ChangeEvent event, Actor actor) { public void changed(ChangeEvent event, Actor actor) {
@@ -190,6 +196,7 @@ public class SettingsScene extends UIScene {
Config.instance().saveSettings(); Config.instance().saveSettings();
} }
}); });
}
addCheckBox(localizer.getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME); addCheckBox(localizer.getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME);
addSettingSlider(localizer.getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC,0,100); addSettingSlider(localizer.getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC,0,100);
addSettingSlider(localizer.getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0,100); addSettingSlider(localizer.getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0,100);
@@ -203,15 +210,22 @@ public class SettingsScene extends UIScene {
addCheckBox(localizer.getMessage("lblBattlefieldTextureFiltering"), ForgePreferences.FPref.UI_LIBGDX_TEXTURE_FILTERING); addCheckBox(localizer.getMessage("lblBattlefieldTextureFiltering"), ForgePreferences.FPref.UI_LIBGDX_TEXTURE_FILTERING);
addCheckBox(localizer.getMessage("lblAltZoneTabs"), ForgePreferences.FPref.UI_ALT_PLAYERZONETABS); addCheckBox(localizer.getMessage("lblAltZoneTabs"), ForgePreferences.FPref.UI_ALT_PLAYERZONETABS);
addCheckBox(localizer.getMessage("lblAnimatedCardTapUntap"), ForgePreferences.FPref.UI_ANIMATED_CARD_TAPUNTAP); addCheckBox(localizer.getMessage("lblAnimatedCardTapUntap"), ForgePreferences.FPref.UI_ANIMATED_CARD_TAPUNTAP);
if (!GuiBase.isAndroid()) {
addCheckBox(localizer.getMessage("lblBorderMaskOption"), ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING); addCheckBox(localizer.getMessage("lblBorderMaskOption"), ForgePreferences.FPref.UI_ENABLE_BORDER_MASKING);
addCheckBox(localizer.getMessage("lblPreloadExtendedArtCards"), ForgePreferences.FPref.UI_ENABLE_PRELOAD_EXTENDED_ART); addCheckBox(localizer.getMessage("lblPreloadExtendedArtCards"), ForgePreferences.FPref.UI_ENABLE_PRELOAD_EXTENDED_ART);
addCheckBox(localizer.getMessage("lblAutoCacheSize"), ForgePreferences.FPref.UI_AUTO_CACHE_SIZE); addCheckBox(localizer.getMessage("lblAutoCacheSize"), ForgePreferences.FPref.UI_AUTO_CACHE_SIZE);
addCheckBox(localizer.getMessage("lblDisposeTextures"), ForgePreferences.FPref.UI_ENABLE_DISPOSE_TEXTURES); addCheckBox(localizer.getMessage("lblDisposeTextures"), ForgePreferences.FPref.UI_ENABLE_DISPOSE_TEXTURES);
addInputField(localizer.getMessage("lblDisposeTextures"), ForgePreferences.FPref.UI_LANGUAGE); //addInputField(localizer.getMessage("lblDisposeTextures"), ForgePreferences.FPref.UI_LANGUAGE);
}
settingGroup.row(); settingGroup.row();
ui.onButtonPress("return", () -> back()); ui.onButtonPress("return", new Runnable() {
@Override
public void run() {
SettingsScene.this.back();
}
});
ScrollPane scrollPane = ui.findActor("settings"); ScrollPane scrollPane = ui.findActor("settings");
scrollPane.setActor(settingGroup); scrollPane.setActor(settingGroup);

View File

@@ -3,7 +3,7 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
/** /**
@@ -20,29 +20,29 @@ public class StartScene extends UIScene {
} }
public boolean NewGame() { public boolean NewGame() {
AdventureApplicationAdapter.instance.switchScene(SceneType.NewGameScene.instance); Forge.switchScene(SceneType.NewGameScene.instance);
return true; return true;
} }
public boolean Save() { public boolean Save() {
((SaveLoadScene) SceneType.SaveLoadScene.instance).setSaveGame(true); ((SaveLoadScene) SceneType.SaveLoadScene.instance).setSaveGame(true);
AdventureApplicationAdapter.instance.switchScene(SceneType.SaveLoadScene.instance); Forge.switchScene(SceneType.SaveLoadScene.instance);
return true; return true;
} }
public boolean Load() { public boolean Load() {
((SaveLoadScene) SceneType.SaveLoadScene.instance).setSaveGame(false); ((SaveLoadScene) SceneType.SaveLoadScene.instance).setSaveGame(false);
AdventureApplicationAdapter.instance.switchScene(SceneType.SaveLoadScene.instance); Forge.switchScene(SceneType.SaveLoadScene.instance);
return true; return true;
} }
public boolean Resume() { public boolean Resume() {
AdventureApplicationAdapter.instance.switchToLast(); Forge.switchToLast();
return true; return true;
} }
public boolean settings() { public boolean settings() {
AdventureApplicationAdapter.instance.switchScene(forge.adventure.scene.SceneType.SettingsScene.instance); Forge.switchScene(SceneType.SettingsScene.instance);
return true; return true;
} }
@@ -83,16 +83,51 @@ public class StartScene extends UIScene {
public void resLoaded() { public void resLoaded() {
super.resLoaded(); super.resLoaded();
ui.onButtonPress("Start", () -> NewGame()); ui.onButtonPress("Start", new Runnable() {
ui.onButtonPress("Load", () -> Load()); @Override
ui.onButtonPress("Start", () -> NewGame()); public void run() {
ui.onButtonPress("Save", () -> Save()); StartScene.this.NewGame();
ui.onButtonPress("Resume", () -> Resume()); }
});
ui.onButtonPress("Load", new Runnable() {
@Override
public void run() {
StartScene.this.Load();
}
});
ui.onButtonPress("Start", new Runnable() {
@Override
public void run() {
StartScene.this.NewGame();
}
});
ui.onButtonPress("Save", new Runnable() {
@Override
public void run() {
StartScene.this.Save();
}
});
ui.onButtonPress("Resume", new Runnable() {
@Override
public void run() {
StartScene.this.Resume();
}
});
saveButton = ui.findActor("Save"); saveButton = ui.findActor("Save");
resumeButton = ui.findActor("Resume"); resumeButton = ui.findActor("Resume");
ui.onButtonPress("Settings", () -> settings()); ui.onButtonPress("Settings", new Runnable() {
ui.onButtonPress("Exit", () -> Exit()); @Override
public void run() {
StartScene.this.settings();
}
});
ui.onButtonPress("Exit", new Runnable() {
@Override
public void run() {
StartScene.this.Exit();
}
});
saveButton.setVisible(false); saveButton.setVisible(false);
resumeButton.setVisible(false); resumeButton.setVisible(false);
} }

View File

@@ -3,11 +3,11 @@ package forge.adventure.scene;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMap;
import forge.adventure.pointofintrest.PointOfInterest;
import forge.adventure.stage.MapStage; import forge.adventure.stage.MapStage;
import forge.adventure.stage.PointOfInterestMapRenderer; import forge.adventure.stage.PointOfInterestMapRenderer;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.TemplateTmxMapLoader; import forge.adventure.util.TemplateTmxMapLoader;
import forge.adventure.pointofintrest.PointOfInterest;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
/** /**

View File

@@ -8,7 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.FitViewport;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.player.AdventurePlayer; import forge.adventure.player.AdventurePlayer;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
@@ -43,19 +43,49 @@ public class GameHUD extends Stage {
avatar = ui.findActor("avatar"); avatar = ui.findActor("avatar");
ui.onButtonPress("menu", () -> menu()); ui.onButtonPress("menu", new Runnable() {
ui.onButtonPress("statistic",()-> AdventureApplicationAdapter.instance.switchScene(SceneType.PlayerStatisticScene.instance)); @Override
ui.onButtonPress("deck", () -> openDeck()); public void run() {
GameHUD.this.menu();
}
});
ui.onButtonPress("statistic", new Runnable() {
@Override
public void run() {
Forge.switchScene(SceneType.PlayerStatisticScene.instance);
}
});
ui.onButtonPress("deck", new Runnable() {
@Override
public void run() {
GameHUD.this.openDeck();
}
});
lifePoints = ui.findActor("lifePoints"); lifePoints = ui.findActor("lifePoints");
lifePoints.setText("20/20"); lifePoints.setText("20/20");
AdventurePlayer.current().onLifeChange(()-> lifePoints.setText(AdventurePlayer.current().getLife() +"/"+ AdventurePlayer.current().getMaxLife())); AdventurePlayer.current().onLifeChange(new Runnable() {
@Override
public void run() {
lifePoints.setText(AdventurePlayer.current().getLife() + "/" + AdventurePlayer.current().getMaxLife());
}
});
money = ui.findActor("money"); money = ui.findActor("money");
WorldSave.getCurrentSave().getPlayer().onGoldChange(()-> money.setText(String.valueOf(AdventurePlayer.current().getGold()))) ; WorldSave.getCurrentSave().getPlayer().onGoldChange(new Runnable() {
@Override
public void run() {
money.setText(String.valueOf(AdventurePlayer.current().getGold()));
}
}) ;
miniMap = ui.findActor("map"); miniMap = ui.findActor("map");
addActor(ui); addActor(ui);
addActor(miniMapPlayer); addActor(miniMapPlayer);
WorldSave.getCurrentSave().onLoad(() -> enter()); WorldSave.getCurrentSave().onLoad(new Runnable() {
@Override
public void run() {
GameHUD.this.enter();
}
});
} }
private void statistic() { private void statistic() {
@@ -109,7 +139,7 @@ public class GameHUD extends Stage {
private Object openDeck() { private Object openDeck() {
AdventureApplicationAdapter.instance.switchScene(SceneType.DeckSelectScene.instance); Forge.switchScene(SceneType.DeckSelectScene.instance);
return null; return null;
} }

View File

@@ -8,7 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.viewport.StretchViewport; import com.badlogic.gdx.utils.viewport.StretchViewport;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.character.MapActor; import forge.adventure.character.MapActor;
import forge.adventure.character.PlayerSprite; import forge.adventure.character.PlayerSprite;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;
@@ -46,12 +46,15 @@ public abstract class GameStage extends Stage {
public GameStage() { public GameStage() {
super(new StretchViewport(Scene.GetIntendedWidth(), Scene.GetIntendedHeight(), new OrthographicCamera())); super(new StretchViewport(Scene.GetIntendedWidth(), Scene.GetIntendedHeight(), new OrthographicCamera()));
WorldSave.getCurrentSave().onLoad(() -> { WorldSave.getCurrentSave().onLoad(new Runnable() {
@Override
public void run() {
if (player == null) if (player == null)
return; return;
foregroundSprites.removeActor(player); foregroundSprites.removeActor(player);
player = null; player = null;
GetPlayer(); GameStage.this.GetPlayer();
}
}); });
camera = (OrthographicCamera) getCamera(); camera = (OrthographicCamera) getCamera();
@@ -283,7 +286,7 @@ public abstract class GameStage extends Stage {
public void openMenu() { public void openMenu() {
WorldSave.getCurrentSave().header.createPreview(); WorldSave.getCurrentSave().header.createPreview();
AdventureApplicationAdapter.instance.switchScene(SceneType.StartScene.instance); Forge.switchScene(SceneType.StartScene.instance);
} }
public void enter() { public void enter() {

View File

@@ -11,18 +11,24 @@ import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.character.*; import forge.adventure.character.CharacterSprite;
import forge.adventure.character.EnemySprite;
import forge.adventure.character.EntryActor;
import forge.adventure.character.MapActor;
import forge.adventure.character.OnCollide;
import forge.adventure.character.ShopActor;
import forge.adventure.character.TextureSprite;
import forge.adventure.data.RewardData; import forge.adventure.data.RewardData;
import forge.adventure.data.ShopData; import forge.adventure.data.ShopData;
import forge.adventure.data.WorldData; import forge.adventure.data.WorldData;
import forge.adventure.pointofintrest.PointOfInterestChanges;
import forge.adventure.scene.DuelScene; import forge.adventure.scene.DuelScene;
import forge.adventure.scene.RewardScene; import forge.adventure.scene.RewardScene;
import forge.adventure.scene.SceneType; import forge.adventure.scene.SceneType;
import forge.adventure.util.Config; import forge.adventure.util.Config;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.util.Reward; import forge.adventure.util.Reward;
import forge.adventure.pointofintrest.PointOfInterestChanges;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import java.util.ArrayList; import java.util.ArrayList;
@@ -235,10 +241,20 @@ public class MapStage extends GameStage {
addMapActor(obj, mob); addMapActor(obj, mob);
break; break;
case "inn": case "inn":
addMapActor(obj, new OnCollide(() -> AdventureApplicationAdapter.instance.switchScene(SceneType.InnScene.instance))); addMapActor(obj, new OnCollide(new Runnable() {
@Override
public void run() {
Forge.switchScene(SceneType.InnScene.instance);
}
}));
break; break;
case "exit": case "exit":
addMapActor(obj, new OnCollide(() -> exit())); addMapActor(obj, new OnCollide(new Runnable() {
@Override
public void run() {
MapStage.this.exit();
}
}));
break; break;
case "shop": case "shop":
String shopList=prop.get("shopList").toString(); String shopList=prop.get("shopList").toString();
@@ -290,7 +306,7 @@ public class MapStage extends GameStage {
public boolean exit() { public boolean exit() {
isInMap=false; isInMap=false;
AdventureApplicationAdapter.instance.switchScene(SceneType.GameScene.instance); Forge.switchScene(SceneType.GameScene.instance);
return true; return true;
} }
@@ -302,19 +318,26 @@ public class MapStage extends GameStage {
if (playerWins) { if (playerWins) {
player.setAnimation(CharacterSprite.AnimationTypes.Attack); player.setAnimation(CharacterSprite.AnimationTypes.Attack);
currentMob.setAnimation(CharacterSprite.AnimationTypes.Death); currentMob.setAnimation(CharacterSprite.AnimationTypes.Death);
startPause(1,()->getReward()); startPause(1, new Runnable() {
@Override
public void run() {
MapStage.this.getReward();
}
});
} else { } else {
player.setAnimation(CharacterSprite.AnimationTypes.Hit); player.setAnimation(CharacterSprite.AnimationTypes.Hit);
currentMob.setAnimation(CharacterSprite.AnimationTypes.Attack); currentMob.setAnimation(CharacterSprite.AnimationTypes.Attack);
startPause(1,()-> startPause(1, new Runnable() {
{ @Override
public void run() {
player.setAnimation(CharacterSprite.AnimationTypes.Idle); player.setAnimation(CharacterSprite.AnimationTypes.Idle);
currentMob.setAnimation(CharacterSprite.AnimationTypes.Idle); currentMob.setAnimation(CharacterSprite.AnimationTypes.Idle);
player.setPosition(oldPosition4); player.setPosition(oldPosition4);
Current.player().defeated(); Current.player().defeated();
stop(); MapStage.this.stop();
currentMob = null; currentMob = null;
}
}); });
} }
@@ -328,7 +351,7 @@ public class MapStage extends GameStage {
actors.removeValue(currentMob,true); actors.removeValue(currentMob,true);
changes.deleteObject(currentMob.getId()); changes.deleteObject(currentMob.getId());
currentMob = null; currentMob = null;
AdventureApplicationAdapter.instance.switchScene(SceneType.RewardScene.instance); Forge.switchScene(SceneType.RewardScene.instance);
} }
@Override @Override
protected void onActing(float delta) { protected void onActing(float delta) {
@@ -346,18 +369,25 @@ public class MapStage extends GameStage {
if(mob.getData().deck==null||mob.getData().deck.isEmpty()) if(mob.getData().deck==null||mob.getData().deck.isEmpty())
{ {
currentMob.setAnimation(CharacterSprite.AnimationTypes.Death); currentMob.setAnimation(CharacterSprite.AnimationTypes.Death);
startPause(1,()->getReward()); startPause(1, new Runnable() {
@Override
public void run() {
MapStage.this.getReward();
}
});
} }
else else
{ {
player.setAnimation(CharacterSprite.AnimationTypes.Attack); player.setAnimation(CharacterSprite.AnimationTypes.Attack);
mob.setAnimation(CharacterSprite.AnimationTypes.Attack); mob.setAnimation(CharacterSprite.AnimationTypes.Attack);
startPause(1,()-> startPause(1, new Runnable() {
{ @Override
public void run() {
((DuelScene) SceneType.DuelScene.instance).setEnemy(mob); ((DuelScene) SceneType.DuelScene.instance).setEnemy(mob);
((DuelScene) SceneType.DuelScene.instance).setPlayer(player); ((DuelScene) SceneType.DuelScene.instance).setPlayer(player);
AdventureApplicationAdapter.instance.switchScene(SceneType.DuelScene.instance); Forge.switchScene(SceneType.DuelScene.instance);
}
}); });
} }

View File

@@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.SnapshotArray;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.function.ToIntFunction;
/** /**
* Sprite group to order actors based on the Y position on the map, the render sprites further up first. * Sprite group to order actors based on the Y position on the map, the render sprites further up first.
@@ -25,7 +26,12 @@ public class SpriteGroup extends Group {
protected void drawChildren(Batch batch, float parentAlpha) { protected void drawChildren(Batch batch, float parentAlpha) {
Actor[] actors = getChildren().toArray(); Actor[] actors = getChildren().toArray();
Arrays.sort(actors, Comparator.comparingInt(o -> (int) -o.getY())); Arrays.sort(actors, Comparator.comparingInt(new ToIntFunction<Actor>() {
@Override
public int applyAsInt(Actor o) {
return (int) -o.getY();
}
}));
for(int i=0;i<actors.length;i++) for(int i=0;i<actors.length;i++)
{ {

View File

@@ -3,10 +3,10 @@ package forge.adventure.stage;
import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import forge.adventure.world.WorldSave; import forge.adventure.world.WorldSave;
import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@@ -37,36 +37,36 @@ public class WorldBackground extends Actor {
if (chunks == null) { if (chunks == null) {
initialize(); initialize();
} }
Point pos = translateFromWorldToChunk(playerX, playerY); Vector2 pos = translateFromWorldToChunk(playerX, playerY);
if (currentChunkX != pos.x || currentChunkY != pos.y) { if (currentChunkX != pos.x || currentChunkY != pos.y) {
int xDiff = currentChunkX - pos.x; int xDiff = currentChunkX - (int)pos.x;
int yDiff = currentChunkY - pos.y; int yDiff = currentChunkY - (int)pos.y;
ArrayList<Point> points = new ArrayList<Point>(); ArrayList<Vector2> points = new ArrayList<>();
for (int x = -1; x < 2; x++) { for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) { for (int y = -1; y < 2; y++) {
points.add(new Point(pos.x + x, pos.y + y)); points.add(new Vector2(pos.x + x, pos.y + y));
} }
} }
for (int x = -1; x < 2; x++) { for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) { for (int y = -1; y < 2; y++) {
Point point = new Point(currentChunkX + x, currentChunkY + y); Vector2 point = new Vector2(currentChunkX + x, currentChunkY + y);
if (points.contains(point))// old Point is part of new points if (points.contains(point))// old Point is part of new points
{ {
points.remove(point); points.remove(point);
} else { } else {
if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length) if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length)
continue; continue;
unLoadChunk(point.x, point.y); unLoadChunk((int)point.x, (int)point.y);
} }
} }
} }
for (Point point : points) { for (Vector2 point : points) {
if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length) if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length)
continue; continue;
loadChunk(point.x, point.y); loadChunk((int)point.x, (int)point.y);
} }
currentChunkX = pos.x; currentChunkX = (int)pos.x;
currentChunkY = pos.y; currentChunkY = (int)pos.y;
} }
batch.disableBlending(); batch.disableBlending();
for (int x = -1; x < 2; x++) { for (int x = -1; x < 2; x++) {
@@ -75,7 +75,7 @@ public class WorldBackground extends Actor {
continue; continue;
batch.draw(getChunkTexture(pos.x + x, pos.y + y), transChunkToWorld(pos.x + x), transChunkToWorld(pos.y + y)); batch.draw(getChunkTexture((int)pos.x + x, (int)pos.y + y), transChunkToWorld((int)pos.x + x), transChunkToWorld((int)pos.y + y));
} }
} }
batch.enableBlending(); batch.enableBlending();
@@ -154,10 +154,10 @@ public class WorldBackground extends Actor {
for (int x = -1; x < 2; x++) { for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) { for (int y = -1; y < 2; y++) {
Point point = new Point(currentChunkX + x, currentChunkY + y); Vector2 point = new Vector2(currentChunkX + x, currentChunkY + y);
if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length) if (point.y < 0 || point.x < 0 || point.y >= chunks[0].length || point.x >= chunks.length)
continue; continue;
loadChunk(point.x, point.y); loadChunk((int)point.x, (int)point.y);
} }
} }
} }
@@ -171,10 +171,10 @@ public class WorldBackground extends Actor {
return xy * tileSize * chunkSize; return xy * tileSize * chunkSize;
} }
Point translateFromWorldToChunk(float x, float y) { Vector2 translateFromWorldToChunk(float x, float y) {
float worldWidthTiles = x / tileSize; float worldWidthTiles = x / tileSize;
float worldHeightTiles = y / tileSize; float worldHeightTiles = y / tileSize;
return new Point((int) worldWidthTiles / chunkSize, (int) worldHeightTiles / chunkSize); return new Vector2((int) worldWidthTiles / chunkSize, (int) worldHeightTiles / chunkSize);
} }
public void setPlayerPos(float x, float y) { public void setPlayerPos(float x, float y) {

View File

@@ -3,13 +3,17 @@ package forge.adventure.stage;
import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import forge.adventure.AdventureApplicationAdapter; import forge.Forge;
import forge.adventure.character.CharacterSprite; import forge.adventure.character.CharacterSprite;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.data.BiomeData; import forge.adventure.data.BiomeData;
import forge.adventure.data.EnemyData; import forge.adventure.data.EnemyData;
import forge.adventure.data.WorldData; import forge.adventure.data.WorldData;
import forge.adventure.scene.*; import forge.adventure.scene.DuelScene;
import forge.adventure.scene.RewardScene;
import forge.adventure.scene.Scene;
import forge.adventure.scene.SceneType;
import forge.adventure.scene.TileMapScene;
import forge.adventure.util.Current; import forge.adventure.util.Current;
import forge.adventure.util.SaveFileContent; import forge.adventure.util.SaveFileContent;
import forge.adventure.util.SaveFileData; import forge.adventure.util.SaveFileData;
@@ -71,11 +75,14 @@ public class WorldStage extends GameStage implements SaveFileContent {
if (player.collideWith(mob)) { if (player.collideWith(mob)) {
player.setAnimation(CharacterSprite.AnimationTypes.Attack); player.setAnimation(CharacterSprite.AnimationTypes.Attack);
mob.setAnimation(CharacterSprite.AnimationTypes.Attack); mob.setAnimation(CharacterSprite.AnimationTypes.Attack);
startPause(1,()->{ startPause(1, new Runnable() {
@Override
public void run() {
((DuelScene) SceneType.DuelScene.instance).setEnemy(currentMob); ((DuelScene) SceneType.DuelScene.instance).setEnemy(currentMob);
((DuelScene) SceneType.DuelScene.instance).setPlayer(player); ((DuelScene) SceneType.DuelScene.instance).setPlayer(player);
AdventureApplicationAdapter.instance.switchScene(SceneType.DuelScene.instance); Forge.switchScene(SceneType.DuelScene.instance);
}
}); });
currentMob = mob; currentMob = mob;
WorldSave.getCurrentSave().autoSave(); WorldSave.getCurrentSave().autoSave();
@@ -108,21 +115,25 @@ public class WorldStage extends GameStage implements SaveFileContent {
if (playerIsWinner) { if (playerIsWinner) {
player.setAnimation(CharacterSprite.AnimationTypes.Attack); player.setAnimation(CharacterSprite.AnimationTypes.Attack);
currentMob.setAnimation(CharacterSprite.AnimationTypes.Death); currentMob.setAnimation(CharacterSprite.AnimationTypes.Death);
startPause(1,()-> startPause(1, new Runnable() {
{ @Override
public void run() {
((RewardScene) SceneType.RewardScene.instance).loadRewards(currentMob.getRewards(), RewardScene.Type.Loot, null); ((RewardScene) SceneType.RewardScene.instance).loadRewards(currentMob.getRewards(), RewardScene.Type.Loot, null);
removeEnemy(currentMob); WorldStage.this.removeEnemy(currentMob);
currentMob = null; currentMob = null;
AdventureApplicationAdapter.instance.switchScene(SceneType.RewardScene.instance); Forge.switchScene(SceneType.RewardScene.instance);
}
}); });
} else { } else {
player.setAnimation(CharacterSprite.AnimationTypes.Hit); player.setAnimation(CharacterSprite.AnimationTypes.Hit);
currentMob.setAnimation(CharacterSprite.AnimationTypes.Attack); currentMob.setAnimation(CharacterSprite.AnimationTypes.Attack);
startPause(1,()-> startPause(1, new Runnable() {
{ @Override
public void run() {
Current.player().defeated(); Current.player().defeated();
removeEnemy(currentMob); WorldStage.this.removeEnemy(currentMob);
currentMob = null; currentMob = null;
}
}); });
} }
@@ -138,7 +149,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
continue; continue;
} }
((TileMapScene) SceneType.TileMapScene.instance).load(point.getPointOfInterest()); ((TileMapScene) SceneType.TileMapScene.instance).load(point.getPointOfInterest());
AdventureApplicationAdapter.instance.switchScene(SceneType.TileMapScene.instance); Forge.switchScene(SceneType.TileMapScene.instance);
} else { } else {
if (point == collidingPoint) { if (point == collidingPoint) {
collidingPoint = null; collidingPoint = null;

View File

@@ -25,7 +25,7 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static forge.adventure.data.RewardData.*; import static forge.adventure.data.RewardData.generateAllCards;
/** /**
* Utility class to deck generation and card filtering * Utility class to deck generation and card filtering

View File

@@ -7,6 +7,7 @@ import com.badlogic.gdx.utils.JsonWriter;
import forge.adventure.data.ConfigData; import forge.adventure.data.ConfigData;
import forge.adventure.data.SettingData; import forge.adventure.data.SettingData;
import forge.deck.Deck; import forge.deck.Deck;
import forge.gui.GuiBase;
import forge.localinstance.properties.ForgeConstants; import forge.localinstance.properties.ForgeConstants;
import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences;
import forge.localinstance.properties.ForgeProfileProperties; import forge.localinstance.properties.ForgeProfileProperties;
@@ -39,8 +40,8 @@ public class Config {
} }
private Config() { private Config() {
String path= Files.exists(Paths.get("./res"))?"./":"../forge-gui/"; String path= GuiBase.isAndroid() ? ForgeConstants.ASSETS_DIR : Files.exists(Paths.get("./res"))?"./":"../forge-gui/";
adventures = new File(path + "/res/adventure").list(); adventures = new File(GuiBase.isAndroid() ? ForgeConstants.ADVENTURE_DIR : path + "/res/adventure").list();
try try
{ {
settingsData = new Json().fromJson(SettingData.class, new FileHandle(ForgeConstants.USER_DIR + "/adventure/settings.json")); settingsData = new Json().fromJson(SettingData.class, new FileHandle(ForgeConstants.USER_DIR + "/adventure/settings.json"));

View File

@@ -5,7 +5,14 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
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.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;

View File

@@ -5,7 +5,11 @@ import com.badlogic.gdx.graphics.PixmapIO;
import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import java.io.*; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap; import java.util.HashMap;
public class SaveFileData extends HashMap<String,byte[]> public class SaveFileData extends HashMap<String,byte[]>

View File

@@ -16,7 +16,7 @@ import java.io.ObjectOutputStream;
public abstract class Serializer { public abstract class Serializer {
static public void WritePixmap(java.io.ObjectOutputStream out, Pixmap pixmap) throws IOException { static public void WritePixmap(ObjectOutputStream out, Pixmap pixmap) throws IOException {
if (pixmap != null) { if (pixmap != null) {
PixmapIO.PNG png = new PixmapIO.PNG(); PixmapIO.PNG png = new PixmapIO.PNG();

View File

@@ -18,7 +18,7 @@ public class TemplateTmxMapLoader extends TmxMapLoader {
FileHandle tmxFile; FileHandle tmxFile;
@Override @Override
protected TiledMap loadTiledMap(FileHandle tmxFile, TmxMapLoader.Parameters parameter, ImageResolver imageResolver) { protected TiledMap loadTiledMap(FileHandle tmxFile, Parameters parameter, ImageResolver imageResolver) {
this.tmxFile = tmxFile; this.tmxFile = tmxFile;
return super.loadTiledMap(tmxFile, parameter, imageResolver); return super.loadTiledMap(tmxFile, parameter, imageResolver);
} }

View File

@@ -5,7 +5,13 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.*; 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.ui.Window;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;

View File

@@ -8,7 +8,11 @@ import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.Json; import com.badlogic.gdx.utils.Json;
import forge.adventure.data.*; import forge.adventure.data.BiomeData;
import forge.adventure.data.BiomeSpriteData;
import forge.adventure.data.BiomeTerrainData;
import forge.adventure.data.PointOfInterestData;
import forge.adventure.data.WorldData;
import forge.adventure.pointofintrest.PointOfInterest; import forge.adventure.pointofintrest.PointOfInterest;
import forge.adventure.pointofintrest.PointOfInterestMap; import forge.adventure.pointofintrest.PointOfInterestMap;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;

View File

@@ -9,9 +9,13 @@ import forge.adventure.util.SaveFileData;
import forge.adventure.util.SignalList; import forge.adventure.util.SignalList;
import forge.deck.Deck; import forge.deck.Deck;
import forge.localinstance.properties.ForgeProfileProperties; import forge.localinstance.properties.ForgeProfileProperties;
import org.jetbrains.annotations.NotNull;
import java.io.*; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.zip.DeflaterOutputStream; import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream; import java.util.zip.InflaterInputStream;
@@ -79,7 +83,7 @@ public class WorldSave {
} }
return true; return true;
} }
public static boolean isSafeFile(@NotNull String name) { public static boolean isSafeFile(String name) {
return filenameToSlot(name)!= INVALID_SAVE_SLOT; return filenameToSlot(name)!= INVALID_SAVE_SLOT;
} }
static public int filenameToSlot(String name) { static public int filenameToSlot(String name) {

View File

@@ -1,26 +1,35 @@
package forge.screens; package forge.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.animation.ForgeAnimation;
import forge.assets.FSkin;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.FSkinTexture; import forge.assets.FSkinTexture;
import forge.toolbox.FButton;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FProgressBar; import forge.toolbox.FProgressBar;
import forge.util.Localizer;
public class SplashScreen extends FContainer { public class SplashScreen extends FContainer {
private TextureRegion background; private TextureRegion background;
private final FProgressBar progressBar; private final FProgressBar progressBar;
private FSkinFont disclaimerFont; private FSkinFont disclaimerFont;
private boolean preparedForDialogs; private boolean preparedForDialogs, showModeSelector, init, nobg;
private FButton btnAdventure, btnHome;
private BGAnimation bgAnimation;
public SplashScreen() { public SplashScreen() {
progressBar = new FProgressBar(); progressBar = new FProgressBar();
progressBar.setDescription("Welcome to Forge"); progressBar.setDescription("Welcome to Forge");
bgAnimation = new BGAnimation();
} }
public FProgressBar getProgressBar() { public FProgressBar getProgressBar() {
@@ -63,14 +72,140 @@ public class SplashScreen extends FContainer {
preparedForDialogs = true; preparedForDialogs = true;
} }
public void setShowModeSelector(boolean value) {
showModeSelector = value;
}
private class BGAnimation extends ForgeAnimation {
private static final float DURATION = 0.8f;
private float progress = 0;
private boolean finished, openAdventure;
public void drawBackground(Graphics g) {
float percentage = progress / DURATION;
if (percentage < 0) {
percentage = 0;
} else if (percentage > 1) {
percentage = 1;
}
if (nobg) {
float scale = 1.3f+(percentage*0.7f);
float hscale = 1.5f+(percentage*0.9f);
float logoHeight = FSkin.hdLogo.getHeight()*scale;
float logoWidth = FSkin.hdLogo.getWidth()*scale;
float logoY = getHeight()/2 - logoHeight/hscale;
float logoX = getWidth()/2 - logoWidth/2;
float mod = getHeight()/2 - logoHeight/2;
float oldalpha = g.getfloatAlphaComposite();
g.setAlphaComposite(oldalpha-percentage);
g.drawImage(FSkin.hdLogo, logoX, logoY+(mod*percentage), logoWidth, logoHeight);
g.setAlphaComposite(oldalpha);
} else if (showModeSelector)
showSelector(g);
else
showSplash(g);
}
@Override
protected boolean advance(float dt) {
progress += dt;
return progress < DURATION;
}
@Override
protected void onEnd(boolean endingAll) {
if (nobg) {
if (openAdventure)
Forge.openAdventure();
else
Forge.openHomeDefault();
}
}
}
@Override @Override
protected void drawBackground(Graphics g) { protected void drawBackground(Graphics g) {
bgAnimation.start();
bgAnimation.drawBackground(g);
}
private void showSelector(Graphics g) {
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());
float x, y, w, h;
float backgroundRatio = (float) background.getRegionWidth() / background.getRegionHeight();
float screenRatio = getWidth() / getHeight();
if (backgroundRatio > screenRatio) {
x = 0;
w = getWidth();
h = getWidth() * backgroundRatio;
y = (getHeight() - h) / 2;
}
else {
y = 0;
h = getHeight();
w = getHeight() / backgroundRatio;
x = (getWidth() - w) / 2;
}
if (FSkin.hdLogo != null) {
g.drawImage(FSkin.hdLogo, getWidth()/2 - (FSkin.hdLogo.getWidth()*1.3f)/2, getHeight()/2 - (FSkin.hdLogo.getHeight()*1.3f)/1.5f, FSkin.hdLogo.getWidth()*1.3f, FSkin.hdLogo.getHeight()*1.3f);
} else {
g.drawImage(background, x, y, w, h);
}
y += h * 295f / 450f;
float padding = 20f / 450f * w;
float height = 57f / 450f * h;
if (!init) {
btnAdventure = new FButton(Localizer.getInstance().getMessageorUseDefault("lblAdventureMode", "Adventure Mode"));
btnHome = new FButton(Localizer.getInstance().getMessageorUseDefault("lblClassicMode", "Classic Mode"));
btnAdventure.setCommand(new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (FSkin.hdLogo == null)
Forge.openAdventure();
else {
btnAdventure.setVisible(false);
btnHome.setVisible(false);
nobg = true;
bgAnimation.progress = 0;
bgAnimation.openAdventure = true;
}
}
});
btnHome.setCommand(new FEvent.FEventHandler() {
@Override
public void handleEvent(FEvent e) {
if (FSkin.hdLogo == null)
Forge.openHomeDefault();
else {
btnAdventure.setVisible(false);
btnHome.setVisible(false);
nobg = true;
bgAnimation.progress = 0;
bgAnimation.openAdventure = false;
}
}
});
float btn_w = (w - 2 * padding);
float btn_x = x + padding;
float btn_y = y + padding;
btnHome.setFont(FSkinFont.get(22));
btnAdventure.setFont(FSkinFont.get(22));
btnHome.setBounds(btn_x, btn_y, btn_w, height);
add(btnHome);
btnAdventure.setBounds(btn_x, btn_y+height+padding/2, btn_w, height);
add(btnAdventure);
init = true;
}
}
private void showSplash(Graphics g) {
if (background == null) { return; } if (background == null) { return; }
g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight()); g.drawImage(FSkinTexture.BG_TEXTURE, 0, 0, getWidth(), getHeight());
float x, y, w, h; float x, y, w, h;
float backgroundRatio = background.getRegionWidth() / background.getRegionHeight(); float backgroundRatio = (float) background.getRegionWidth() / background.getRegionHeight();
float screenRatio = getWidth() / getHeight(); float screenRatio = getWidth() / getHeight();
if (backgroundRatio > screenRatio) { if (backgroundRatio > screenRatio) {
x = 0; x = 0;

View File

@@ -304,6 +304,10 @@ public class MatchController extends AbstractGuiGame {
@Override @Override
public void finishGame() { public void finishGame() {
if (Forge.isMobileAdventureMode) {
Forge.clearCurrentScreen();
return;
}
if (hasLocalPlayers() || getGameView().isMatchOver()) { if (hasLocalPlayers() || getGameView().isMatchOver()) {
view.setViewWinLose(new ViewWinLose(getGameView())); view.setViewWinLose(new ViewWinLose(getGameView()));
view.getViewWinLose().setVisible(true); view.getViewWinLose().setVisible(true);

View File

@@ -359,16 +359,20 @@ public class MatchScreen extends FScreen {
if (viewWinLose == null) { if (viewWinLose == null) {
gameMenu.getChildAt(0).setEnabled(!game.isMulligan()); gameMenu.getChildAt(0).setEnabled(!game.isMulligan());
gameMenu.getChildAt(1).setEnabled(!game.isMulligan()); gameMenu.getChildAt(1).setEnabled(!game.isMulligan());
if (!Forge.isMobileAdventureMode) {
gameMenu.getChildAt(2).setEnabled(!game.isMulligan()); gameMenu.getChildAt(2).setEnabled(!game.isMulligan());
gameMenu.getChildAt(3).setEnabled(false); gameMenu.getChildAt(3).setEnabled(false);
}
} else { } else {
gameMenu.getChildAt(0).setEnabled(false); gameMenu.getChildAt(0).setEnabled(false);
gameMenu.getChildAt(1).setEnabled(false); gameMenu.getChildAt(1).setEnabled(false);
if (!Forge.isMobileAdventureMode) {
gameMenu.getChildAt(2).setEnabled(false); gameMenu.getChildAt(2).setEnabled(false);
gameMenu.getChildAt(3).setEnabled(true); gameMenu.getChildAt(3).setEnabled(true);
} }
} }
} }
}
if (devMenu!=null) { if (devMenu!=null) {
if (devMenu.isVisible()){ if (devMenu.isVisible()){
if (viewWinLose == null) if (viewWinLose == null)

View File

@@ -68,6 +68,7 @@ public class VGameMenu extends FDropDownMenu {
autoYields.show(); autoYields.show();
} }
})); }));
if (!Forge.isMobileAdventureMode) {
addItem(new FMenuItem(localizer.getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() { addItem(new FMenuItem(localizer.getMessage("lblSettings"), Forge.hdbuttons ? FSkinImage.HDPREFERENCE : FSkinImage.SETTINGS, new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
@@ -87,3 +88,4 @@ public class VGameMenu extends FDropDownMenu {
})); }));
} }
} }
}

View File

@@ -55,6 +55,8 @@ public class VPlayers extends FDropDown {
player = player0; player = player0;
playerDeck = MatchController.getPlayerDeck(player0); playerDeck = MatchController.getPlayerDeck(player0);
btnDeck = new FLabel.ButtonBuilder().opaque(true).iconScaleFactor(0.99f).selectable().alphaComposite(1).iconInBackground(true).build(); btnDeck = new FLabel.ButtonBuilder().opaque(true).iconScaleFactor(0.99f).selectable().alphaComposite(1).iconInBackground(true).build();
btnDeck.setEnabled(!Forge.isMobileAdventureMode);
btnDeck.setVisible(!Forge.isMobileAdventureMode);
btnDeck.setCommand(new FEvent.FEventHandler() { btnDeck.setCommand(new FEvent.FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
@@ -86,9 +88,15 @@ public class VPlayers extends FDropDown {
float x = PADDING; float x = PADDING;
float y = PADDING; float y = PADDING;
float h = getHeight() - 2 * y; float h = getHeight() - 2 * y;
String details = player.getDetails();
if (Forge.isMobileAdventureMode) {
g.drawImage(MatchController.getPlayerAvatar(player), x, y, h, h);
} else {
details += playerDeck.getName();
}
x += h + PADDING; x += h + PADDING;
//Draw Player Details //Draw Player Details
g.drawText(player.getDetails() + playerDeck.getName(), FONT, FList.FORE_COLOR, x, y, getWidth() - PADDING - x, h, true, Align.left, true); g.drawText(details, FONT, FList.FORE_COLOR, x, y, getWidth() - PADDING - x, h, true, Align.left, true);
} }
@Override @Override

View File

@@ -135,8 +135,10 @@ public abstract class FDisplayObject {
//TODO: mouse detection on android? //TODO: mouse detection on android?
if (Forge.afterDBloaded && !GuiBase.isAndroid()) { if (Forge.afterDBloaded && !GuiBase.isAndroid()) {
Forge.hoveredCount = listeners.size(); Forge.hoveredCount = listeners.size();
if (Forge.getCurrentScreen() != null) {
if (!Forge.getCurrentScreen().toString().contains("Match")) if (!Forge.getCurrentScreen().toString().contains("Match"))
Forge.hoveredCount = 1; Forge.hoveredCount = 1;
}
if (exact) { if (exact) {
setHovered(this.enabled && this.visible && ((FCardPanel) this).renderedCardContains(screenToLocalX(screenX), screenToLocalY(screenY)) && Forge.hoveredCount < 2); setHovered(this.enabled && this.visible && ((FCardPanel) this).renderedCardContains(screenToLocalX(screenX), screenToLocalY(screenY)) && Forge.hoveredCount < 2);
} else { } else {

View File

@@ -11,6 +11,10 @@
<name>Forge Gui</name> <name>Forge Gui</name>
<repositories> <repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository> <repository>
<id>4thline-repo</id> <id>4thline-repo</id>
<url>http://4thline.org/m2</url> <url>http://4thline.org/m2</url>
@@ -57,6 +61,12 @@
<artifactId>lz4-java</artifactId> <artifactId>lz4-java</artifactId>
<version>1.7.1</version> <version>1.7.1</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.raeleus.TenPatch</groupId>
<artifactId>tenpatch</artifactId>
<version>5.2.2</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

Some files were not shown because too many files have changed in this diff Show More