"Merry"
This commit is contained in:
@@ -147,6 +147,10 @@ public class PlayConditions {
|
||||
return Filters.filter(game.getGameState().getDiscard(playerId), game.getGameState(), game.getModifiersQuerying(), Filters.and(filters, Filters.playable(game))).size() > 0;
|
||||
}
|
||||
|
||||
public static boolean canBeDiscarded(final PhysicalCard source, LotroGame game, final PhysicalCard card) {
|
||||
return game.getModifiersQuerying().canBeDiscardedFromPlay(game.getGameState(), card, source);
|
||||
}
|
||||
|
||||
public static boolean canExert(final PhysicalCard source, final GameState gameState, final ModifiersQuerying modifiersQuerying, Filterable... filters) {
|
||||
return canExert(source, gameState, modifiersQuerying, 1, filters);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.timing.AbstractEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
public class RemoveCharacterFromSkirmishEffect extends AbstractEffect {
|
||||
private PhysicalCard _source;
|
||||
private PhysicalCard _toRemove;
|
||||
|
||||
public RemoveCharacterFromSkirmishEffect(PhysicalCard source, PhysicalCard toRemove) {
|
||||
_source = source;
|
||||
_toRemove = toRemove;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayableInFull(LotroGame game) {
|
||||
return Filters.inSkirmish.accepts(game.getGameState(), game.getModifiersQuerying(), _toRemove);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(LotroGame game) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EffectResult.Type getType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FullEffectResult playEffectReturningResult(LotroGame game) {
|
||||
if (isPlayableInFull(game)) {
|
||||
game.getGameState().removeFromSkirmish(_toRemove);
|
||||
}
|
||||
return new FullEffectResult(null, false, false);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.gempukku.lotro.cards.set4.shire;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractCompanion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.RemoveCharacterFromSkirmishEffect;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
import com.gempukku.lotro.common.Signet;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Two Towers
|
||||
* Side: Free
|
||||
* Culture: Shire
|
||||
* Twilight Cost: 1
|
||||
* Type: Companion • Hobbit
|
||||
* Strength: 3
|
||||
* Vitality: 4
|
||||
* Resistance: 6
|
||||
* Signet: Gandalf
|
||||
* Game Text: Skirmish: If Merry is not assigned to a skirmish, discard him to remove a [SAURON] Orc from a skirmish
|
||||
* involving an unbound companion.
|
||||
*/
|
||||
public class Card4_311 extends AbstractCompanion {
|
||||
public Card4_311() {
|
||||
super(1, 3, 4, Culture.SHIRE, Race.HOBBIT, Signet.GANDALF, "Merry", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<? extends Action> getExtraInPlayPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)
|
||||
&& Filters.notAssignedToSkirmish.accepts(game.getGameState(), game.getModifiersQuerying(), self)
|
||||
&& PlayConditions.canBeDiscarded(self, game, self)) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self);
|
||||
action.appendCost(
|
||||
new DiscardCardsFromPlayEffect(self, self));
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose SAURON Orc", Culture.SAURON, Race.ORC, Filters.inSkirmishAgainst(Filters.unboundCompanion)) {
|
||||
@Override
|
||||
protected void cardSelected(LotroGame game, PhysicalCard card) {
|
||||
action.insertEffect(
|
||||
new RemoveCharacterFromSkirmishEffect(self, card));
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,8 @@ public interface GameStateListener {
|
||||
|
||||
public void startSkirmish(PhysicalCard fp, List<PhysicalCard> minions);
|
||||
|
||||
public void removeFromSkirmish(PhysicalCard card);
|
||||
|
||||
public void finishSkirmish();
|
||||
|
||||
public void addTokens(PhysicalCard card, Token token, int count);
|
||||
|
||||
@@ -267,6 +267,18 @@ public class GameState {
|
||||
return _inPlay;
|
||||
}
|
||||
|
||||
public void removeFromSkirmish(PhysicalCard card) {
|
||||
if (_skirmish.getFellowshipCharacter() == card) {
|
||||
_skirmish.setFellowshipCharacter(null);
|
||||
for (GameStateListener listener : getAllGameStateListeners())
|
||||
listener.removeFromSkirmish(card);
|
||||
}
|
||||
if (_skirmish.getShadowCharacters().remove(card)) {
|
||||
for (GameStateListener listener : getAllGameStateListeners())
|
||||
listener.removeFromSkirmish(card);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeCardsFromZone(Collection<PhysicalCard> cards) {
|
||||
Map<GameStateListener, Set<PhysicalCard>> listenerCards = new HashMap<GameStateListener, Set<PhysicalCard>>();
|
||||
|
||||
@@ -291,11 +303,8 @@ public class GameState {
|
||||
removeAssignment(assignment);
|
||||
}
|
||||
|
||||
if (_skirmish != null) {
|
||||
if (_skirmish.getFellowshipCharacter() == card)
|
||||
_skirmish.setFellowshipCharacter(null);
|
||||
_skirmish.getShadowCharacters().remove(card);
|
||||
}
|
||||
if (_skirmish != null)
|
||||
removeFromSkirmish(card);
|
||||
|
||||
removeAllTokens(card);
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ public class GameEvent {
|
||||
PARTICIPANT, GAME_PHASE_CHANGE, TURN_CHANGE, PLAYER_POSITION, TWILIGHT_POOL,
|
||||
PUT_CARD_IN_PLAY, MOVE_CARD_IN_PLAY, REMOVE_CARD_FROM_PLAY,
|
||||
ADD_ASSIGNMENT, REMOVE_ASSIGNMENT,
|
||||
START_SKIRMISH, END_SKIRMISH,
|
||||
START_SKIRMISH, REMOVE_FROM_SKIRMISH, END_SKIRMISH,
|
||||
ADD_TOKENS, REMOVE_TOKENS,
|
||||
MESSAGE, WARNING,
|
||||
ZONE_SIZE,
|
||||
|
||||
@@ -56,6 +56,11 @@ public class GatheringParticipantCommunicationChannel implements GameStateListen
|
||||
_events.add(gameEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFromSkirmish(PhysicalCard card) {
|
||||
_events.add(new GameEvent(REMOVE_FROM_SKIRMISH).card(card));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishSkirmish() {
|
||||
_events.add(new GameEvent(END_SKIRMISH));
|
||||
|
||||
@@ -452,6 +452,20 @@ var GameAnimations = Class.extend({
|
||||
});
|
||||
},
|
||||
|
||||
removeFromSkirmish: function(element, animate) {
|
||||
var that = this;
|
||||
$("#main").queue(
|
||||
function(next) {
|
||||
var cardId = element.getAttribute("cardId");
|
||||
|
||||
$(".card:cardId(" + cardId + ")").each(function() {
|
||||
$(this).data("card").skirmish = false;
|
||||
});
|
||||
|
||||
next();
|
||||
});
|
||||
},
|
||||
|
||||
endSkirmish: function(animate) {
|
||||
var that = this;
|
||||
$("#main").queue(
|
||||
|
||||
@@ -507,6 +507,8 @@ var GempLotrGameUI = Class.extend({
|
||||
this.animations.removeAssignment(gameEvent, animate);
|
||||
} else if (eventType == "START_SKIRMISH") {
|
||||
this.animations.startSkirmish(gameEvent, animate);
|
||||
} else if (eventType == "REMOVE_FROM_SKIRMISH") {
|
||||
this.animations.removeFromSkirmish(gameEvent, animate);
|
||||
} else if (eventType == "END_SKIRMISH") {
|
||||
this.animations.endSkirmish(animate);
|
||||
} else if (eventType == "ADD_TOKENS") {
|
||||
|
||||
Reference in New Issue
Block a user