From ebdfd94f8536d8315bc1d7f54dfbc84ac08cb710 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Thu, 8 Nov 2018 07:27:34 +0100 Subject: [PATCH] ExtraTurn in PlayerView --- .../java/forge/game/combat/CombatUtil.java | 2 +- .../java/forge/game/phase/PhaseHandler.java | 36 +++++++++++++++++-- .../main/java/forge/game/player/Player.java | 14 +++++--- .../java/forge/game/player/PlayerView.java | 21 +++++++++++ .../forge/trackable/TrackableProperty.java | 2 ++ 5 files changed, 68 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 388990b4ec1..1fbba12389e 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -219,7 +219,7 @@ public class CombatUtil { } break; case "CARDNAME can't attack during extra turns.": - if (game.getPhaseHandler().getPlayerTurn().isPlayingExtraTurn()) { + if (game.getPhaseHandler().getPlayerTurn().isExtraTurn()) { return false; } break; 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 ba10cde1a85..29e13473533 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -799,7 +799,12 @@ public class PhaseHandler implements java.io.Serializable { private Player getNextActivePlayer() { ExtraTurn extraTurn = !extraTurns.isEmpty() ? extraTurns.pop() : null; Player nextPlayer = extraTurn != null ? extraTurn.getPlayer() : game.getNextPlayerAfter(playerTurn); - + + // update ExtraTurn Count for all players + for (final Player p : game.getPlayers()) { + p.setExtraTurnCount(getExtraTurnForPlayer(p)); + } + if (extraTurn != null) { // The bottom of the extra turn stack is the normal turn nextPlayer.setExtraTurn(!extraTurns.isEmpty()); @@ -873,7 +878,13 @@ public class PhaseHandler implements java.io.Serializable { if (extraTurns.isEmpty()) { extraTurns.push(new ExtraTurn(game.getNextPlayerAfter(playerTurn))); } - return extraTurns.push(new ExtraTurn(player)); + + ExtraTurn result = extraTurns.push(new ExtraTurn(player)); + // update Extra Turn for all players + for (final Player p : game.getPlayers()) { + p.setExtraTurnCount(getExtraTurnForPlayer(p)); + } + return result; } public final void addExtraPhase(final PhaseType afterPhase, final PhaseType extraPhase) { @@ -1128,4 +1139,25 @@ public class PhaseHandler implements java.io.Serializable { public void setCombat(Combat combat) { this.combat = combat; } + + /** + * returns the continuous extra turn count + * @param PLayer p + * @return int + */ + public int getExtraTurnForPlayer(final Player p) { + if (this.extraTurns.isEmpty() || this.extraTurns.size() < 2) { + return 0; + } + + int count = 0; + // skip the first element + for (final ExtraTurn et : extraTurns.subList(1, extraTurns.size())) { + if (!et.getPlayer().equals(p)) { + break; + } + count += 1; + } + return count; + } } 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 e4e5bfe45ce..ac1f65aff47 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -144,7 +144,6 @@ public class Player extends GameEntity implements Comparable { private Map commanderCast = Maps.newHashMap(); private final Game game; private boolean triedToDrawFromEmptyLibrary = false; - private boolean isPlayingExtraTrun = false; private CardCollection lostOwnership = new CardCollection(); private CardCollection gainedOwnership = new CardCollection(); private int numManaConversion = 0; @@ -2673,11 +2672,18 @@ public class Player extends GameEntity implements Comparable { return result; } - public boolean isPlayingExtraTurn() { - return isPlayingExtraTrun; + public boolean isExtraTurn() { + return view.getIsExtraTurn(); } public void setExtraTurn(boolean b) { - isPlayingExtraTrun = b; + view.setIsExtraTurn(b); + } + + public int getExtraTurnCount() { + return view.getExtraTurnCount(); + } + public void setExtraTurnCount(final int val) { + view.setExtraTurnCount(val); } public void initVariantsZones(RegisteredPlayer registeredPlayer) { 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 30235025c54..989d70ecf38 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -189,6 +189,22 @@ public class PlayerView extends GameEntityView { set(TrackableProperty.Counters, p.getCounters()); } + public boolean getIsExtraTurn() { + return get(TrackableProperty.IsExtraTurn); + } + + public void setIsExtraTurn(final boolean val) { + set(TrackableProperty.IsExtraTurn, val); + } + + public int getExtraTurnCount() { + return get(TrackableProperty.ExtraTurnCount); + } + + public void setExtraTurnCount(final int val) { + set(TrackableProperty.ExtraTurnCount, val); + } + public int getMaxHandSize() { return get(TrackableProperty.MaxHandSize); } @@ -422,6 +438,11 @@ public class PlayerView extends GameEntityView { details.add(TextUtil.concatNoSpace("Cards in hand: ", TextUtil.addSuffix(String.valueOf(getHandSize()),"/"), getMaxHandString())); details.add(TextUtil.concatWithSpace("Cards drawn this turn:", String.valueOf(getNumDrawnThisTurn()))); details.add(TextUtil.concatWithSpace("Damage prevention:", String.valueOf(getPreventNextDamage()))); + + if (getIsExtraTurn()) { + details.add("Extra Turn: Yes"); + } + details.add(TextUtil.concatWithSpace("Extra Turn Count:", String.valueOf(getExtraTurnCount()))); final String keywords = Lang.joinHomogenous(getDisplayableKeywords()); if (!keywords.isEmpty()) { details.add(keywords); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index b7772a50791..6c407b678ee 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -113,6 +113,8 @@ public enum TrackableProperty { Hand(TrackableTypes.CardViewCollectionType, FreezeMode.IgnoresFreeze), Library(TrackableTypes.CardViewCollectionType, FreezeMode.IgnoresFreeze), Mana(TrackableTypes.ManaMapType, FreezeMode.IgnoresFreeze), + IsExtraTurn(TrackableTypes.BooleanType), + ExtraTurnCount(TrackableTypes.IntegerType), //SpellAbility HostCard(TrackableTypes.CardViewType),