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.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

View File

@@ -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<FDisplayObject> 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

View File

@@ -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<Void> {
public void setSpeed(boolean isFast) {
fasterPlayback = isFast;
}
}

View File

@@ -12,10 +12,6 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
private boolean isPaused = false;
private boolean isFast = false;
/**
* TODO: Write javadoc for Constructor.
* @param fControlGamePlayback
*/
public InputPlaybackControl(FControlGamePlayback fControlGamePlayback) {
control = fControlGamePlayback;
}
@@ -31,8 +27,9 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
private void setPause(boolean pause) {
isPaused = pause;
if ( isPaused )
if (isPaused) {
ButtonUtil.setButtonText("Resume", "Step");
}
else {
ButtonUtil.setButtonText("Pause", isFast ? "1x Speed" : "10x Faster");
showMessage("Press pause to pause game.");
@@ -43,28 +40,33 @@ public class InputPlaybackControl extends InputSyncronizedBase implements InputS
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
}
}
}