mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Refactor how overlays are shown and hidden
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -16146,6 +16146,7 @@ forge-m-base/src/forge/screens/sealed/SealedScreen.java -text
|
|||||||
forge-m-base/src/forge/screens/settings/SettingsScreen.java -text
|
forge-m-base/src/forge/screens/settings/SettingsScreen.java -text
|
||||||
forge-m-base/src/forge/toolbox/FButton.java -text
|
forge-m-base/src/forge/toolbox/FButton.java -text
|
||||||
forge-m-base/src/forge/toolbox/FCardPanel.java -text
|
forge-m-base/src/forge/toolbox/FCardPanel.java -text
|
||||||
|
forge-m-base/src/forge/toolbox/FCardZoom.java -text
|
||||||
forge-m-base/src/forge/toolbox/FContainer.java -text
|
forge-m-base/src/forge/toolbox/FContainer.java -text
|
||||||
forge-m-base/src/forge/toolbox/FDisplayObject.java -text
|
forge-m-base/src/forge/toolbox/FDisplayObject.java -text
|
||||||
forge-m-base/src/forge/toolbox/FFileChooser.java -text
|
forge-m-base/src/forge/toolbox/FFileChooser.java -text
|
||||||
@@ -16160,7 +16161,6 @@ forge-m-base/src/forge/toolbox/FScrollPane.java -text
|
|||||||
forge-m-base/src/forge/toolbox/FTextArea.java -text
|
forge-m-base/src/forge/toolbox/FTextArea.java -text
|
||||||
forge-m-base/src/forge/toolbox/GuiChoose.java -text
|
forge-m-base/src/forge/toolbox/GuiChoose.java -text
|
||||||
forge-m-base/src/forge/toolbox/GuiDialog.java -text
|
forge-m-base/src/forge/toolbox/GuiDialog.java -text
|
||||||
forge-m-base/src/forge/toolbox/VCardZoom.java -text
|
|
||||||
forge-m-base/src/forge/utils/Constants.java -text
|
forge-m-base/src/forge/utils/Constants.java -text
|
||||||
forge-m-base/src/forge/utils/Evaluator.java -text
|
forge-m-base/src/forge/utils/Evaluator.java -text
|
||||||
forge-m-base/src/forge/utils/ForgePreferences.java -text
|
forge-m-base/src/forge/utils/ForgePreferences.java -text
|
||||||
|
|||||||
@@ -389,17 +389,16 @@ public class Combat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Collection<Card> toRemove = Lists.newArrayList();
|
|
||||||
for(Entry<AttackingBand, Card> be : blockedBands.entries()) {
|
for(Entry<AttackingBand, Card> be : blockedBands.entries()) {
|
||||||
Card blocker = be.getValue();
|
Card blocker = be.getValue();
|
||||||
if ( !blocker.isInPlay() || !blocker.isCreature() ) {
|
if ( !blocker.isInPlay() || !blocker.isCreature() ) {
|
||||||
missingCombatants.add(blocker);
|
missingCombatants.add(blocker);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Card c : missingCombatants)
|
for (Card c : missingCombatants) {
|
||||||
removeFromCombat(c);
|
removeFromCombat(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Call this method right after turn-based action of declare blockers has been performed
|
// Call this method right after turn-based action of declare blockers has been performed
|
||||||
public final void fireTriggersForUnblockedAttackers() {
|
public final void fireTriggersForUnblockedAttackers() {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import forge.screens.home.HomeScreen;
|
|||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
import forge.toolbox.FDisplayObject;
|
import forge.toolbox.FDisplayObject;
|
||||||
import forge.toolbox.FGestureAdapter;
|
import forge.toolbox.FGestureAdapter;
|
||||||
|
import forge.toolbox.FOverlay;
|
||||||
|
|
||||||
public class Forge implements ApplicationListener {
|
public class Forge implements ApplicationListener {
|
||||||
private static Forge game;
|
private static Forge game;
|
||||||
@@ -134,6 +135,10 @@ public class Forge implements ApplicationListener {
|
|||||||
batch.begin();
|
batch.begin();
|
||||||
Graphics g = new Graphics();
|
Graphics g = new Graphics();
|
||||||
screen.draw(g);
|
screen.draw(g);
|
||||||
|
for (FOverlay overlay : FOverlay.getOverlays()) {
|
||||||
|
overlay.setSize(screenWidth, screenHeight); //update overlay sizes as they're rendered
|
||||||
|
overlay.draw(g);
|
||||||
|
}
|
||||||
batch.end();
|
batch.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +165,11 @@ public class Forge implements ApplicationListener {
|
|||||||
@Override
|
@Override
|
||||||
public void dispose () {
|
public void dispose () {
|
||||||
if (currentScreen != null) {
|
if (currentScreen != null) {
|
||||||
|
FOverlay overlay = FOverlay.getTopOverlay();
|
||||||
|
while (overlay != null) {
|
||||||
|
overlay.hide();
|
||||||
|
overlay = FOverlay.getTopOverlay();
|
||||||
|
}
|
||||||
currentScreen.onClose(false);
|
currentScreen.onClose(false);
|
||||||
currentScreen = null;
|
currentScreen = null;
|
||||||
}
|
}
|
||||||
@@ -175,7 +185,13 @@ public class Forge implements ApplicationListener {
|
|||||||
public boolean touchDown(int x, int y, int pointer, int button) {
|
public boolean touchDown(int x, int y, int pointer, int button) {
|
||||||
potentialListeners.clear();
|
potentialListeners.clear();
|
||||||
if (currentScreen != null) { //base potential listeners on object containing touch down point
|
if (currentScreen != null) { //base potential listeners on object containing touch down point
|
||||||
currentScreen.buildTouchListeners(x, y, potentialListeners);
|
FOverlay overlay = FOverlay.getTopOverlay();
|
||||||
|
if (overlay != null) { //let top overlay handle gestures if any is open
|
||||||
|
overlay.buildTouchListeners(x, y, potentialListeners);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
currentScreen.buildTouchListeners(x, y, potentialListeners);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.touchDown(x, y, pointer, button);
|
return super.touchDown(x, y, pointer, button);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import forge.screens.match.views.VAssignDamage;
|
|||||||
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
||||||
import forge.screens.match.views.VPlayerPanel;
|
import forge.screens.match.views.VPlayerPanel;
|
||||||
import forge.toolbox.FCardPanel;
|
import forge.toolbox.FCardPanel;
|
||||||
|
import forge.toolbox.FCardZoom;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.utils.ForgePreferences.FPref;
|
import forge.utils.ForgePreferences.FPref;
|
||||||
|
|
||||||
@@ -229,10 +230,9 @@ public class FControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void showMessage(final String s0) {
|
public static void showMessage(final String s0) {
|
||||||
if (view.getCardZoom().isVisible() &&
|
if (FCardZoom.isOpen() && FCardZoom.getMessage().equals(view.getPrompt().getMessage())) {
|
||||||
view.getCardZoom().getPrompt().getMessage().equals(view.getPrompt().getMessage())) {
|
|
||||||
//update zoom view's prompt message if it's shared with main view's prompt's message
|
//update zoom view's prompt message if it's shared with main view's prompt's message
|
||||||
view.getCardZoom().getPrompt().setMessage(s0);
|
FCardZoom.setMessage(s0);
|
||||||
}
|
}
|
||||||
view.getPrompt().setMessage(s0);
|
view.getPrompt().setMessage(s0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import forge.game.zone.Zone;
|
|||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.net.FServer;
|
import forge.net.FServer;
|
||||||
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
||||||
|
import forge.screens.match.winlose.ViewWinLose;
|
||||||
import forge.toolbox.GuiChoose;
|
import forge.toolbox.GuiChoose;
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
import forge.util.maps.MapOfLists;
|
import forge.util.maps.MapOfLists;
|
||||||
@@ -136,8 +137,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
/*new ViewWinLose(FControl.getGame());
|
new ViewWinLose(FControl.getGame()).setVisible(true);
|
||||||
SOverlayUtils.showOverlay();*/
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import forge.screens.match.views.VAvatar;
|
|||||||
import forge.screens.match.views.VHeader;
|
import forge.screens.match.views.VHeader;
|
||||||
import forge.screens.match.views.VPlayerPanel;
|
import forge.screens.match.views.VPlayerPanel;
|
||||||
import forge.screens.match.views.VPrompt;
|
import forge.screens.match.views.VPrompt;
|
||||||
import forge.toolbox.VCardZoom;
|
|
||||||
import forge.Forge.Graphics;
|
import forge.Forge.Graphics;
|
||||||
import forge.assets.FSkinColor;
|
import forge.assets.FSkinColor;
|
||||||
import forge.assets.FSkinTexture;
|
import forge.assets.FSkinTexture;
|
||||||
@@ -24,7 +23,6 @@ public class MatchScreen extends FScreen {
|
|||||||
private final Map<Player, VPlayerPanel> playerPanels = new HashMap<Player, VPlayerPanel>();
|
private final Map<Player, VPlayerPanel> playerPanels = new HashMap<Player, VPlayerPanel>();
|
||||||
private final VHeader header;
|
private final VHeader header;
|
||||||
private final VPrompt prompt;
|
private final VPrompt prompt;
|
||||||
private final VCardZoom cardZoom;
|
|
||||||
|
|
||||||
private VPlayerPanel bottomPlayerPanel, topPlayerPanel;
|
private VPlayerPanel bottomPlayerPanel, topPlayerPanel;
|
||||||
|
|
||||||
@@ -54,8 +52,6 @@ public class MatchScreen extends FScreen {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
header = add(new VHeader(this)); //add header just before zoom so drop downs appear on top
|
header = add(new VHeader(this)); //add header just before zoom so drop downs appear on top
|
||||||
|
|
||||||
cardZoom = add(new VCardZoom());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlayers() {
|
public void updatePlayers() {
|
||||||
@@ -82,10 +78,6 @@ public class MatchScreen extends FScreen {
|
|||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
public VCardZoom getCardZoom() {
|
|
||||||
return cardZoom;
|
|
||||||
}
|
|
||||||
|
|
||||||
public VPlayerPanel getTopPlayerPanel() {
|
public VPlayerPanel getTopPlayerPanel() {
|
||||||
return topPlayerPanel;
|
return topPlayerPanel;
|
||||||
}
|
}
|
||||||
@@ -157,7 +149,6 @@ public class MatchScreen extends FScreen {
|
|||||||
topPlayerPanel.setBounds(0, startY, width, topPlayerPanelHeight);
|
topPlayerPanel.setBounds(0, startY, width, topPlayerPanelHeight);
|
||||||
bottomPlayerPanel.setBounds(0, height - VPrompt.HEIGHT - bottomPlayerPanelHeight, width, bottomPlayerPanelHeight);
|
bottomPlayerPanel.setBounds(0, height - VPrompt.HEIGHT - bottomPlayerPanelHeight, width, bottomPlayerPanelHeight);
|
||||||
prompt.setBounds(0, height - VPrompt.HEIGHT, width, VPrompt.HEIGHT);
|
prompt.setBounds(0, height - VPrompt.HEIGHT, width, VPrompt.HEIGHT);
|
||||||
cardZoom.setBounds(0, 0, width, height);
|
|
||||||
header.setDropDownHeight(topPlayerPanel.getBottom() - header.getHeight()); //make header drop downs go to bottom of top player panel
|
header.setDropDownHeight(topPlayerPanel.getBottom() - header.getHeight()); //make header drop downs go to bottom of top player panel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.screens.match.events.UiEventAttackerDeclared;
|
import forge.screens.match.events.UiEventAttackerDeclared;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom;
|
||||||
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -143,7 +144,7 @@ public class InputAttack extends InputSyncronizedBase {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
protected final void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
protected final void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
||||||
FControl.getView().getCardZoom().show(FControl.getView().getPrompt().getMessage(),
|
FCardZoom.show(FControl.getView().getPrompt().getMessage(),
|
||||||
card, orderedCardOptions, new ZoomController<Option>() {
|
card, orderedCardOptions, new ZoomController<Option>() {
|
||||||
@Override
|
@Override
|
||||||
public List<Option> getOptions(final Card card) {
|
public List<Option> getOptions(final Card card) {
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ import forge.game.phase.PhaseHandler;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom;
|
||||||
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -41,7 +42,7 @@ public abstract class InputBase implements java.io.Serializable, Input {
|
|||||||
private boolean finished = false;
|
private boolean finished = false;
|
||||||
protected final boolean isFinished() { return finished; }
|
protected final boolean isFinished() { return finished; }
|
||||||
protected final void setFinished() {
|
protected final void setFinished() {
|
||||||
FControl.getView().getCardZoom().hide(); //ensure zoom hidden when input finished
|
FCardZoom.hideZoom(); //ensure zoom hidden when input finished
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +84,7 @@ public abstract class InputBase implements java.io.Serializable, Input {
|
|||||||
|
|
||||||
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
||||||
//for base input, just show zoom view with no options
|
//for base input, just show zoom view with no options
|
||||||
FControl.getView().getCardZoom().show(FControl.getView().getPrompt().getMessage(),
|
FCardZoom.show(FControl.getView().getPrompt().getMessage(),
|
||||||
card, orderedCardOptions, new ZoomController<Object>() {
|
card, orderedCardOptions, new ZoomController<Object>() {
|
||||||
@Override
|
@Override
|
||||||
public List<Object> getOptions(Card card) {
|
public List<Object> getOptions(Card card) {
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.screens.match.events.UiEventBlockerAssigned;
|
import forge.screens.match.events.UiEventBlockerAssigned;
|
||||||
|
import forge.toolbox.FCardZoom;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -118,7 +119,7 @@ public class InputBlock extends InputSyncronizedBase {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
public final void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
||||||
FControl.getView().getCardZoom().show(FControl.getView().getPrompt().getMessage(),
|
FCardZoom.show(FControl.getView().getPrompt().getMessage(),
|
||||||
card, orderedCardOptions, new ZoomController<Option>() {
|
card, orderedCardOptions, new ZoomController<Option>() {
|
||||||
@Override
|
@Override
|
||||||
public List<Option> getOptions(final Card card) {
|
public List<Option> getOptions(final Card card) {
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ import forge.game.card.Card;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
|
import forge.toolbox.FCardZoom;
|
||||||
import forge.toolbox.GuiDialog;
|
import forge.toolbox.GuiDialog;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
import forge.util.ThreadUtil;
|
import forge.util.ThreadUtil;
|
||||||
|
|
||||||
@@ -114,7 +115,7 @@ public class InputConfirmMulligan extends InputSyncronizedBase {
|
|||||||
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) { // the only place that would cause troubles - input is supposed only to confirm, not to fire abilities
|
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) { // the only place that would cause troubles - input is supposed only to confirm, not to fire abilities
|
||||||
if (cardSelectLocked) { return; }
|
if (cardSelectLocked) { return; }
|
||||||
|
|
||||||
FControl.getView().getCardZoom().show(FControl.getView().getPrompt().getMessage(),
|
FCardZoom.show(FControl.getView().getPrompt().getMessage(),
|
||||||
card, orderedCardOptions, new ZoomController<String>() {
|
card, orderedCardOptions, new ZoomController<String>() {
|
||||||
@Override
|
@Override
|
||||||
public List<String> getOptions(final Card card) {
|
public List<String> getOptions(final Card card) {
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ package forge.screens.match.input;
|
|||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.screens.match.FControl;
|
import forge.toolbox.FCardZoom;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ public class InputPassPriority extends InputSyncronizedBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
protected void onCardSelected(final Card card, final List<Card> orderedCardOptions) {
|
||||||
FControl.getView().getCardZoom().show("Select a spell/ability", card, orderedCardOptions, new ZoomController<SpellAbility>() {
|
FCardZoom.show("Select a spell/ability", card, orderedCardOptions, new ZoomController<SpellAbility>() {
|
||||||
@Override
|
@Override
|
||||||
public List<SpellAbility> getOptions(final Card card) {
|
public List<SpellAbility> getOptions(final Card card) {
|
||||||
return card.getAllPossibleAbilities(player, true);
|
return card.getAllPossibleAbilities(player, true);
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ import forge.game.spellability.AbilityManaPart;
|
|||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.player.HumanPlay;
|
import forge.player.HumanPlay;
|
||||||
import forge.screens.match.FControl;
|
import forge.screens.match.FControl;
|
||||||
import forge.toolbox.VCardZoom.ZoomController;
|
import forge.toolbox.FCardZoom;
|
||||||
|
import forge.toolbox.FCardZoom.ZoomController;
|
||||||
import forge.utils.Evaluator;
|
import forge.utils.Evaluator;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -54,7 +55,7 @@ public abstract class InputPayMana extends InputSyncronizedBase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FControl.getView().getCardZoom().show(FControl.getView().getPrompt().getMessage(),
|
FCardZoom.show(FControl.getView().getPrompt().getMessage(),
|
||||||
card, orderedCardOptions, new ZoomController<SpellAbility>() {
|
card, orderedCardOptions, new ZoomController<SpellAbility>() {
|
||||||
private byte colorCanUse, colorNeeded;
|
private byte colorCanUse, colorNeeded;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package forge.screens.match.winlose;
|
package forge.screens.match.winlose;
|
||||||
|
|
||||||
import forge.Forge;
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
@@ -73,7 +72,6 @@ public class ControlWinLose {
|
|||||||
// Reset other stuff
|
// Reset other stuff
|
||||||
saveOptions();
|
saveOptions();
|
||||||
FControl.endCurrentGame();
|
FControl.endCurrentGame();
|
||||||
Forge.back();
|
|
||||||
view.hide();
|
view.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,65 @@ import forge.game.card.Card;
|
|||||||
import forge.screens.match.views.VPrompt;
|
import forge.screens.match.views.VPrompt;
|
||||||
import forge.toolbox.FList.ListItemRenderer;
|
import forge.toolbox.FList.ListItemRenderer;
|
||||||
|
|
||||||
public class VCardZoom extends FOverlay {
|
public class FCardZoom extends FOverlay {
|
||||||
private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_THEME).alphaColor(0.9f);
|
private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_THEME).alphaColor(0.9f);
|
||||||
private static final float LIST_OPTION_HEIGHT = VPrompt.HEIGHT;
|
private static final float LIST_OPTION_HEIGHT = VPrompt.HEIGHT;
|
||||||
private static final float CARD_DETAILS_HEIGHT = VPrompt.HEIGHT * 2f;
|
private static final float CARD_DETAILS_HEIGHT = VPrompt.HEIGHT * 2f;
|
||||||
|
private static final FCardZoom cardZoom = new FCardZoom();
|
||||||
|
|
||||||
|
public static abstract class ZoomController<T> {
|
||||||
|
public abstract List<T> getOptions(final Card card);
|
||||||
|
public abstract boolean selectOption(final Card card, final T option);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> void show(String message0, final Card card0, final List<Card> orderedCards0, ZoomController<?> controller0) {
|
||||||
|
if (cardZoom.isVisible()) { return; } //don't support showing if already shown
|
||||||
|
|
||||||
|
if (orderedCards0.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cardZoom.prompt.setMessage(message0);
|
||||||
|
cardZoom.orderedCards = orderedCards0;
|
||||||
|
cardZoom.controller = controller0;
|
||||||
|
|
||||||
|
int index = orderedCards0.indexOf(card0);
|
||||||
|
if (index == -1) {
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
cardZoom.setSelectedIndex(index);
|
||||||
|
|
||||||
|
if (showTask.isScheduled()) { //select first option without showing zoom if called a second time in quick succession
|
||||||
|
showTask.cancel();
|
||||||
|
cardZoom.selectFirstOption();
|
||||||
|
}
|
||||||
|
else { //delay showing briefly to give time for a double-tap to auto-select the first ability
|
||||||
|
Timer.schedule(showTask, FGestureAdapter.DOUBLE_TAP_INTERVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Task showTask = new Task() {
|
||||||
|
@Override
|
||||||
|
public void run () {
|
||||||
|
cardZoom.show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static boolean isOpen() {
|
||||||
|
return cardZoom.isVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getMessage() {
|
||||||
|
return cardZoom.getPrompt().getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setMessage(String message0) {
|
||||||
|
cardZoom.getPrompt().setMessage(message0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void hideZoom() {
|
||||||
|
cardZoom.hide();
|
||||||
|
}
|
||||||
|
|
||||||
private final CardSlider slider;
|
private final CardSlider slider;
|
||||||
private final FList<Object> optionList;
|
private final FList<Object> optionList;
|
||||||
@@ -29,7 +84,7 @@ public class VCardZoom extends FOverlay {
|
|||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private ZoomController controller;
|
private ZoomController controller;
|
||||||
|
|
||||||
public VCardZoom() {
|
private FCardZoom() {
|
||||||
slider = add(new CardSlider());
|
slider = add(new CardSlider());
|
||||||
optionList = add(new FList<Object>() {
|
optionList = add(new FList<Object>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -81,42 +136,7 @@ public class VCardZoom extends FOverlay {
|
|||||||
prompt.getBtnCancel().setEnabled(false);
|
prompt.getBtnCancel().setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static abstract class ZoomController<T> {
|
@Override
|
||||||
public abstract List<T> getOptions(final Card card);
|
|
||||||
public abstract boolean selectOption(final Card card, final T option);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T> void show(String message0, final Card card0, final List<Card> orderedCards0, ZoomController<?> controller0) {
|
|
||||||
if (orderedCards0.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prompt.setMessage(message0);
|
|
||||||
orderedCards = orderedCards0;
|
|
||||||
controller = controller0;
|
|
||||||
|
|
||||||
int index = orderedCards.indexOf(card0);
|
|
||||||
if (index == -1) {
|
|
||||||
index = 0;
|
|
||||||
}
|
|
||||||
setSelectedIndex(index);
|
|
||||||
|
|
||||||
if (showTask.isScheduled()) { //select first option without showing zoom if called a second time in quick succession
|
|
||||||
showTask.cancel();
|
|
||||||
selectFirstOption();
|
|
||||||
}
|
|
||||||
else { //delay showing briefly to give time for a double-tap to auto-select the first ability
|
|
||||||
Timer.schedule(showTask, FGestureAdapter.DOUBLE_TAP_INTERVAL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Task showTask = new Task() {
|
|
||||||
@Override
|
|
||||||
public void run () {
|
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public void hide() {
|
public void hide() {
|
||||||
if (isVisible()) {
|
if (isVisible()) {
|
||||||
orderedCards = null; //reset fields when hidden
|
orderedCards = null; //reset fields when hidden
|
||||||
@@ -127,7 +147,7 @@ public class VCardZoom extends FOverlay {
|
|||||||
prompt.setMessage(null);
|
prompt.setMessage(null);
|
||||||
prompt.getBtnCancel().setText("More");
|
prompt.getBtnCancel().setText("More");
|
||||||
prompt.getBtnCancel().setEnabled(false);
|
prompt.getBtnCancel().setEnabled(false);
|
||||||
setVisible(false);
|
super.hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9,13 +9,24 @@ import forge.assets.FSkinColor;
|
|||||||
import forge.assets.FSkinColor.Colors;
|
import forge.assets.FSkinColor.Colors;
|
||||||
|
|
||||||
public abstract class FOverlay extends FContainer {
|
public abstract class FOverlay extends FContainer {
|
||||||
private static final FSkinColor BACK_COLOR = FSkinColor.get(Colors.CLR_OVERLAY).alphaColor(0.5f);
|
private static FSkinColor BACK_COLOR;
|
||||||
private static final Stack<FOverlay> overlays = new Stack<FOverlay>();
|
private static final Stack<FOverlay> overlays = new Stack<FOverlay>();
|
||||||
|
|
||||||
public FOverlay() {
|
public FOverlay() {
|
||||||
super.setVisible(false); //hide by default
|
super.setVisible(false); //hide by default
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FOverlay getTopOverlay() {
|
||||||
|
if (overlays.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return overlays.peek();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Iterable<FOverlay> getOverlays() {
|
||||||
|
return overlays;
|
||||||
|
}
|
||||||
|
|
||||||
public void show() {
|
public void show() {
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
@@ -29,6 +40,9 @@ public abstract class FOverlay extends FContainer {
|
|||||||
if (this.isVisible() == visible0) { return; }
|
if (this.isVisible() == visible0) { return; }
|
||||||
|
|
||||||
if (visible0) {
|
if (visible0) {
|
||||||
|
if (BACK_COLOR == null) { //wait to initialize back color until first overlay shown
|
||||||
|
BACK_COLOR = FSkinColor.get(Colors.CLR_OVERLAY).alphaColor(0.5f);
|
||||||
|
}
|
||||||
overlays.push(this);
|
overlays.push(this);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user