mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Create menu button support
Start working on Quest Mode
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1201,6 +1201,7 @@ forge-gui-mobile/src/forge/screens/match/winlose/ControlWinLose.java -text
|
|||||||
forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java -text
|
forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java -text
|
||||||
forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java -text
|
forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java -text
|
||||||
forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text
|
forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text
|
||||||
|
forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/quest/QuestScreen.java -text
|
forge-gui-mobile/src/forge/screens/quest/QuestScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/sealed/SealedScreen.java -text
|
forge-gui-mobile/src/forge/screens/sealed/SealedScreen.java -text
|
||||||
forge-gui-mobile/src/forge/screens/settings/FilesPage.java -text
|
forge-gui-mobile/src/forge/screens/settings/FilesPage.java -text
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import forge.assets.FSkinColor;
|
|||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.assets.FSkinColor.Colors;
|
import forge.assets.FSkinColor.Colors;
|
||||||
import forge.assets.FSkinTexture;
|
import forge.assets.FSkinTexture;
|
||||||
|
import forge.menu.FPopupMenu;
|
||||||
import forge.screens.settings.SettingsScreen;
|
import forge.screens.settings.SettingsScreen;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
import forge.toolbox.FEvent;
|
import forge.toolbox.FEvent;
|
||||||
@@ -26,6 +27,9 @@ public abstract class FScreen extends FContainer {
|
|||||||
protected FScreen(String headerCaption) {
|
protected FScreen(String headerCaption) {
|
||||||
this(headerCaption == null ? null : new DefaultHeader(headerCaption));
|
this(headerCaption == null ? null : new DefaultHeader(headerCaption));
|
||||||
}
|
}
|
||||||
|
protected FScreen(String headerCaption, FPopupMenu menu) {
|
||||||
|
this(new MenuHeader(headerCaption, menu));
|
||||||
|
}
|
||||||
protected FScreen(Header header0) {
|
protected FScreen(Header header0) {
|
||||||
header = header0;
|
header = header0;
|
||||||
if (header != null) {
|
if (header != null) {
|
||||||
@@ -57,12 +61,12 @@ public abstract class FScreen extends FContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void showMenu() {
|
public void showMenu() {
|
||||||
SettingsScreen.show(); //TODO: Build menu containing settings item
|
if (header instanceof MenuHeader) {
|
||||||
//buildMenu();
|
((MenuHeader)header).btnMenu.trigger();
|
||||||
}
|
}
|
||||||
|
else { //just so settings screen if no menu header
|
||||||
protected void buildMenu() {
|
SettingsScreen.show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -95,8 +99,8 @@ public abstract class FScreen extends FContainer {
|
|||||||
public abstract float getPreferredHeight();
|
public abstract float getPreferredHeight();
|
||||||
}
|
}
|
||||||
private static class DefaultHeader extends Header {
|
private static class DefaultHeader extends Header {
|
||||||
private static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f);
|
protected static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f);
|
||||||
private static final FSkinFont FONT = FSkinFont.get(16);
|
protected static final FSkinFont FONT = FSkinFont.get(16);
|
||||||
|
|
||||||
private final FLabel btnBack, lblCaption;
|
private final FLabel btnBack, lblCaption;
|
||||||
|
|
||||||
@@ -132,6 +136,26 @@ public abstract class FScreen extends FContainer {
|
|||||||
lblCaption.setBounds(height, 0, width - 2 * height, height);
|
lblCaption.setBounds(height, 0, width - 2 * height, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private static class MenuHeader extends DefaultHeader {
|
||||||
|
private final FLabel btnMenu;
|
||||||
|
|
||||||
|
public MenuHeader(String headerCaption, final FPopupMenu menu) {
|
||||||
|
super(headerCaption);
|
||||||
|
btnMenu = add(new FLabel.Builder().icon(new MenuIcon(HEIGHT, HEIGHT)).pressedColor(BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
menu.show(btnMenu, 0, HEIGHT);
|
||||||
|
}
|
||||||
|
}).build());
|
||||||
|
btnMenu.setSize(HEIGHT, HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doLayout(float width, float height) {
|
||||||
|
super.doLayout(width, height);
|
||||||
|
btnMenu.setLeft(width - height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected static class BackIcon implements FImage {
|
protected static class BackIcon implements FImage {
|
||||||
private static final float THICKNESS = Utils.scaleMax(3);
|
private static final float THICKNESS = Utils.scaleMax(3);
|
||||||
@@ -165,6 +189,47 @@ public abstract class FScreen extends FContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static class MenuIcon implements FImage {
|
||||||
|
private static final FSkinColor COLOR = FSkinColor.get(Colors.CLR_TEXT);
|
||||||
|
|
||||||
|
private final float width, height;
|
||||||
|
public MenuIcon(float width0, float height0) {
|
||||||
|
width = width0;
|
||||||
|
height = height0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Graphics g, float x, float y, float w, float h) {
|
||||||
|
float thickness = Math.round(h / 5);
|
||||||
|
float delta = Math.round(thickness * 1.75f);
|
||||||
|
y += (h - 2 * delta - thickness) / 2;
|
||||||
|
|
||||||
|
g.fillRect(COLOR, x, y, thickness, thickness);
|
||||||
|
y += delta;
|
||||||
|
g.fillRect(COLOR, x, y, thickness, thickness);
|
||||||
|
y += delta;
|
||||||
|
g.fillRect(COLOR, x, y, thickness, thickness);
|
||||||
|
x += delta;
|
||||||
|
y -= 2 * delta;
|
||||||
|
w -= delta;
|
||||||
|
g.fillRect(COLOR, x, y, w, thickness);
|
||||||
|
y += delta;
|
||||||
|
g.fillRect(COLOR, x, y, w, thickness);
|
||||||
|
y += delta;
|
||||||
|
g.fillRect(COLOR, x, y, w, thickness);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyDown(int keyCode) {
|
public boolean keyDown(int keyCode) {
|
||||||
if (keyCode == Keys.ESCAPE || keyCode == Keys.BACK) {
|
if (keyCode == Keys.ESCAPE || keyCode == Keys.BACK) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import forge.assets.FSkinImage;
|
|||||||
import forge.screens.constructed.ConstructedScreen;
|
import forge.screens.constructed.ConstructedScreen;
|
||||||
import forge.screens.draft.DraftScreen;
|
import forge.screens.draft.DraftScreen;
|
||||||
import forge.screens.gauntlet.GauntletScreen;
|
import forge.screens.gauntlet.GauntletScreen;
|
||||||
import forge.screens.quest.QuestScreen;
|
import forge.screens.quest.QuestDuelsScreen;
|
||||||
import forge.screens.sealed.SealedScreen;
|
import forge.screens.sealed.SealedScreen;
|
||||||
import forge.screens.settings.SettingsScreen;
|
import forge.screens.settings.SettingsScreen;
|
||||||
import forge.toolbox.FButton;
|
import forge.toolbox.FButton;
|
||||||
@@ -46,9 +46,9 @@ public class HomeScreen extends FScreen {
|
|||||||
addButton("Quest Mode", new FEventHandler() {
|
addButton("Quest Mode", new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
Forge.openScreen(new QuestScreen());
|
Forge.openScreen(new QuestDuelsScreen());
|
||||||
}
|
}
|
||||||
}, false);
|
}, true);
|
||||||
addButton("Gauntlets", new FEventHandler() {
|
addButton("Gauntlets", new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package forge.screens.quest;
|
||||||
|
|
||||||
|
public class QuestDuelsScreen extends QuestScreen {
|
||||||
|
|
||||||
|
public QuestDuelsScreen() {
|
||||||
|
super("Quest Duels");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doLayout(float startY, float width, float height) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,68 @@
|
|||||||
package forge.screens.quest;
|
package forge.screens.quest;
|
||||||
|
|
||||||
import forge.game.GameType;
|
import forge.assets.FSkinImage;
|
||||||
import forge.screens.LaunchScreen;
|
import forge.menu.FMenuItem;
|
||||||
|
import forge.menu.FPopupMenu;
|
||||||
|
import forge.screens.FScreen;
|
||||||
|
import forge.toolbox.FEvent;
|
||||||
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
|
|
||||||
public class QuestScreen extends LaunchScreen {
|
public abstract class QuestScreen extends FScreen {
|
||||||
public QuestScreen() {
|
protected QuestScreen(String headerCaption) {
|
||||||
super("Quest Mode");
|
super(headerCaption, new FPopupMenu() {
|
||||||
}
|
@Override
|
||||||
|
protected void buildMenu() {
|
||||||
@Override
|
addItem(new FMenuItem("Duels", FSkinImage.QUEST_GEAR, new FEventHandler() {
|
||||||
protected void doLayoutAboveBtnStart(float startY, float width, float height) {
|
@Override
|
||||||
// TODO Auto-generated method stub
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
}
|
}));
|
||||||
|
addItem(new FMenuItem("Challenges", FSkinImage.QUEST_HEART, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
protected boolean buildLaunchParams(LaunchParams launchParams) {
|
public void handleEvent(FEvent e) {
|
||||||
launchParams.gameType = GameType.Quest;
|
}
|
||||||
return false; //TODO: Support launching match
|
}));
|
||||||
|
addItem(new FMenuItem("Tournaments", FSkinImage.PACK, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Travel", FSkinImage.QUEST_MAP, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Spell Shop", FSkinImage.QUEST_BOOK, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Bazaar", FSkinImage.QUEST_BOTTLES, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Change Deck", FSkinImage.DECKLIST, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("New Quest", FSkinImage.NEW, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Load Quest", FSkinImage.OPEN, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,14 @@ public class FLabel extends FDisplayObject implements IButton {
|
|||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean trigger() {
|
||||||
|
if (isEnabled() && command != null) {
|
||||||
|
command.handleEvent(new FEvent(this, FEventType.TAP));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public TextBounds getAutoSizeBounds() {
|
public TextBounds getAutoSizeBounds() {
|
||||||
TextBounds bounds;
|
TextBounds bounds;
|
||||||
if (text.isEmpty()) {
|
if (text.isEmpty()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user