- 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.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<? 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)) {
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<PhysicalCard> 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);
}
}
}));

View File

@@ -82,10 +82,14 @@ public class EventSerializer {
}
Map<Integer, Integer> charVitalities = gameStats.getCharVitalities();
Map<Integer, Integer> charThirdStats = gameStats.getThirdStats();
StringBuilder charStr = new StringBuilder();
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)
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<Integer, Integer> _charStrengths = 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
@@ -120,9 +121,12 @@ public class GameStats {
Map<Integer, Integer> newCharStrengths = 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))) {
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<Integer, Integer> 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;
}
}

View File

@@ -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;

View File

@@ -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.
<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.

View File

@@ -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: ""});
}
}

View File

@@ -875,20 +875,30 @@ var GempLotrGameUI = Class.extend({
cardVitalityDiv.css({display: "none"});
tokenOverlay.append(cardVitalityDiv);
var cardSiteNumberDiv = $("<div class='cardSiteNumber'></div>");
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;
},