- Added display of the current site number of a minion in play.

- "Forewarned" now discards itself if played decides to discard the top card.
This commit is contained in:
marcins78@gmail.com
2011-11-02 22:42:09 +00:00
parent 956a90a631
commit e3f51e10dd
7 changed files with 58 additions and 8 deletions

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set6.elven;
import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.SubCostToEffectAction;
import com.gempukku.lotro.cards.effects.DiscardCardFromDeckEffect; import com.gempukku.lotro.cards.effects.DiscardCardFromDeckEffect;
import com.gempukku.lotro.common.*; import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard; 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.ArbitraryCardsSelectionDecision;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.effects.AddTwilightEffect; 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.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
@@ -37,7 +39,7 @@ public class Card6_017 extends AbstractPermanent {
} }
@Override @Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { protected List<? extends Action> getExtraPhaseActions(String playerId, final LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self)) { if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self)) {
final ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost( action.appendCost(
@@ -49,9 +51,14 @@ public class Card6_017 extends AbstractPermanent {
@Override @Override
public void decisionMade(String result) throws DecisionResultInvalidException { public void decisionMade(String result) throws DecisionResultInvalidException {
final List<PhysicalCard> selectedCards = getSelectedCardsByResponse(result); final List<PhysicalCard> selectedCards = getSelectedCardsByResponse(result);
for (PhysicalCard selectedCard : selectedCards) { if (selectedCards.size() > 0) {
action.insertEffect( PhysicalCard selectedCard = selectedCards.get(0);
SubCostToEffectAction subAction = new SubCostToEffectAction(action);
subAction.appendCost(
new DiscardCardsFromPlayEffect(self, self));
subAction.appendEffect(
new DiscardCardFromDeckEffect(selectedCard)); new DiscardCardFromDeckEffect(selectedCard));
game.getActionsEnvironment().addActionToStack(subAction);
} }
} }
})); }));

View File

