From e3f51e10ddcff83ed7d02ceaceec3fcd7ead0160 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 2 Nov 2011 22:42:09 +0000 Subject: [PATCH] - Added display of the current site number of a minion in play. - "Forewarned" now discards itself if played decides to discard the top card. --- .../lotro/cards/set6/elven/Card6_017.java | 13 ++++++++++--- .../lotro/game/state/EventSerializer.java | 6 +++++- .../lotro/logic/timing/GameStats.java | 14 ++++++++++++++ .../gemp-lotr-web/src/main/webapp/game.html | 9 +++++++++ .../src/main/webapp/includes/changeLog.html | 2 ++ .../src/main/webapp/js/gameAnimations.js | 3 +++ .../src/main/webapp/js/gameUi.js | 19 +++++++++++++++---- 7 files changed, 58 insertions(+), 8 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_017.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_017.java index 89ca60c88..9e12ecabd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_017.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/elven/Card6_017.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set6.elven; import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.SubCostToEffectAction; import com.gempukku.lotro.cards.effects.DiscardCardFromDeckEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; @@ -10,6 +11,7 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.effects.AddTwilightEffect; +import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; import com.gempukku.lotro.logic.timing.Action; @@ -37,7 +39,7 @@ public class Card6_017 extends AbstractPermanent { } @Override - protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + protected List getExtraPhaseActions(String playerId, final LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self)) { final ActivateCardAction action = new ActivateCardAction(self); action.appendCost( @@ -49,9 +51,14 @@ public class Card6_017 extends AbstractPermanent { @Override public void decisionMade(String result) throws DecisionResultInvalidException { final List selectedCards = getSelectedCardsByResponse(result); - for (PhysicalCard selectedCard : selectedCards) { - action.insertEffect( + if (selectedCards.size() > 0) { + PhysicalCard selectedCard = selectedCards.get(0); + SubCostToEffectAction subAction = new SubCostToEffectAction(action); + subAction.appendCost( + new DiscardCardsFromPlayEffect(self, self)); + subAction.appendEffect( new DiscardCardFromDeckEffect(selectedCard)); + game.getActionsEnvironment().addActionToStack(subAction); } } })); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java index ca8ea0ec1..28e308c0a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java @@ -82,10 +82,14 @@ public class EventSerializer { } Map charVitalities = gameStats.getCharVitalities(); + Map charThirdStats = gameStats.getThirdStats(); StringBuilder charStr = new StringBuilder(); for (Map.Entry characters : gameStats.getCharStrengths().entrySet()) { - charStr.append("," + characters.getKey() + "=" + characters.getValue() + "|" + charVitalities.get(characters.getKey())); + Integer charCardId = characters.getKey(); + charStr.append("," + charCardId + "=" + characters.getValue() + "|" + charVitalities.get(charCardId)); + if (charThirdStats.containsKey(charCardId)) + charStr.append("|" + charThirdStats.get(charCardId)); } if (charStr.length() > 0) charStr.delete(0, 1); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java index d5b3f7160..25e83f01b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java @@ -30,6 +30,7 @@ public class GameStats { private Map> _zoneSizes = new HashMap>(); private Map _charStrengths = new HashMap(); private Map _charVitalities = new HashMap(); + private Map _thirdStats = new HashMap(); /** * @return If the stats have changed @@ -120,9 +121,12 @@ public class GameStats { Map newCharStrengths = new HashMap(); Map newCharVitalities = new HashMap(); + Map newThirdStats = new HashMap(); for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) { newCharStrengths.put(character.getCardId(), game.getModifiersQuerying().getStrength(game.getGameState(), character)); newCharVitalities.put(character.getCardId(), game.getModifiersQuerying().getVitality(game.getGameState(), character)); + if (character.getBlueprint().getCardType() == CardType.MINION) + newThirdStats.put(character.getCardId(), game.getModifiersQuerying().getMinionSiteNumber(game.getGameState(), character)); } if (!newCharStrengths.equals(_charStrengths)) { @@ -135,6 +139,11 @@ public class GameStats { _charVitalities = newCharVitalities; } + if (!newThirdStats.equals(_thirdStats)) { + changed = true; + _thirdStats = newThirdStats; + } + return changed; } @@ -186,6 +195,10 @@ public class GameStats { return _charVitalities; } + public Map getThirdStats() { + return _thirdStats; + } + public GameStats makeACopy() { GameStats copy = new GameStats(); copy._fellowshipArchery = _fellowshipArchery; @@ -200,6 +213,7 @@ public class GameStats { copy._zoneSizes = _zoneSizes; copy._charStrengths = _charStrengths; copy._charVitalities = _charVitalities; + copy._thirdStats = _thirdStats; return copy; } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html index b3c6e85b0..22ff2b0fa 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html @@ -47,6 +47,15 @@ body { color: #ffffff; } +.cardSiteNumber { + text-align: center; + vertical-align: middle; + background-color: #877a4e; + opacity: 0.7; + font-weight: bolder; + color: #ffffff; +} + .selectableCard > .borderOverlay { border-color: #00af00; cursor: pointer; diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 19eb8ac4e..80e7b32cd 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -6,6 +6,8 @@ against Nazgul. +1 strength to itself for each such card. - User interface now displays damage bonuses in current skirmish (if any). - "Forearmed" can now be used during Skirmish phase. +- Added display of the current site number of a minion in play. +- "Forewarned" now discards itself if played decides to discard the top card. 1 Nov. 2011 - Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it. diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js index ffbbd775c..9ec72916e 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js @@ -691,6 +691,7 @@ var GameAnimations = Class.extend({ function(next) { $(".cardStrength").css({display: "none"}); $(".cardVitality").css({display: "none"}); + $(".cardSiteNumber").css({display: "none"}); var charStats = element.getAttribute("charStats"); if (charStats != null) { @@ -701,6 +702,8 @@ var GameAnimations = Class.extend({ var cardStatArr = cardStats[1].split("|"); $(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""}); $(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""}); + if (cardStatArr.length > 2) + $(".cardSiteNumber", cardDiv).html(cardStatArr[2]).css({display: ""}); } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js index 0910b98ff..fa6a469f5 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js @@ -875,20 +875,30 @@ var GempLotrGameUI = Class.extend({ cardVitalityDiv.css({display: "none"}); tokenOverlay.append(cardVitalityDiv); + var cardSiteNumberDiv = $("
"); + cardSiteNumberDiv.css({display: "none"}); + tokenOverlay.append(cardSiteNumberDiv); + cardDiv.data("card", card); var sizeListeners = new Array(); sizeListeners[0] = { sizeChanged: function(cardElem, width, height) { var maxDimension = Math.max(width, height); - var borderWidth = Math.floor(maxDimension / 30); - var size = Math.floor(maxDimension / 10); + var size = 0.0865 * maxDimension; + + var x = 0.09255 * maxDimension - size / 2; + var strengthY = 0.67203 * maxDimension - size / 2; + var vitalityY = 0.79074 * maxDimension - size / 2; + var minionSiteNumberY = 0.89135 * maxDimension - size / 2; + var fontPerc = (size * 7) + "%"; var borderRadius = Math.ceil(size / 5) + "px"; - $(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.64 + "px", width: size, height: size}); - $(".cardVitality", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.645 + size + "px", width: size, height: size}); + $(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: strengthY + "px", width: size, height: size}); + $(".cardVitality", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: vitalityY + "px", width: size, height: size}); + $(".cardSiteNumber", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: minionSiteNumberY + "px", width: size, height: size}); } }; @@ -911,6 +921,7 @@ var GempLotrGameUI = Class.extend({ }; cardDiv.swipe(swipeOptions); + return cardDiv; },