This commit is contained in:
marcins78@gmail.com
2011-10-16 19:17:28 +00:00
parent 8ce3ef62d5
commit 37d865ab4a
9 changed files with 141 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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") {