@@ -82,10 +82,14 @@ public class EventSerializer {
} }
Map<Integer, Integer> charVitalities = gameStats.getCharVitalities(); Map<Integer, Integer> charVitalities = gameStats.getCharVitalities();
Map<Integer, Integer> charThirdStats = gameStats.getThirdStats();
StringBuilder charStr = new StringBuilder(); StringBuilder charStr = new StringBuilder();
for (Map.Entry<Integer, Integer> characters : gameStats.getCharStrengths().entrySet()) { for (Map.Entry<Integer, Integer> 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) if (charStr.length() > 0)
charStr.delete(0, 1); charStr.delete(0, 1);

View File

@@ -30,6 +30,7 @@ public class GameStats {
private Map<String, Map<Zone, Integer>> _zoneSizes = new HashMap<String, Map<Zone, Integer>>(); private Map<String, Map<Zone, Integer>> _zoneSizes = new HashMap<String, Map<Zone, Integer>>();
private Map<Integer, Integer> _charStrengths = new HashMap<Integer, Integer>(); private Map<Integer, Integer> _charStrengths = new HashMap<Integer, Integer>();
private Map<Integer, Integer> _charVitalities = new HashMap<Integer, Integer>(); private Map<Integer, Integer> _charVitalities = new HashMap<Integer, Integer>();
private Map<Integer, Integer> _thirdStats = new HashMap<Integer, Integer>();
/** /**
* @return If the stats have changed * @return If the stats have changed
@@ -120,9 +121,12 @@ public class GameStats {
Map<Integer, Integer> newCharStrengths = new HashMap<Integer, Integer>(); Map<Integer, Integer> newCharStrengths = new HashMap<Integer, Integer>();
Map<Integer, Integer> newCharVitalities = new HashMap<Integer, Integer>(); Map<Integer, Integer> newCharVitalities = new HashMap<Integer, Integer>();
Map<Integer, Integer> newThirdStats = new HashMap<Integer, Integer>();
for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) { 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)); newCharStrengths.put(character.getCardId(), game.getModifiersQuerying().getStrength(game.getGameState(), character));
newCharVitalities.put(character.getCardId(), game.getModifiersQuerying().getVitality(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)) { if (!newCharStrengths.equals(_charStrengths)) {
@@ -135,6 +139,11 @@ public class GameStats {
_charVitalities = newCharVitalities; _charVitalities = newCharVitalities;
} }
if (!newThirdStats.equals(_thirdStats)) {
changed = true;
_thirdStats = newThirdStats;
}
return changed; return changed;
} }
@@ -186,6 +195,10 @@ public class GameStats {
return _charVitalities; return _charVitalities;
} }
public Map<Integer, Integer> getThirdStats() {
return _thirdStats;
}
public GameStats makeACopy() { public GameStats makeACopy() {
GameStats copy = new GameStats(); GameStats copy = new GameStats();
copy._fellowshipArchery = _fellowshipArchery; copy._fellowshipArchery = _fellowshipArchery;
@@ -200,6 +213,7 @@ public class GameStats {
copy._zoneSizes = _zoneSizes; copy._zoneSizes = _zoneSizes;
copy._charStrengths = _charStrengths; copy._charStrengths = _charStrengths;
copy._charVitalities = _charVitalities; copy._charVitalities = _charVitalities;
copy._thirdStats = _thirdStats;
return copy; return copy;
} }
} }

View File

@@ -47,6 +47,15 @@ body {
color: #ffffff; color: #ffffff;
} }
.cardSiteNumber {
text-align: center;
vertical-align: middle;
background-color: #877a4e;
opacity: 0.7;
font-weight: bolder;
color: #ffffff;
}
.selectableCard > .borderOverlay { .selectableCard > .borderOverlay {
border-color: #00af00; border-color: #00af00;
cursor: pointer; cursor: pointer;

View File

@@ -6,6 +6,8 @@ against Nazgul.
+1 strength to itself for each such card. +1 strength to itself for each such card.
- User interface now displays damage bonuses in current skirmish (if any). - User interface now displays damage bonuses in current skirmish (if any).
- "Forearmed" can now be used during Skirmish phase. - "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.
<b>1 Nov. 2011</b> <b>1 Nov. 2011</b>
- Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it. - Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it.

View File

@@ -691,6 +691,7 @@ var GameAnimations = Class.extend({
function(next) { function(next) {
$(".cardStrength").css({display: "none"}); $(".cardStrength").css({display: "none"});
$(".cardVitality").css({display: "none"}); $(".cardVitality").css({display: "none"});
$(".cardSiteNumber").css({display: "none"});
var charStats = element.getAttribute("charStats"); var charStats = element.getAttribute("charStats");
if (charStats != null) { if (charStats != null) {
@@ -701,6 +702,8 @@ var GameAnimations = Class.extend({
var cardStatArr = cardStats[1].split("|"); var cardStatArr = cardStats[1].split("|");
$(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""}); $(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""});
$(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""}); $(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""});
if (cardStatArr.length > 2)
$(".cardSiteNumber", cardDiv).html(cardStatArr[2]).css({display: ""});
} }
} }

View File

@@ -875,20 +875,30 @@ var GempLotrGameUI = Class.extend({
cardVitalityDiv.css({display: "none"}); cardVitalityDiv.css({display: "none"});
tokenOverlay.append(cardVitalityDiv); tokenOverlay.append(cardVitalityDiv);
var cardSiteNumberDiv = $("<div class='cardSiteNumber'></div>");
cardSiteNumberDiv.css({display: "none"});
tokenOverlay.append(cardSiteNumberDiv);
cardDiv.data("card", card); cardDiv.data("card", card);
var sizeListeners = new Array(); var sizeListeners = new Array();
sizeListeners[0] = { sizeListeners[0] = {
sizeChanged: function(cardElem, width, height) { sizeChanged: function(cardElem, width, height) {
var maxDimension = Math.max(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 fontPerc = (size * 7) + "%";
var borderRadius = Math.ceil(size / 5) + "px"; 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}); $(".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: borderWidth * 1.45 + "px", top: maxDimension * 0.645 + size + "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); cardDiv.swipe(swipeOptions);
return cardDiv; return cardDiv;
}, },