diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 8bfca4ecd7a..20e85624093 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -33,6 +33,7 @@ import forge.model.FModel; import forge.screens.FScreen; import forge.screens.SplashScreen; import forge.screens.home.HomeScreen; +import forge.screens.match.FControl; import forge.toolbox.FContainer; import forge.toolbox.FDisplayObject; import forge.toolbox.FGestureAdapter; @@ -202,6 +203,7 @@ public class Forge implements ApplicationListener { @Override public void pause() { + FControl.pause(); } @Override diff --git a/forge-gui-mobile/src/forge/screens/match/FControl.java b/forge-gui-mobile/src/forge/screens/match/FControl.java index fa22fe05f0b..33ad19b180e 100644 --- a/forge-gui-mobile/src/forge/screens/match/FControl.java +++ b/forge-gui-mobile/src/forge/screens/match/FControl.java @@ -22,6 +22,7 @@ import com.google.common.eventbus.Subscribe; import forge.Forge; import forge.GuiBase; import forge.LobbyPlayer; +import forge.Forge.Graphics; import forge.ai.AiProfileUtil; import forge.ai.LobbyPlayerAi; import forge.card.CardCharacteristicName; @@ -49,6 +50,7 @@ import forge.game.player.RegisteredPlayer; import forge.game.trigger.TriggerType; import forge.game.zone.Zone; import forge.game.zone.ZoneType; +import forge.match.input.InputPlaybackControl; import forge.match.input.InputProxy; import forge.match.input.InputQueue; import forge.model.FModel; @@ -57,11 +59,13 @@ import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.quest.QuestController; import forge.screens.match.views.VAssignDamage; +import forge.screens.match.views.VPrompt; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.screens.match.views.VPhaseIndicator; import forge.screens.match.views.VPhaseIndicator.PhaseLabel; import forge.screens.match.views.VPlayerPanel; import forge.toolbox.FCardPanel; +import forge.toolbox.FDisplayObject; import forge.toolbox.FOptionPane; import forge.util.Callback; import forge.util.GuiDisplayUtil; @@ -148,6 +152,21 @@ public class FControl { } if (!gameHasHumanPlayer) { game.subscribeToEvents(playbackControl); + + //add special object that pauses game if screen touched + view.add(new FDisplayObject() { + @Override + public void draw(Graphics g) { + //don't draw anything + } + + @Override + public void buildTouchListeners(float screenX, float screenY, ArrayList listeners) { + if (screenY < view.getHeight() - VPrompt.HEIGHT) { + pause(); + } + } + }); } Forge.openScreen(view); @@ -479,6 +498,13 @@ public class FControl { game = null; } + public static void pause() { + //pause playback if needed + if (inputQueue != null && inputQueue.getInput() instanceof InputPlaybackControl) { + ((InputPlaybackControl)inputQueue.getInput()).pause(); + } + } + private final static boolean LOG_UIEVENTS = false; // UI-related events should arrive here diff --git a/forge-gui/src/main/java/forge/control/FControlGamePlayback.java b/forge-gui/src/main/java/forge/control/FControlGamePlayback.java index 7228cc966e4..31a292da416 100644 --- a/forge-gui/src/main/java/forge/control/FControlGamePlayback.java +++ b/forge-gui/src/main/java/forge/control/FControlGamePlayback.java @@ -6,7 +6,6 @@ import forge.FThreads; import forge.GuiBase; import forge.game.event.*; import forge.match.input.InputPlaybackControl; - import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicBoolean; @@ -173,5 +172,4 @@ public class FControlGamePlayback extends IGameEventVisitor.Base { public void setSpeed(boolean isFast) { fasterPlayback = isFast; } - } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/match/input/InputPlaybackControl.java b/forge-gui/src/main/java/forge/match/input/InputPlaybackControl.java index 4e117c12fec..55fd57784dd 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPlaybackControl.java +++ b/forge-gui/src/main/java/forge/match/input/InputPlaybackControl.java @@ -8,14 +8,10 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS private static final long serialVersionUID = 7979208993306642072L; FControlGamePlayback control; - + private boolean isPaused = false; private boolean isFast = false; - - /** - * TODO: Write javadoc for Constructor. - * @param fControlGamePlayback - */ + public InputPlaybackControl(FControlGamePlayback fControlGamePlayback) { control = fControlGamePlayback; } @@ -28,43 +24,49 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS setPause(false); ButtonUtil.enableAllFocusOk(); } - + private void setPause(boolean pause) { isPaused = pause; - if ( isPaused ) + if (isPaused) { ButtonUtil.setButtonText("Resume", "Step"); - else { + } + else { ButtonUtil.setButtonText("Pause", isFast ? "1x Speed" : "10x Faster"); showMessage("Press pause to pause game."); } } - + public void onGamePaused() { showMessage(getTurnPhasePriorityMessage(GuiBase.getInterface().getGame())); } - + + public void pause() { + if (isPaused) { return; } + control.pause(); + setPause(true); + } + @Override protected void onOk() { - if ( isPaused ) { + if (isPaused) { control.resume(); setPause(false); - } else { + } + else { control.pause(); setPause(true); } } - @Override protected void onCancel() { - if ( isPaused ) { + if (isPaused) { control.singleStep(); - } else { + } + else { isFast = !isFast; control.setSpeed(isFast); setPause(isPaused); // update message } - } - }