diff --git a/.gitattributes b/.gitattributes index 934fab5cf55..c5835e66905 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1337,6 +1337,9 @@ 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/QuestWinLose.java -text forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text +forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java -text +forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java -text +forge-gui-mobile/src/forge/screens/online/OnlineMenu.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java -text diff --git a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java index 24950f5b5c9..ac4061fc576 100644 --- a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java +++ b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java @@ -7,6 +7,7 @@ import forge.assets.FSkinImage; import forge.deck.FDeckChooser; import forge.game.GameType; import forge.screens.achievements.AchievementsScreen; +import forge.screens.online.OnlineMenu; import forge.screens.settings.SettingsScreen; import forge.toolbox.FButton; import forge.toolbox.FEvent; @@ -38,9 +39,9 @@ public class HomeScreen extends FScreen { addButton("Play Online", new FEventHandler() { @Override public void handleEvent(FEvent e) { + OnlineMenu.getPreferredScreen().open(); } }); - buttons.get(buttons.size() - 1).setEnabled(false); addButton("Deck Manager", new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java b/forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java new file mode 100644 index 00000000000..34ce5018659 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java @@ -0,0 +1,50 @@ +package forge.screens.online; + +import java.util.ArrayList; + +import forge.screens.FScreen; +import forge.toolbox.FEvent; +import forge.toolbox.FEvent.FEventHandler; +import forge.toolbox.FChoiceList; +import forge.toolbox.FTextField; +import forge.util.Utils; + +public class OnlineChatScreen extends FScreen { + private static final float PADDING = Utils.scale(5); + + private final FChoiceList lstLog = add(new FChoiceList(new ArrayList())); + private final FTextField txtSendMessage = add(new FTextField()); + + public OnlineChatScreen() { + super(null, OnlineMenu.getMenu()); + + txtSendMessage.setGhostText("Enter message to send"); + txtSendMessage.setChangedHandler(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + sendMessage(); + } + }); + } + + private void sendMessage() { + String message = txtSendMessage.getText(); + if (message.isEmpty()) { return; } + + txtSendMessage.setText(""); + + lstLog.addItem(message); + lstLog.scrollToBottom(); + } + + @Override + protected void doLayout(float startY, float width, float height) { + float x = PADDING; + float y = startY + PADDING; + float w = width - 2 * PADDING; + float h = height - y - txtSendMessage.getHeight() - 2 * PADDING; + lstLog.setBounds(x, y, w, h); + y += h + PADDING; + txtSendMessage.setBounds(x, y, w, txtSendMessage.getHeight()); + } +} diff --git a/forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java b/forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java new file mode 100644 index 00000000000..5a5da17181d --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java @@ -0,0 +1,45 @@ +package forge.screens.online; + +import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; + +import forge.assets.FSkinFont; +import forge.screens.LaunchScreen; +import forge.toolbox.FLabel; +import forge.toolbox.FTextArea; +import forge.util.Utils; + +public class OnlineLobbyScreen extends LaunchScreen { + private static final float PADDING = Utils.scale(10); + + private final FTextArea lblDesc = add(new FTextArea(false, + "Coming soon...")); + + public OnlineLobbyScreen() { + super(null, OnlineMenu.getMenu()); + + lblDesc.setAlignment(HAlignment.CENTER); + lblDesc.setCenterVertically(true); + lblDesc.setFont(FSkinFont.get(20)); + lblDesc.setTextColor(FLabel.INLINE_LABEL_COLOR); + + btnStart.setEnabled(false); + } + + @Override + protected void doLayoutAboveBtnStart(float startY, float width, float height) { + float x = PADDING; + float y = startY + PADDING; + float w = width - 2 * PADDING; + float h = height - y - PADDING; + lblDesc.setBounds(x, y, w, h); + } + + @Override + protected void startMatch() { + } + + @Override + protected boolean buildLaunchParams(LaunchParams launchParams) { + return false; + } +} diff --git a/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java b/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java new file mode 100644 index 00000000000..ae0d0259b3c --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/online/OnlineMenu.java @@ -0,0 +1,101 @@ +package forge.screens.online; + +import forge.Forge; +import forge.assets.FImage; +import forge.assets.FSkinImage; +import forge.menu.FMenuItem; +import forge.menu.FPopupMenu; +import forge.model.FModel; +import forge.properties.ForgePreferences; +import forge.properties.ForgePreferences.FPref; +import forge.screens.FScreen; +import forge.toolbox.FEvent; +import forge.toolbox.FEvent.FEventHandler; + +public class OnlineMenu extends FPopupMenu { + public enum OnlineScreen { + Lobby("Lobby", FSkinImage.DECKLIST, OnlineLobbyScreen.class), + Chat("Chat", FSkinImage.HAND, OnlineChatScreen.class); + + private final FMenuItem item; + private final Class screenClass; + private FScreen screen; + + private OnlineScreen(final String caption0, final FImage icon0, final Class screenClass0) { + screenClass = screenClass0; + item = new FMenuItem(caption0, icon0, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + Forge.back(); //remove current screen from chain + open(); + setPreferredScreen(OnlineScreen.this); + } + }); + } + + private void initializeScreen() { + if (screen == null) { //don't initialize screen until it's opened the first time + try { + screen = screenClass.newInstance(); + screen.setHeaderCaption("Play Online - " + item.getText()); + } + catch (Exception e) { + e.printStackTrace(); + return; + } + } + } + + public void open() { + initializeScreen(); + Forge.openScreen(screen); + } + + public void setAsBackScreen() { + initializeScreen(); + Forge.setBackScreen(screen); + } + } + + private static final ForgePreferences prefs = FModel.getPreferences(); + private static final OnlineMenu menu = new OnlineMenu(); + private static OnlineScreen preferredScreen; + + static { + try { + preferredScreen = OnlineScreen.valueOf(prefs.getPref(FPref.PLAY_ONLINE_SCREEN)); + } + catch (Exception ex) { + ex.printStackTrace(); + preferredScreen = OnlineScreen.Lobby; + prefs.setPref(FPref.PLAY_ONLINE_SCREEN, preferredScreen.name()); + prefs.save(); + } + } + + public static OnlineScreen getPreferredScreen() { + return preferredScreen; + } + public static void setPreferredScreen(OnlineScreen preferredScreen0) { + if (preferredScreen == preferredScreen0) { return; } + preferredScreen = preferredScreen0; + prefs.setPref(FPref.PLAY_ONLINE_SCREEN, preferredScreen.name()); + prefs.save(); + } + + public static OnlineMenu getMenu() { + return menu; + } + + private OnlineMenu() { + } + + @Override + protected void buildMenu() { + FScreen currentScreen = Forge.getCurrentScreen(); + for (OnlineScreen ngs : OnlineScreen.values()) { + addItem(ngs.item); + ngs.item.setSelected(currentScreen == ngs.screen); + } + } +} diff --git a/forge-gui-mobile/src/forge/toolbox/FTextArea.java b/forge-gui-mobile/src/forge/toolbox/FTextArea.java index 0470e7b8d6b..674a6c9b56f 100644 --- a/forge-gui-mobile/src/forge/toolbox/FTextArea.java +++ b/forge-gui-mobile/src/forge/toolbox/FTextArea.java @@ -15,6 +15,7 @@ public class FTextArea extends FScrollPane { private Vector2 insets; private FSkinColor textColor; private final TextRenderer renderer; + private boolean centerVertically; public FTextArea(boolean parseReminderText0) { this(parseReminderText0, ""); @@ -43,6 +44,13 @@ public class FTextArea extends FScrollPane { alignment = alignment0; } + public boolean getCenterVertically() { + return centerVertically; + } + public void setCenterVertically(boolean centerVertically0) { + centerVertically = centerVertically0; + } + public FSkinFont getFont() { return font; } @@ -71,6 +79,6 @@ public class FTextArea extends FScrollPane { @Override protected void drawBackground(Graphics g) { - renderer.drawText(g, text, font, textColor, insets.x - getScrollLeft(), insets.y - getScrollTop(), getScrollWidth() - 2 * insets.x, getScrollHeight() - 2 * insets.y, 0, getHeight(), true, alignment, false); + renderer.drawText(g, text, font, textColor, insets.x - getScrollLeft(), insets.y - getScrollTop(), getScrollWidth() - 2 * insets.x, getScrollHeight() - 2 * insets.y, 0, getHeight(), true, alignment, centerVertically); } } diff --git a/forge-gui/src/main/java/forge/properties/ForgePreferences.java b/forge-gui/src/main/java/forge/properties/ForgePreferences.java index e6295dab844..d0892ed3496 100644 --- a/forge-gui/src/main/java/forge/properties/ForgePreferences.java +++ b/forge-gui/src/main/java/forge/properties/ForgePreferences.java @@ -90,6 +90,7 @@ public class ForgePreferences extends PreferencesStore { NEW_GAME_SCREEN("Constructed"), LOAD_GAME_SCREEN("BoosterDraft"), + PLAY_ONLINE_SCREEN("Lobby"), SUBMENU_CURRENTMENU ("CONSTRUCTED"), SUBMENU_SANCTIONED ("true"),