From 570677fe15de1fa0f40ae449be43f057bc8183e9 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Mon, 28 May 2018 22:11:16 +0200 Subject: [PATCH] Player: added LifeGainedByTeamThisTurn logic --- .../java/forge/game/card/CardFactoryUtil.java | 7 ++- .../java/forge/game/phase/PhaseHandler.java | 12 +---- .../main/java/forge/game/player/Player.java | 47 +++++++++++++++++++ .../forge/game/player/PlayerPredicates.java | 9 ++++ 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index f75817ea098..c4a17b85912 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -581,7 +581,9 @@ public class CardFactoryUtil { if (value.contains("LifeGainedThisTurn")) { return doXMath(player.getLifeGainedThisTurn(), m, source); } - + if (value.contains("LifeGainedByTeamThisTurn")) { + return doXMath(player.getLifeGainedByTeamThisTurn(), m, source); + } if (value.contains("PoisonCounters")) { return doXMath(player.getPoisonCounters(), m, source); } @@ -951,6 +953,9 @@ public class CardFactoryUtil { if (sq[0].contains("LifeYouGainedThisTurn")) { return doXMath(cc.getLifeGainedThisTurn(), m, c); } + if (sq[0].contains("LifeYourTeamGainedThisTurn")) { + return doXMath(cc.getLifeGainedByTeamThisTurn(), m, c); + } if (sq[0].contains("LifeOppsLostThisTurn")) { int lost = 0; for (Player opp : cc.getOpponents()) { 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 a10ca915a34..3fbde336028 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -771,17 +771,7 @@ public class PhaseHandler implements java.io.Serializable { } } for (Player p : game.getPlayers()) { - p.resetProwl(); - p.setSpellsCastLastTurn(p.getSpellsCastThisTurn()); - p.resetSpellsCastThisTurn(); - p.setLifeLostLastTurn(p.getLifeLostThisTurn()); - p.setLifeLostThisTurn(0); - p.setLifeGainedThisTurn(0); - p.setLibrarySearched(0); - p.setNumManaConversion(0); - - p.removeKeyword("Skip the untap step of this turn."); - p.removeKeyword("Schemes can't be set in motion this turn."); + p.clearNextTurn(); } game.getTriggerHandler().clearThisTurnDelayedTrigger(); 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 64797d921d6..05d18128347 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -91,6 +91,7 @@ public class Player extends GameEntity implements Comparable { private int lifeLostThisTurn = 0; private int lifeLostLastTurn = 0; private int lifeGainedThisTurn = 0; + private int lifeGainedByTeamThisTurn = 0; private int numPowerSurgeLands; private int numLibrarySearchedOwn = 0; //The number of times this player has searched his library private int maxHandSize = 7; @@ -309,6 +310,15 @@ public class Player extends GameEntity implements Comparable { return getAllOtherPlayers().filter(Predicates.not(PlayerPredicates.isOpponentOf(this))); } + public final PlayerCollection getTeamMates(final boolean inclThis) { + PlayerCollection col = new PlayerCollection(); + if (inclThis) { + col.add(this); + } + col.addAll(getAllOtherPlayers().filter(PlayerPredicates.sameTeam(this))); + return col; + } + /** * returns allied players. * Should keep player relations somewhere in the match structure @@ -414,6 +424,11 @@ public class Player extends GameEntity implements Comparable { newLifeSet = true; lifeGainedThisTurn += lifeGain; + // team mates need to be notified about life gained + for (final Player p : getTeamMates(true)) { + p.addLifeGainedByTeamThisTurn(lifeGain); + } + // Run triggers final Map runParams = Maps.newHashMap(); runParams.put("Player", this); @@ -2149,6 +2164,13 @@ public class Player extends GameEntity implements Comparable { spellsCastLastTurn = num; } + public final int getLifeGainedByTeamThisTurn() { + return lifeGainedByTeamThisTurn; + } + public final void addLifeGainedByTeamThisTurn(int val) { + lifeGainedByTeamThisTurn += val; + } + public final int getLifeGainedThisTurn() { return lifeGainedThisTurn; } @@ -2789,7 +2811,32 @@ public class Player extends GameEntity implements Comparable { this.updateZoneForView(com); } + public final boolean sameTeam(final Player other) { + if (this.equals(other)) { + return true; + } + if (this.teamNumber < 0 || other.getTeam() < 0) { + return false; + } + return this.teamNumber == other.getTeam(); + } + public final int countExaltedBonus() { return CardLists.getAmountOfKeyword(this.getCardsIn(ZoneType.Battlefield), Keyword.EXALTED); } + + public final void clearNextTurn() { + resetProwl(); + setSpellsCastLastTurn(getSpellsCastThisTurn()); + resetSpellsCastThisTurn(); + setLifeLostLastTurn(getLifeLostThisTurn()); + setLifeLostThisTurn(0); + lifeGainedThisTurn = 0; + lifeGainedByTeamThisTurn = 0; + setLibrarySearched(0); + setNumManaConversion(0); + + removeKeyword("Skip the untap step of this turn."); + removeKeyword("Schemes can't be set in motion this turn."); + } } diff --git a/forge-game/src/main/java/forge/game/player/PlayerPredicates.java b/forge-game/src/main/java/forge/game/player/PlayerPredicates.java index a78d6caa380..004099f3d01 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerPredicates.java +++ b/forge-game/src/main/java/forge/game/player/PlayerPredicates.java @@ -31,6 +31,15 @@ public final class PlayerPredicates { }; } + public static final Predicate sameTeam(final Player player) { + return new Predicate() { + @Override + public boolean apply(final Player p) { + return player.sameTeam(p); + } + }; + } + public static final Predicate isCardInPlay(final String cardName) { return new Predicate() { @Override