Auto-pause playback if mouse down anywhere above prompt or if device pauses game

This commit is contained in:
drdev
2014-05-27 00:21:16 +00:00
parent 1f4c5ef2e8
commit 0bdf7e83f1
4 changed files with 48 additions and 20 deletions

View File

@@ -33,6 +33,7 @@ import forge.model.FModel;
import forge.screens.FScreen; import forge.screens.FScreen;
import forge.screens.SplashScreen; import forge.screens.SplashScreen;
import forge.screens.home.HomeScreen; import forge.screens.home.HomeScreen;
import forge.screens.match.FControl;
import forge.toolbox.FContainer; import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FGestureAdapter; import forge.toolbox.FGestureAdapter;
@@ -202,6 +203,7 @@ public class Forge implements ApplicationListener {
@Override @Override
public void pause() { public void pause() {
FControl.pause();
} }
@Override @Override

View File

@@ -22,6 +22,7 @@ import com.google.common.eventbus.Subscribe;
import forge.Forge; import forge.Forge;
import forge.GuiBase; import forge.GuiBase;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.Forge.Graphics;
import forge.ai.AiProfileUtil; import forge.ai.AiProfileUtil;
import forge.ai.LobbyPlayerAi; import forge.ai.LobbyPlayerAi;
import forge.card.CardCharacteristicName; import forge.card.CardCharacteristicName;
@@ -49,6 +50,7 @@ import forge.game.player.RegisteredPlayer;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import forge.game.zone.Zone; import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.match.input.InputPlaybackControl;
import forge.match.input.InputProxy; import forge.match.input.InputProxy;
import forge.match.input.InputQueue; import forge.match.input.InputQueue;
import forge.model.FModel; import forge.model.FModel;
@@ -57,11 +59,13 @@ import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.QuestController; import forge.quest.QuestController;
import forge.screens.match.views.VAssignDamage; import forge.screens.match.views.VAssignDamage;
import forge.screens.match.views.VPrompt;
import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel;
import forge.screens.match.views.VPhaseIndicator; import forge.screens.match.views.VPhaseIndicator;
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.FDisplayObject;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.util.Callback; import forge.util.Callback;
import forge.util.GuiDisplayUtil; import forge.util.GuiDisplayUtil;
@@ -148,6 +152,21 @@ public class FControl {
} }
if (!gameHasHumanPlayer) { if (!gameHasHumanPlayer) {
game.subscribeToEvents(playbackControl); 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<FDisplayObject> listeners) {
if (screenY < view.getHeight() - VPrompt.HEIGHT) {
pause();
}
}
});
} }
Forge.openScreen(view); Forge.openScreen(view);
@@ -479,6 +498,13 @@ public class FControl {
game = null; 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; private final static boolean LOG_UIEVENTS = false;
// UI-related events should arrive here // UI-related events should arrive here

View File

@@ -6,7 +6,6 @@ import forge.FThreads;
import forge.GuiBase; import forge.GuiBase;
import forge.game.event.*; import forge.game.event.*;
import forge.match.input.InputPlaybackControl; import forge.match.input.InputPlaybackControl;
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier; import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@@ -173,5 +172,4 @@ public class FControlGamePlayback extends IGameEventVisitor.Base<Void> {
public void setSpeed(boolean isFast) { public void setSpeed(boolean isFast) {
fasterPlayback = isFast; fasterPlayback = isFast;
} }
} }

View File

@@ -12,10 +12,6 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
private boolean isPaused = false; private boolean isPaused = false;
private boolean isFast = false; private boolean isFast = false;
/**
* TODO: Write javadoc for Constructor.
* @param fControlGamePlayback
*/
public InputPlaybackControl(FControlGamePlayback fControlGamePlayback) { public InputPlaybackControl(FControlGamePlayback fControlGamePlayback) {
control = fControlGamePlayback; control = fControlGamePlayback;
} }
@@ -31,8 +27,9 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
private void setPause(boolean pause) { private void setPause(boolean pause) {
isPaused = pause; isPaused = pause;
if ( isPaused ) if (isPaused) {
ButtonUtil.setButtonText("Resume", "Step"); ButtonUtil.setButtonText("Resume", "Step");
}
else { else {
ButtonUtil.setButtonText("Pause", isFast ? "1x Speed" : "10x Faster"); ButtonUtil.setButtonText("Pause", isFast ? "1x Speed" : "10x Faster");
showMessage("Press pause to pause game."); showMessage("Press pause to pause game.");
@@ -43,28 +40,33 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
showMessage(getTurnPhasePriorityMessage(GuiBase.getInterface().getGame())); showMessage(getTurnPhasePriorityMessage(GuiBase.getInterface().getGame()));
} }
public void pause() {
if (isPaused) { return; }
control.pause();
setPause(true);
}
@Override @Override
protected void onOk() { protected void onOk() {
if (isPaused) { if (isPaused) {
control.resume(); control.resume();
setPause(false); setPause(false);
} else { }
else {
control.pause(); control.pause();
setPause(true); setPause(true);
} }
} }
@Override @Override
protected void onCancel() { protected void onCancel() {
if (isPaused) { if (isPaused) {
control.singleStep(); control.singleStep();
} else { }
else {
isFast = !isFast; isFast = !isFast;
control.setSpeed(isFast); control.setSpeed(isFast);
setPause(isPaused); // update message setPause(isPaused); // update message
} }
} }
} }