From 3bf4c330447fae3d58daaca23075d34e6cd3e2ec Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 2 Oct 2021 13:56:40 +0800 Subject: [PATCH 1/2] Fix local Multiplayer Phase Indicator --- forge-game/src/main/java/forge/game/GameView.java | 9 +++++++++ .../java/forge/trackable/TrackableProperty.java | 1 + .../src/forge/screens/match/MatchController.java | 14 -------------- .../src/forge/screens/match/MatchScreen.java | 15 +++++++++++++++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameView.java b/forge-game/src/main/java/forge/game/GameView.java index b845bce1d31..91239f090ef 100644 --- a/forge-game/src/main/java/forge/game/GameView.java +++ b/forge-game/src/main/java/forge/game/GameView.java @@ -89,6 +89,15 @@ public class GameView extends TrackableObject { } void updatePhase(PhaseHandler phaseHandler) { set(TrackableProperty.Phase, phaseHandler.getPhase()); + set(TrackableProperty.PhaseLabelUpdate, true); + } + public boolean getPhaseLabelUpdate() { + if (get(TrackableProperty.PhaseLabelUpdate) == null) + return false; + return get(TrackableProperty.PhaseLabelUpdate); + } + public void clearPhaseLabelUpdate() { + set(TrackableProperty.PhaseLabelUpdate, false); } public PlayerView getPlayerTurn() { return get(TrackableProperty.PlayerTurn); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 779654e7a55..34618f94b8d 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -254,6 +254,7 @@ public enum TrackableProperty { GameOver(TrackableTypes.BooleanType), PoisonCountersToLose(TrackableTypes.IntegerType), GameLog(TrackableTypes.StringType), + PhaseLabelUpdate(TrackableTypes.BooleanType), PlayerTurn(TrackableTypes.PlayerViewType), Phase(TrackableTypes.EnumType(PhaseType.class)); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 9c51f21bf82..9a8641f7898 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -51,7 +51,6 @@ import forge.player.PlayerZoneUpdates; import forge.screens.match.views.VAssignCombatDamage; import forge.screens.match.views.VAssignGenericAmount; import forge.screens.match.views.VPhaseIndicator; -import forge.screens.match.views.VPhaseIndicator.PhaseLabel; import forge.screens.match.views.VPlayerPanel; import forge.screens.match.views.VPlayerPanel.InfoTab; import forge.screens.match.views.VPrompt; @@ -213,21 +212,8 @@ public class MatchController extends AbstractGuiGame { @Override public void updatePhase(boolean saveState) { - final PlayerView p = getGameView().getPlayerTurn(); final PhaseType ph = getGameView().getPhase(); - PhaseLabel lbl = null; - - if(ph!=null) { - lbl = p == null ? null : view.getPlayerPanel(p).getPhaseIndicator().getLabel(ph); - } else { - System.err.println("getGameView().getPhase() returned 'null'"); - } - - view.resetAllPhaseButtons(); - if (lbl != null) { - lbl.setActive(true); - } if(GuiBase.isNetworkplay()) checkStack(); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index e675e947f3d..d2d1a09a95c 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -358,6 +358,21 @@ public class MatchScreen extends FScreen { final GameView game = MatchController.instance.getGameView(); if (game == null) { return; } + //updatePhase to make it work with local MultiPlayer + if (game.getPhaseLabelUpdate()) { + PlayerView currentPlayer = game.getPlayerTurn(); + PhaseType phaseType = game.getPhase(); + //reset + game.clearPhaseLabelUpdate(); + resetAllPhaseButtons(); + //set phaselabel + try { + getPlayerPanel(currentPlayer).getPhaseIndicator().getLabel(phaseType).setActive(true); + } catch (Exception e) { + //FIXME: it seems getting the phase or label causes NPE particularly after End of Turn, don't know why... + } + } + if(gameMenu!=null) { if(gameMenu.getChildCount()>3){ if(viewWinLose == null) { From 64c7e5b5cbc0623430b8f1cac1d462c330a8db04 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sun, 3 Oct 2021 11:32:48 +0800 Subject: [PATCH 2/2] update empty stack not hidden on local multiplayer --- .../src/main/java/forge/game/GameView.java | 9 ------ .../forge/trackable/TrackableProperty.java | 1 - .../src/forge/screens/match/MatchScreen.java | 29 +++++++------------ .../src/forge/screens/match/views/VStack.java | 7 +++-- 4 files changed, 14 insertions(+), 32 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameView.java b/forge-game/src/main/java/forge/game/GameView.java index 91239f090ef..b845bce1d31 100644 --- a/forge-game/src/main/java/forge/game/GameView.java +++ b/forge-game/src/main/java/forge/game/GameView.java @@ -89,15 +89,6 @@ public class GameView extends TrackableObject { } void updatePhase(PhaseHandler phaseHandler) { set(TrackableProperty.Phase, phaseHandler.getPhase()); - set(TrackableProperty.PhaseLabelUpdate, true); - } - public boolean getPhaseLabelUpdate() { - if (get(TrackableProperty.PhaseLabelUpdate) == null) - return false; - return get(TrackableProperty.PhaseLabelUpdate); - } - public void clearPhaseLabelUpdate() { - set(TrackableProperty.PhaseLabelUpdate, false); } public PlayerView getPlayerTurn() { return get(TrackableProperty.PlayerTurn); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 34618f94b8d..779654e7a55 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -254,7 +254,6 @@ public enum TrackableProperty { GameOver(TrackableTypes.BooleanType), PoisonCountersToLose(TrackableTypes.IntegerType), GameLog(TrackableTypes.StringType), - PhaseLabelUpdate(TrackableTypes.BooleanType), PlayerTurn(TrackableTypes.PlayerViewType), Phase(TrackableTypes.EnumType(PhaseType.class)); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index d2d1a09a95c..a7bf4029898 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -1,11 +1,7 @@ package forge.screens.match; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.Set; import forge.animation.ForgeAnimation; import forge.assets.FImage; @@ -358,19 +354,13 @@ public class MatchScreen extends FScreen { final GameView game = MatchController.instance.getGameView(); if (game == null) { return; } - //updatePhase to make it work with local MultiPlayer - if (game.getPhaseLabelUpdate()) { - PlayerView currentPlayer = game.getPlayerTurn(); - PhaseType phaseType = game.getPhase(); - //reset - game.clearPhaseLabelUpdate(); + if (game.getPlayerTurn() != null && game.getPhase() != null) { + //reset phase labels resetAllPhaseButtons(); //set phaselabel - try { - getPlayerPanel(currentPlayer).getPhaseIndicator().getLabel(phaseType).setActive(true); - } catch (Exception e) { - //FIXME: it seems getting the phase or label causes NPE particularly after End of Turn, don't know why... - } + final PhaseLabel phaseLabel = getPlayerPanel(game.getPlayerTurn()).getPhaseIndicator().getLabel(game.getPhase()); + if (phaseLabel != null) + phaseLabel.setActive(true); } if(gameMenu!=null) { @@ -410,9 +400,10 @@ public class MatchScreen extends FScreen { for (CardView card : playerPanel.getField().getRow1().getOrderedCards()) { if (pairedCards.contains(card)) { continue; } //prevent arrows going both ways - CardView paired = card.getPairedWith(); - if (paired != null) { - TargetingOverlay.drawArrow(g, card, paired); + if (card != null) { + if (card.getPairedWith() != null) { + TargetingOverlay.drawArrow(g, card, card.getPairedWith()); + } } } } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 295a9093635..c06f2aad178 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -97,11 +97,12 @@ public class VStack extends FDropDown { public void checkEmptyStack() { //sort the bug in client when desynch happens final FCollectionView stack = MatchController.instance.getGameView().getStack(); - if(stack!=null) - if(isVisible() && stack.isEmpty()) { //visible stack but empty already - hide(); + if(stack!=null) { + if (isVisible() && stack.isEmpty()) { //visible stack but empty already getMenuTab().setText(Localizer.getInstance().getMessage("lblStack") + " (" + 0 + ")"); + MatchController.getView().getStack().hide(); } + } } @Override