Support showing prompt for second human player

This commit is contained in:
drdev
2014-09-23 13:38:39 +00:00
parent b7ceefc8c4
commit efefedd445
29 changed files with 260 additions and 172 deletions

View File

@@ -36,7 +36,6 @@ import forge.game.zone.ZoneType;
import forge.interfaces.IButton;
import forge.interfaces.IGuiBase;
import forge.item.PaperCard;
import forge.match.input.InputQueue;
import forge.properties.ForgeConstants;
import forge.screens.match.FControl;
import forge.screens.match.views.VPlayerPanel;
@@ -238,13 +237,18 @@ public class GuiMobile implements IGuiBase {
}
@Override
public IButton getBtnOK() {
return FControl.getView().getActivePrompt().getBtnOk();
public IButton getBtnOK(PlayerView player) {
return FControl.getView().getPrompt(player).getBtnOk();
}
@Override
public IButton getBtnCancel() {
return FControl.getView().getActivePrompt().getBtnCancel();
public IButton getBtnCancel(PlayerView player) {
return FControl.getView().getPrompt(player).getBtnCancel();
}
@Override
public void showPromptMessage(final PlayerView player, String message) {
FControl.getView().getPrompt(player).setMessage(message);
}
@Override
@@ -358,21 +362,11 @@ public class GuiMobile implements IGuiBase {
FControl.setHighlighted(player, b);
}
@Override
public void showPromptMessage(String message) {
FControl.showMessage(message);
}
@Override
public boolean stopAtPhase(final PlayerView playerTurn, final PhaseType phase) {
return FControl.stopAtPhase(playerTurn, phase);
}
@Override
public InputQueue getInputQueue() {
return FControl.getInputQueue();
}
@Override
public Object showManaPool(final PlayerView player) {
VPlayerPanel playerPanel = FControl.getPlayerPanel(player);

View File

@@ -48,6 +48,7 @@ import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType;
import forge.match.input.InputPlaybackControl;
import forge.match.input.InputQueue;
import forge.match.input.InputSynchronized;
import forge.model.FModel;
import forge.player.GamePlayerUtil;
import forge.player.PlayerControllerHuman;
@@ -175,15 +176,16 @@ public class FControl {
if (p.getController() instanceof PlayerControllerHuman) {
final PlayerControllerHuman controller = (PlayerControllerHuman) p.getController();
LocalGameView gameView = controller.getGameView();
game.subscribeToEvents(new FControlGameEventHandler(GuiBase.getInterface(), gameView));
game.subscribeToEvents(new FControlGameEventHandler(gameView));
gameViews.add(gameView);
humanCount++;
}
}
if (humanCount == 0) { //watch game but do not participate
LocalGameView gameView = new WatchLocalGame(game, GuiBase.getInterface());
game.subscribeToEvents(new FControlGameEventHandler(GuiBase.getInterface(), gameView));
LocalGameView gameView = new WatchLocalGame(GuiBase.getInterface(), game);
gameView.setLocalPlayer(sortedPlayers.get(0));
game.subscribeToEvents(new FControlGameEventHandler(gameView));
gameViews.add(gameView);
}
else if (humanCount == sortedPlayers.size()) {
@@ -281,13 +283,6 @@ public class FControl {
}
}
public static void showMessage(final String s0) {
view.getActivePrompt().setMessage(s0);
}
public static void showMessage(final PlayerView playerView, final String s0) {
view.getPrompt(playerView).setMessage(s0);
}
public static VPlayerPanel getPlayerPanel(final PlayerView playerView) {
return view.getPlayerPanels().get(playerView);
}
@@ -314,19 +309,20 @@ public class FControl {
public static Player getCurrentPlayer() {
if (game == null) { return null; }
// try current priority
Player currentPriority = game.getPhaseHandler().getPriorityPlayer();
if (null != currentPriority && currentPriority.getLobbyPlayer() == getGuiPlayer()) {
return currentPriority;
}
// otherwise find just any player, belonging to this lobbyplayer
for (Player p : game.getPlayers()) {
if (p.getLobbyPlayer() == getGuiPlayer()) {
return p;
LobbyPlayer lobbyPlayer = getGuiPlayer();
if (gameViews.size() > 1) {
//account for if second human player is currently being prompted
InputSynchronized activeInput = InputQueue.getActiveInput();
if (activeInput != null) {
lobbyPlayer = activeInput.getOwner().getLobbyPlayer();
}
}
for (Player p : game.getPlayers()) {
if (p.getLobbyPlayer() == lobbyPlayer) {
return p;
}
}
return null;
}