mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-11 16:26:22 +00:00
Merge pull request #1441 from kevlahnota/master
add DPAD selector for gamepad in ListChooser
This commit is contained in:
@@ -288,6 +288,9 @@ public class Forge implements ApplicationListener {
|
||||
if (controller.getMapping().buttonB == buttonIndex) {
|
||||
container.keyDown(Keys.BUTTON_B);
|
||||
}
|
||||
if (controller.getMapping().buttonBack == buttonIndex) {
|
||||
container.keyDown(Keys.BUTTON_SELECT);
|
||||
}
|
||||
} else {//Others
|
||||
/*if (controller.getMapping().buttonL2 == buttonIndex) {//others are axis-4
|
||||
container.keyDown(Keys.ENTER);
|
||||
|
||||
@@ -105,7 +105,7 @@ public class FMenuBar extends Header {
|
||||
|
||||
@Override
|
||||
public boolean keyDown(int keyCode) {
|
||||
if (keyCode == Input.Keys.BUTTON_L1) {
|
||||
if (keyCode == Input.Keys.BUTTON_SELECT) { //show menu tabs
|
||||
setNextSelected();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -579,14 +579,16 @@ public class MatchScreen extends FScreen {
|
||||
} catch (Exception e) {}
|
||||
}
|
||||
break;
|
||||
case Keys.PAGE_DOWN:
|
||||
case Keys.BUTTON_L1: //switch selected panels
|
||||
if (Forge.hasGamepad()) {
|
||||
//nullPotentialListener();
|
||||
selectedPlayerPanel().hideSelectedTab();
|
||||
selectedPlayer--;
|
||||
if (selectedPlayer < 0)
|
||||
selectedPlayer=playerPanelsList.size()-1;
|
||||
selectedPlayerPanel().setNextSelectedTab(true);
|
||||
selectedPlayerPanel().closeSelectedTab();
|
||||
selectedPlayerPanel().getSelectedRow().unselectCurrent();
|
||||
//selectedPlayerPanel().setNextSelectedTab(true);
|
||||
}
|
||||
break;
|
||||
case Keys.ENTER:
|
||||
|
||||
@@ -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.PAGE_DOWN) { // left analog down to select current selected panel
|
||||
//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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<T> 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<T> extends FContainer {
|
||||
|
||||
final String pattern = txtSearch.getText().toLowerCase();
|
||||
if (!pattern.isEmpty()) {
|
||||
predicates.add(new Predicate<T>() {
|
||||
@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<? super T>)advancedSearchFilter.getPredicate());
|
||||
@@ -319,4 +296,26 @@ public class ListChooser<T> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,10 +57,11 @@ Right Trigger - Keep/Mulligan/Cancel/End Turn/Alpha Strike (Bottom Right Button)
|
||||
(To select cards on the battlefield, close Zone tabs first (Button B), then use DPAD)
|
||||
|
||||
DPAD Up/Down/Left/Right - Selector
|
||||
Left Shoulder - Tab Selector/Show
|
||||
Left Shoulder - Player Panel Selector
|
||||
Right Shoulder - Zone Selector/Show
|
||||
Left Analog Down - Switch Player for Selector
|
||||
Left Analog Down - Select Player (current selected panel)
|
||||
|
||||
Button A - Confirm
|
||||
Button B - Cancel/Hide
|
||||
Button Y - Show Zoom
|
||||
Button Y - Show Zoom
|
||||
Button Back - Show Menu Tabs
|
||||
Reference in New Issue
Block a user