diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 376cc2f6dc5..5aa830105eb 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -288,6 +288,9 @@ public class Forge implements ApplicationListener { if (controller.getMapping().buttonB == buttonIndex) { container.keyDown(Keys.BUTTON_B); } + if (controller.getMapping().buttonBack == buttonIndex) { //selecting player + container.keyDown(Keys.BUTTON_SELECT); + } } else {//Others /*if (controller.getMapping().buttonL2 == buttonIndex) {//others are axis-4 container.keyDown(Keys.ENTER); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java index e32ea675cfb..569279bf04c 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAvatar.java @@ -1,5 +1,6 @@ package forge.screens.match.views; +import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.Vector2; @@ -96,12 +97,8 @@ public class VAvatar extends FDisplayObject { } @Override public boolean tap(float x, float y, int count) { - ThreadUtil.invokeInGameThread(new Runnable() { //must invoke in game thread in case a dialog needs to be shown - @Override - public void run() { - MatchController.instance.getGameController().selectPlayer(player, null); - } - }); + //must invoke in game thread in case a dialog needs to be shown + ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().selectPlayer(player, null)); return true; } @@ -170,5 +167,27 @@ public class VAvatar extends FDisplayObject { if (MatchController.instance.isHighlighted(player)) { g.drawRect(w / 16f, Color.MAGENTA, 0, 0, w, h); } + //selector + if (Forge.hasGamepad()) { + if (MatchController.getView().selectedPlayerPanel() != null) { + if (MatchController.getView().selectedPlayerPanel().getPlayer() == player) { + g.drawRect(w / 16f, Color.ORANGE, 0, 0, w, h); + } + } + } + } + + @Override + public boolean keyDown(int keyCode) { + if (keyCode == Input.Keys.BUTTON_SELECT) { + //must invoke in game thread in case a dialog needs to be shown + if (MatchController.getView().selectedPlayerPanel() != null) { + PlayerView selected = MatchController.getView().selectedPlayerPanel().getPlayer(); + if (selected != null) + ThreadUtil.invokeInGameThread(() -> MatchController.instance.getGameController().selectPlayer(selected, null)); + } + return true; + } + return super.keyDown(keyCode); } } diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index 5f0e0359ec9..9925d5bb77a 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import com.badlogic.gdx.Input; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -39,7 +40,6 @@ import forge.itemmanager.filters.ItemFilter; import forge.itemmanager.filters.ListLabelFilter; import forge.menu.FMenuItem; import forge.menu.FPopupMenu; -import forge.toolbox.FEvent.FEventHandler; import forge.util.Callback; import forge.util.Utils; @@ -95,38 +95,20 @@ public class ListChooser extends FContainer { txtSearch = add(new FTextField()); txtSearch.setFont(FSkinFont.get(12)); txtSearch.setGhostText(Forge.getLocalizer().getMessage("lblSearch")); - txtSearch.setChangedHandler(new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - applyFilters(); - } - }); + txtSearch.setChangedHandler(e -> applyFilters()); advancedSearchFilter = lstChoices.getListItemRenderer().getAdvancedSearchFilter(this); if (advancedSearchFilter != null) { btnSearch = add(new FLabel.ButtonBuilder() - .icon(Forge.hdbuttons ? FSkinImage.HDSEARCH : FSkinImage.SEARCH).iconScaleFactor(0.9f).command(new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - FPopupMenu menu = new FPopupMenu() { - @Override - protected void buildMenu() { - addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAdvancedSearch"), Forge.hdbuttons ? FSkinImage.HDSEARCH : FSkinImage.SEARCH, new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - advancedSearchFilter.edit(); - } - })); - addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblResetFilters"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - resetFilters(); - } - })); - } - }; - menu.show(btnSearch, 0, btnSearch.getHeight()); - } + .icon(Forge.hdbuttons ? FSkinImage.HDSEARCH : FSkinImage.SEARCH).iconScaleFactor(0.9f).command(e -> { + FPopupMenu menu = new FPopupMenu() { + @Override + protected void buildMenu() { + addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblAdvancedSearch"), Forge.hdbuttons ? FSkinImage.HDSEARCH : FSkinImage.SEARCH, e1 -> advancedSearchFilter.edit())); + addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblResetFilters"), Forge.hdbuttons ? FSkinImage.HDDELETE : FSkinImage.DELETE, e2 -> resetFilters())); + } + }; + menu.show(btnSearch, 0, btnSearch.getHeight()); }).build()); add(advancedSearchFilter.getWidget()); } @@ -184,12 +166,7 @@ public class ListChooser extends FContainer { final String pattern = txtSearch.getText().toLowerCase(); if (!pattern.isEmpty()) { - predicates.add(new Predicate() { - @Override - public boolean apply(T input) { - return lstChoices.getChoiceText(input).toLowerCase().contains(pattern); - } - }); + predicates.add(input -> lstChoices.getChoiceText(input).toLowerCase().contains(pattern)); } if (advancedSearchFilter != null && !advancedSearchFilter.isEmpty()) { predicates.add((Predicate)advancedSearchFilter.getPredicate()); @@ -319,4 +296,26 @@ public class ListChooser extends FContainer { //don't draw border } } + + @Override + public boolean keyDown(int keyCode) { + if (Forge.hasGamepad()) { + if (keyCode == Input.Keys.DPAD_DOWN) { + setNextSelected(); + } else if (keyCode == Input.Keys.DPAD_UP) { + setPreviousSelected(); + } + return true; + } + return super.keyDown(keyCode); + } + public void setNextSelected() { + if ((lstChoices.getSelectedIndex()+1) < lstChoices.getCount()) + lstChoices.setSelectedIndex(lstChoices.getSelectedIndex()+1); + } + public void setPreviousSelected() { + if ((lstChoices.getSelectedIndex()-1) > -1) { + lstChoices.setSelectedIndex(lstChoices.getSelectedIndex() - 1); + } + } }