Create menu button support

Start working on Quest Mode
This commit is contained in:
drdev
2014-07-03 01:57:48 +00:00
parent e63274d411
commit 4cfa7aa74f
6 changed files with 161 additions and 28 deletions

1
.gitattributes vendored
View File

@@ -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/LimitedWinLose.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/sealed/SealedScreen.java -text
forge-gui-mobile/src/forge/screens/settings/FilesPage.java -text

View File

@@ -10,6 +10,7 @@ import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinTexture;
import forge.menu.FPopupMenu;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
@@ -26,6 +27,9 @@ public abstract class FScreen extends FContainer {
protected FScreen(String headerCaption) {
this(headerCaption == null ? null : new DefaultHeader(headerCaption));
}
protected FScreen(String headerCaption, FPopupMenu menu) {
this(new MenuHeader(headerCaption, menu));
}
protected FScreen(Header header0) {
header = header0;
if (header != null) {
@@ -57,12 +61,12 @@ public abstract class FScreen extends FContainer {
}
public void showMenu() {
SettingsScreen.show(); //TODO: Build menu containing settings item
//buildMenu();
if (header instanceof MenuHeader) {
((MenuHeader)header).btnMenu.trigger();
}
else { //just so settings screen if no menu header
SettingsScreen.show();
}
protected void buildMenu() {
}
@Override
@@ -95,8 +99,8 @@ public abstract class FScreen extends FContainer {
public abstract float getPreferredHeight();
}
private static class DefaultHeader extends Header {
private static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f);
private static final FSkinFont FONT = FSkinFont.get(16);
protected static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f);
protected static final FSkinFont FONT = FSkinFont.get(16);
private final FLabel btnBack, lblCaption;
@@ -132,6 +136,26 @@ public abstract class FScreen extends FContainer {
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 {
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
public boolean keyDown(int keyCode) {
if (keyCode == Keys.ESCAPE || keyCode == Keys.BACK) {

View File

@@ -9,7 +9,7 @@ import forge.assets.FSkinImage;
import forge.screens.constructed.ConstructedScreen;
import forge.screens.draft.DraftScreen;
import forge.screens.gauntlet.GauntletScreen;
import forge.screens.quest.QuestScreen;
import forge.screens.quest.QuestDuelsScreen;
import forge.screens.sealed.SealedScreen;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FButton;
@@ -46,9 +46,9 @@ public class HomeScreen extends FScreen {
addButton("Quest Mode", new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
Forge.openScreen(new QuestScreen());
Forge.openScreen(new QuestDuelsScreen());
}
}, false);
}, true);
addButton("Gauntlets", new FEventHandler() {
@Override
public void handleEvent(FEvent e) {

View File

@@ -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) {
}
}

View File

@@ -1,22 +1,68 @@
package forge.screens.quest;
import forge.game.GameType;
import forge.screens.LaunchScreen;
public class QuestScreen extends LaunchScreen {
public QuestScreen() {
super("Quest Mode");
}
import forge.assets.FSkinImage;
import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.screens.FScreen;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
public abstract class QuestScreen extends FScreen {
protected QuestScreen(String headerCaption) {
super(headerCaption, new FPopupMenu() {
@Override
protected void doLayoutAboveBtnStart(float startY, float width, float height) {
// TODO Auto-generated method stub
}
protected void buildMenu() {
addItem(new FMenuItem("Duels", FSkinImage.QUEST_GEAR, new FEventHandler() {
@Override
protected boolean buildLaunchParams(LaunchParams launchParams) {
launchParams.gameType = GameType.Quest;
return false; //TODO: Support launching match
public void handleEvent(FEvent e) {
}
}));
addItem(new FMenuItem("Challenges", FSkinImage.QUEST_HEART, new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
}
}));
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) {
}
}));
}
});
}
}

View File

@@ -198,6 +198,14 @@ public class FLabel extends FDisplayObject implements IButton {
return handled;
}
public boolean trigger() {
if (isEnabled() && command != null) {
command.handleEvent(new FEvent(this, FEventType.TAP));
return true;
}
return false;
}
public TextBounds getAutoSizeBounds() {
TextBounds bounds;
if (text.isEmpty()) {