From 7a28295585a72599946cd4c863e0134ed259c5e4 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 11 Sep 2019 21:30:22 +0800 Subject: [PATCH 1/5] Draw Priority for Multiplayer game (Human 2 players) --- .../java/forge/game/phase/PhaseHandler.java | 8 ++++++ .../main/java/forge/game/player/Player.java | 6 +++++ .../java/forge/game/player/PlayerView.java | 7 +++++ .../forge/trackable/TrackableProperty.java | 1 + forge-gui-mobile/src/forge/Graphics.java | 1 + .../src/forge/screens/match/MatchScreen.java | 26 +++++++++++++++++++ 6 files changed, 49 insertions(+) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index dde7fd43cc0..84130bd2344 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1073,6 +1073,14 @@ public class PhaseHandler implements java.io.Serializable { game.fireEvent(new GameEventGameRestarted(playerTurn)); return; } + + // update Priority for all players + for (final Player p : game.getPlayers()) { + if(getPriorityPlayer() == p) + p.setHasPriority(true); + else + p.setHasPriority(false); + } } } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 2d826253bfb..06419e8b2a8 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2672,6 +2672,12 @@ public class Player extends GameEntity implements Comparable { public void setExtraTurnCount(final int val) { view.setExtraTurnCount(val); } + public void setHasPriority(final boolean val) { + view.setHasPriority(val); + } + public boolean isAI() { + return view.isAI(); + } public void initVariantsZones(RegisteredPlayer registeredPlayer) { PlayerZone bf = getZone(ZoneType.Battlefield); diff --git a/forge-game/src/main/java/forge/game/player/PlayerView.java b/forge-game/src/main/java/forge/game/player/PlayerView.java index ec65996b87c..28dfb54c0e3 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -205,6 +205,13 @@ public class PlayerView extends GameEntityView { set(TrackableProperty.ExtraTurnCount, val); } + public boolean getHasPriority() { + return get(TrackableProperty.HasPriority); + } + public void setHasPriority(final boolean val) { + set(TrackableProperty.HasPriority, val); + } + public int getMaxHandSize() { return get(TrackableProperty.MaxHandSize); } diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 1f446791f85..2275f87a4d4 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -120,6 +120,7 @@ public enum TrackableProperty { Mana(TrackableTypes.ManaMapType, FreezeMode.IgnoresFreeze), IsExtraTurn(TrackableTypes.BooleanType), ExtraTurnCount(TrackableTypes.IntegerType), + HasPriority(TrackableTypes.BooleanType), //SpellAbility HostCard(TrackableTypes.CardViewType), diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index 58467efc9eb..fd314326040 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -533,6 +533,7 @@ public class Graphics { alphaComposite = 1; batch.setColor(Color.WHITE); } + public float getfloatAlphaComposite() { return alphaComposite; } public void drawImage(FImage image, float x, float y, float w, float h) { drawImage(image, x, y, w, h, false); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 945f470ebae..d94183f3c3e 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -3,6 +3,7 @@ package forge.screens.match; import java.util.*; import java.util.Map.Entry; +import com.badlogic.gdx.graphics.Color; import org.apache.commons.lang3.tuple.Pair; import com.badlogic.gdx.Input.Keys; @@ -565,6 +566,23 @@ public class MatchScreen extends FScreen { y = bottomPlayerPanel.getTop() + bottomPlayerPanel.getField().getHeight(); g.drawLine(1, BORDER_COLOR, x, y, w, y); } + + //Draw Priority Human Multiplayer 2 player + float oldAlphaComposite = g.getfloatAlphaComposite(); + if ((getPlayerPanels().keySet().size() == 2) && noAIPlayer()){ + for (VPlayerPanel playerPanel: playerPanelsList){ + midField = playerPanel.getTop(); + y = midField - 0.5f; + float adjustY = Forge.isLandscapeMode() ? y + 1f : midField; + float adjustH = Forge.isLandscapeMode() ? playerPanel.getField().getBottom() - 1f : playerPanel.getBottom() - 1f; + if(playerPanel.getPlayer().getHasPriority() && !playerPanel.getPlayer().isAI()) + g.setAlphaComposite(0.8f); + else + g.setAlphaComposite(0f); + g.drawRect(4f, Color.CYAN, playerPanel.getField().getLeft(), adjustY, playerPanel.getField().getWidth(), adjustH); + g.setAlphaComposite(oldAlphaComposite); + } + } } protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { @@ -669,5 +687,13 @@ public class MatchScreen extends FScreen { } return false; } + private boolean noAIPlayer(){ + boolean noAi = true; + for (VPlayerPanel playerPanel: playerPanelsList) { + if(playerPanel.getPlayer().isAI()) + noAi = false; + } + return noAi; + } } } From 61f400feacfe8d0ccd41d5201bd3f7ad2c9f4b07 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:28:48 +0800 Subject: [PATCH 2/5] Prevent NPE --- .../src/forge/card/CardRenderer.java | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index aa898eb012f..929f0967155 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -558,39 +558,37 @@ public class CardRenderer { } //if (counterBoxBaseWidth + font.getBounds(String.valueOf(maxCounters)).width > w) { - layout.setText(font, String.valueOf(maxCounters)); - - if (counterBoxBaseWidth + layout.width > w) { - - drawCounterImage(card, g, x, y, w, h); - return; + if(font != null && !String.valueOf(maxCounters).isEmpty()){ + layout.setText(font, String.valueOf(maxCounters)); + if (counterBoxBaseWidth + layout.width > w) { + drawCounterImage(card, g, x, y, w, h); + return; + } } - } for (Map.Entry counterEntry : card.getCounters().entrySet()) { - final CounterType counter = counterEntry.getKey(); final int numberOfCounters = counterEntry.getValue(); //final float counterBoxRealWidth = counterBoxBaseWidth + font.getBounds(String.valueOf(numberOfCounters)).width + 4; - layout.setText(font, String.valueOf(numberOfCounters)); - final float counterBoxRealWidth = counterBoxBaseWidth + layout.width + 4; + if(font != null && !String.valueOf(numberOfCounters).isEmpty()){ + layout.setText(font, String.valueOf(numberOfCounters)); + final float counterBoxRealWidth = counterBoxBaseWidth + layout.width + 4; - final float counterYOffset = spaceFromTopOfCard - (currentCounter++ * (counterBoxHeight + counterBoxSpacing)); + final float counterYOffset = spaceFromTopOfCard - (currentCounter++ * (counterBoxHeight + counterBoxSpacing)); - g.fillRect(counterBackgroundColor, x - 3, counterYOffset, counterBoxRealWidth, counterBoxHeight); + g.fillRect(counterBackgroundColor, x - 3, counterYOffset, counterBoxRealWidth, counterBoxHeight); - if (!counterColorCache.containsKey(counter)) { - counterColorCache.put(counter, new Color(counter.getRed() / 255.0f, counter.getGreen() / 255.0f, counter.getBlue() / 255.0f, 1.0f)); + if (!counterColorCache.containsKey(counter)) { + counterColorCache.put(counter, new Color(counter.getRed() / 255.0f, counter.getGreen() / 255.0f, counter.getBlue() / 255.0f, 1.0f)); + } + + Color counterColor = counterColorCache.get(counter); + + drawText(g, counter.getCounterOnCardDisplayName(), font, counterColor, x + 2 + additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); + drawText(g, String.valueOf(numberOfCounters), font, counterColor, x + counterBoxBaseWidth - 4f - additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); } - - Color counterColor = counterColorCache.get(counter); - - drawText(g, counter.getCounterOnCardDisplayName(), font, counterColor, x + 2 + additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); - drawText(g, String.valueOf(numberOfCounters), font, counterColor, x + counterBoxBaseWidth - 4f - additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); - } - } private static final int GL_BLEND = GL20.GL_BLEND; @@ -600,22 +598,22 @@ public class CardRenderer { if (color.a < 1) { //enable blending so alpha colored shapes work properly Gdx.gl.glEnable(GL_BLEND); } + if(font != null && !text.isEmpty()) { + layout.setText(font, text); + TextBounds textBounds = new TextBounds(layout.width, layout.height); - layout.setText(font, text); - TextBounds textBounds = new TextBounds(layout.width, layout.height); + float textHeight = textBounds.height; + if (h > textHeight) { + y += (h - textHeight) / 2; + } - float textHeight = textBounds.height; - if (h > textHeight) { - y += (h - textHeight) / 2; + font.setColor(color); + font.draw(g.getBatch(), text, g.adjustX(x), g.adjustY(y, 0), w, horizontalAlignment, true); + + if (color.a < 1) { + Gdx.gl.glDisable(GL_BLEND); + } } - - font.setColor(color); - font.draw(g.getBatch(), text, g.adjustX(x), g.adjustY(y, 0), w, horizontalAlignment, true); - - if (color.a < 1) { - Gdx.gl.glDisable(GL_BLEND); - } - } private static void drawCounterImage(final CardView card, final Graphics g, final float x, final float y, final float w, final float h) { From 73b71b18ab2c94adaa8539fbf03d8b156e7462d2 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:29:40 +0800 Subject: [PATCH 3/5] Transluscent Overlay for Loader --- forge-gui-mobile/src/forge/screens/LoadingOverlay.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java index adea66bfaf5..1446a973d7d 100644 --- a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java +++ b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java @@ -1,5 +1,6 @@ package forge.screens; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Align; import forge.FThreads; @@ -91,6 +92,12 @@ public class LoadingOverlay extends FOverlay { float panelHeight = logoSize + fontHeight + 4 * padding; float y = (getHeight() - panelHeight) / 2; + float oldAlpha = g.getfloatAlphaComposite(); + //dark translucent back.. + g.setAlphaComposite(0.6f); + g.fillRect(Color.BLACK, 0, 0, getWidth(), getHeight()); + g.setAlphaComposite(oldAlpha); + //overlay g.fillRect(BACK_COLOR, x, y, panelWidth, panelHeight); g.drawRect(Utils.scale(2), FORE_COLOR, x, y, panelWidth, panelHeight); y += padding; From 8e282b16c5a379a7557c4db07d1b2641450e5755 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:30:42 +0800 Subject: [PATCH 4/5] Update Player Name --- .../src/forge/screens/constructed/LobbyScreen.java | 9 ++++++++- .../java/forge/net/event/UpdateLobbyPlayerEvent.java | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index 731c9a9eb6b..d9b8c2dc78d 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -269,7 +269,8 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { @Override protected void startMatch() { for (int i = 0; i < getNumPlayers(); i++) { - updateDeck(i); + updateDeck(i);//TODO: Investigate why AI names cannot be overriden? + updateName(i, getPlayerName(i)); } //set this so we cant get any multi/rapid tap on start button Forge.setLoadingaMatch(true); @@ -614,6 +615,12 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { } } + private void updateName(final int playerIndex, final String name) { + if (playerChangeListener != null) { + playerChangeListener.update(playerIndex, UpdateLobbyPlayerEvent.nameUpdate(name)); + } + } + void setReady(final int index, final boolean ready) { if (ready) { updateDeck(index); diff --git a/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java b/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java index 59f0eb7baa1..7640472ba6d 100644 --- a/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java +++ b/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java @@ -38,6 +38,13 @@ public final class UpdateLobbyPlayerEvent implements NetEvent { public static UpdateLobbyPlayerEvent deckUpdate(final DeckSection section, final CardPool cards) { return new UpdateLobbyPlayerEvent(section, cards); } + public static UpdateLobbyPlayerEvent nameUpdate(final String name) { + return new UpdateLobbyPlayerEvent(name); + } + + private UpdateLobbyPlayerEvent(String name) { + this.name = name; + } private UpdateLobbyPlayerEvent(final Deck deck) { this.deck = deck; From ccfbe4d956a4d82157e0de6e60124f9229b9cbad Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 14 Sep 2019 15:05:01 +0800 Subject: [PATCH 5/5] countHuman instead of noAIPlayer --- .../src/forge/screens/match/MatchScreen.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 850dec2c125..9a49fbe6873 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -576,7 +576,7 @@ public class MatchScreen extends FScreen { //Draw Priority Human Multiplayer 2 player float oldAlphaComposite = g.getfloatAlphaComposite(); - if ((getPlayerPanels().keySet().size() == 2) && noAIPlayer()){ + if ((getPlayerPanels().keySet().size() == 2) && (countHuman() == 2)){ for (VPlayerPanel playerPanel: playerPanelsList){ midField = playerPanel.getTop(); y = midField - 0.5f; @@ -694,13 +694,13 @@ public class MatchScreen extends FScreen { } return false; } - private boolean noAIPlayer(){ - boolean noAi = true; + private int countHuman(){ + int humanplayers = 0; for (VPlayerPanel playerPanel: playerPanelsList) { - if(playerPanel.getPlayer().isAI()) - noAi = false; + if(!playerPanel.getPlayer().isAI()) + humanplayers++; } - return noAi; + return humanplayers; } } }